feat(F3): CLI: f3 mirror to convert to/from Forgejo
feat(F3): driver stub feat(F3): util.Logger feat(F3): driver compliance tests feat(F3): driver/users implementation feat(F3): driver/user implementation feat(F3): driver/{projects,project} implementation feat(F3): driver/{labels,label} implementation feat(F3): driver/{milestones,milestone} implementation feat(F3): driver/{repositories,repository} implementation feat(F3): driver/{organizations,organization} implementation feat(F3): driver/{releases,release} implementation feat(F3): driver/{issues,issue} implementation feat(F3): driver/{comments,comment} implementation feat(F3): driver/{assets,asset} implementation feat(F3): driver/{pullrequests,pullrequest} implementation feat(F3): driver/{reviews,review} implementation feat(F3): driver/{topics,topic} implementation feat(F3): driver/{reactions,reaction} implementation feat(F3): driver/{reviewComments,reviewComment} implementation feat(F3): CLI: f3 mirror chore(F3): move to code.forgejo.org feat(f3): upgrade to gof3 3.1.0 repositories in pull requests are represented with a reference instead of an owner/project pair of names
This commit is contained in:
parent
64b67ba641
commit
e99d3f7055
56 changed files with 3991 additions and 5 deletions
135
tests/integration/cmd_forgejo_f3_test.go
Normal file
135
tests/integration/cmd_forgejo_f3_test.go
Normal file
|
@ -0,0 +1,135 @@
|
|||
// Copyright Earl Warren <contact@earl-warren.org>
|
||||
// Copyright Loïc Dachary <loic@dachary.org>
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package integration
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/cmd/forgejo"
|
||||
"code.gitea.io/gitea/services/f3/driver/options"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
_ "code.gitea.io/gitea/services/f3/driver"
|
||||
_ "code.gitea.io/gitea/services/f3/driver/tests"
|
||||
|
||||
f3_filesystem_options "code.forgejo.org/f3/gof3/v3/forges/filesystem/options"
|
||||
f3_logger "code.forgejo.org/f3/gof3/v3/logger"
|
||||
f3_options "code.forgejo.org/f3/gof3/v3/options"
|
||||
f3_generic "code.forgejo.org/f3/gof3/v3/tree/generic"
|
||||
f3_tests "code.forgejo.org/f3/gof3/v3/tree/tests/f3"
|
||||
f3_tests_forge "code.forgejo.org/f3/gof3/v3/tree/tests/f3/forge"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
func runApp(ctx context.Context, args ...string) (string, error) {
|
||||
l := f3_logger.NewCaptureLogger()
|
||||
ctx = f3_logger.ContextSetLogger(ctx, l)
|
||||
ctx = forgejo.ContextSetNoInit(ctx, true)
|
||||
|
||||
app := cli.NewApp()
|
||||
|
||||
app.Writer = l.GetBuffer()
|
||||
app.ErrWriter = l.GetBuffer()
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println(l.String())
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
|
||||
app.Commands = []*cli.Command{
|
||||
forgejo.SubcmdF3Mirror(ctx),
|
||||
}
|
||||
err := app.Run(args)
|
||||
|
||||
fmt.Println(l.String())
|
||||
|
||||
return l.String(), err
|
||||
}
|
||||
|
||||
func TestF3_CmdMirror_LocalForgejo(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
mirrorOptions := f3_tests_forge.GetFactory(options.Name)().NewOptions(t)
|
||||
mirrorTree := f3_generic.GetFactory("f3")(ctx, mirrorOptions)
|
||||
|
||||
fixtureOptions := f3_tests_forge.GetFactory(f3_filesystem_options.Name)().NewOptions(t)
|
||||
fixtureTree := f3_generic.GetFactory("f3")(ctx, fixtureOptions)
|
||||
|
||||
log := fixtureTree.GetLogger()
|
||||
creator := f3_tests.NewCreator(t, log)
|
||||
|
||||
log.Trace("======= build fixture")
|
||||
|
||||
var fromPath string
|
||||
{
|
||||
fixtureUserID := "userID01"
|
||||
fixtureProjectID := "projectID01"
|
||||
|
||||
userFormat := creator.GenerateUser()
|
||||
userFormat.SetID(fixtureUserID)
|
||||
users := fixtureTree.MustFind(f3_generic.NewPathFromString("/forge/users"))
|
||||
user := users.CreateChild(ctx)
|
||||
user.FromFormat(userFormat)
|
||||
user.Upsert(ctx)
|
||||
require.EqualValues(t, user.GetID(), users.GetIDFromName(ctx, userFormat.UserName))
|
||||
|
||||
projectFormat := creator.GenerateProject()
|
||||
projectFormat.SetID(fixtureProjectID)
|
||||
projects := user.MustFind(f3_generic.NewPathFromString("projects"))
|
||||
project := projects.CreateChild(ctx)
|
||||
project.FromFormat(projectFormat)
|
||||
project.Upsert(ctx)
|
||||
require.EqualValues(t, project.GetID(), projects.GetIDFromName(ctx, projectFormat.Name))
|
||||
|
||||
fromPath = fmt.Sprintf("/forge/users/%s/projects/%s", userFormat.UserName, projectFormat.Name)
|
||||
}
|
||||
|
||||
log.Trace("======= create mirror")
|
||||
|
||||
var toPath string
|
||||
var projects f3_generic.NodeInterface
|
||||
{
|
||||
userFormat := creator.GenerateUser()
|
||||
users := mirrorTree.MustFind(f3_generic.NewPathFromString("/forge/users"))
|
||||
user := users.CreateChild(ctx)
|
||||
user.FromFormat(userFormat)
|
||||
user.Upsert(ctx)
|
||||
require.EqualValues(t, user.GetID(), users.GetIDFromName(ctx, userFormat.UserName))
|
||||
|
||||
projectFormat := creator.GenerateProject()
|
||||
projects = user.MustFind(f3_generic.NewPathFromString("projects"))
|
||||
project := projects.CreateChild(ctx)
|
||||
project.FromFormat(projectFormat)
|
||||
project.Upsert(ctx)
|
||||
require.EqualValues(t, project.GetID(), projects.GetIDFromName(ctx, projectFormat.Name))
|
||||
|
||||
toPath = fmt.Sprintf("/forge/users/%s/projects/%s", userFormat.UserName, projectFormat.Name)
|
||||
}
|
||||
|
||||
log.Trace("======= mirror %s => %s", fromPath, toPath)
|
||||
output, err := runApp(ctx,
|
||||
"f3", "mirror",
|
||||
"--from-type", f3_filesystem_options.Name,
|
||||
"--from-path", fromPath,
|
||||
"--from-filesystem-directory", fixtureOptions.(f3_options.URLInterface).GetURL(),
|
||||
|
||||
"--to-type", options.Name,
|
||||
"--to-path", toPath,
|
||||
)
|
||||
assert.NoError(t, err)
|
||||
log.Trace("======= assert")
|
||||
require.Contains(t, output, fmt.Sprintf("mirror %s", fromPath))
|
||||
projects.List(ctx)
|
||||
require.NotEmpty(t, projects.GetChildren())
|
||||
log.Trace("======= project %s", projects.GetChildren()[0])
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue