1
0
Fork 0
golang-forgejo-f3-gof3/tree/tests/f3/helpers_repository_test.go
Daniel Baumann 03bfe4079e
Adding upstream version 3.10.8.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-18 09:37:23 +02:00

125 lines
5.7 KiB
Go

// Copyright Earl Warren <contact@earl-warren.org>
// Copyright Loïc Dachary <loic@dachary.org>
// SPDX-License-Identifier: MIT
package f3
import (
"context"
"testing"
filesystem_options "code.forgejo.org/f3/gof3/v3/forges/filesystem/options"
forgejo_options "code.forgejo.org/f3/gof3/v3/forges/forgejo/options"
helpers_repository "code.forgejo.org/f3/gof3/v3/forges/helpers/repository"
tests_repository "code.forgejo.org/f3/gof3/v3/forges/helpers/tests/repository"
"code.forgejo.org/f3/gof3/v3/logger"
f3_tree "code.forgejo.org/f3/gof3/v3/tree/f3"
"code.forgejo.org/f3/gof3/v3/tree/generic"
tests_forge "code.forgejo.org/f3/gof3/v3/tree/tests/f3/forge"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestNodeRepositoryDriverMirrorNoop(t *testing.T) {
ctx := context.Background()
url := t.TempDir()
repositoryHelper := tests_repository.NewTestHelper(t, url, nil)
repositoryHelper.CreateRepositoryContent("").PushMirror()
log := logger.NewCaptureLogger()
log.SetLevel(logger.Trace)
log.Reset()
helpers_repository.GitMirror(ctx, log, url, url, []string{})
assert.Contains(t, log.String(), "do nothing")
log.Reset()
helpers_repository.GitMirrorRef(ctx, log, url, "fakeref", url, "fakeref")
assert.Contains(t, log.String(), "do nothing")
}
func TestNodeRepositoryDriverMirrorForgejo(t *testing.T) {
ctx := context.Background()
log := logger.NewCaptureLogger()
log.SetLevel(logger.Trace)
testForgejo := tests_forge.GetFactory(forgejo_options.Name)()
opts := testForgejo.NewOptions(t)
forgeTree := generic.GetFactory("f3")(ctx, opts)
forgeTree.Trace("======= build fixture")
fixtureTree := generic.GetFactory("f3")(ctx, tests_forge.GetFactory(filesystem_options.Name)().NewOptions(t))
TreeBuildPartial(t, "F3", testForgejo.GetKindExceptions(), opts, fixtureTree)
forgeTree.Trace("======= mirror fixture to forge")
generic.TreeMirror(ctx, fixtureTree, forgeTree, generic.NewPathFromString(""), generic.NewMirrorOptions())
forgeTree.Trace("======= NodeRepositoryDriverMirror from a forgejo project to a directory")
repositoryPath := generic.TreePathRemap(ctx, fixtureTree, generic.NewPathFromString("/forge/users/10111/projects/74823/repositories/vcs"), forgeTree)
require.False(t, repositoryPath.Empty())
repository := forgeTree.Find(repositoryPath)
repositoryURL := repository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryURL()
internalRefs := repository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryInternalRefs()
log.Reset()
destination := t.TempDir()
tests_repository.NewTestHelper(t, destination, nil)
helpers_repository.GitMirror(ctx, log, repositoryURL, destination, internalRefs)
require.Contains(t, log.String(), "fetch fetchMirror")
forgeTree.Trace("======= NodeRepositoryDriverMirror from one forgejo project to another forgejo project")
otherRepositoryPath := generic.TreePathRemap(ctx, fixtureTree, generic.NewPathFromString("/forge/users/20222/projects/99099/repositories/vcs"), forgeTree)
require.False(t, otherRepositoryPath.Empty())
otherRepository := forgeTree.Find(otherRepositoryPath)
otherRepositoryURL := otherRepository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryURL()
otherRepositoryPushURL := otherRepository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryPushURL()
otherInternalRefs := otherRepository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryInternalRefs()
log.Reset()
helpers_repository.GitMirror(ctx, log, repositoryURL, otherRepositoryPushURL, otherInternalRefs)
require.Contains(t, log.String(), "+refs/")
forgeTree.Trace("======= NodeRepositoryDriverMirror from a directory to a forgejo project")
log.Reset()
repositoryHelper := tests_repository.NewTestHelper(t, destination, nil)
content := "SOMETHING DIFFERENT"
repositoryHelper.CreateRepositoryContent(content).PushMirror()
helpers_repository.GitMirror(ctx, log, destination, otherRepositoryPushURL, otherInternalRefs)
require.Contains(t, log.String(), "+refs/")
verificationDir := t.TempDir()
repositoryHelper = tests_repository.NewTestHelper(t, verificationDir, nil)
helpers_repository.GitMirror(ctx, log, otherRepositoryURL, verificationDir, []string{})
repositoryHelper.AssertReadmeContains(content)
forgeTree.Trace("======= NodeRepositoryDriverMirrorRef from a forgejo project to a directory")
masterRef := "refs/heads/master"
forgejoRef := "refs/forgejo/test"
directoryRef := "refs/directory/test"
log.Reset()
helpers_repository.GitMirrorRef(ctx, log, repositoryURL, masterRef, destination, directoryRef)
require.Contains(t, log.String(), "new branch")
directorySha := helpers_repository.GitGetSha(ctx, log, destination, directoryRef)
forgeTree.Trace("======= NodeRepositoryDriverMirrorRef from one forgejo project to another forgejo project")
log.Reset()
otherForgejoRef := "refs/otherforgejo/test"
otherDirectoryRef := "refs/otherdirectory/test"
helpers_repository.GitMirrorRef(ctx, log, repositoryURL, masterRef, otherRepositoryPushURL, otherForgejoRef)
helpers_repository.GitMirrorRef(ctx, log, otherRepositoryURL, otherForgejoRef, destination, otherDirectoryRef)
assert.EqualValues(t, directorySha, helpers_repository.GitGetSha(ctx, log, destination, otherDirectoryRef))
forgeTree.Trace("======= NodeRepositoryDriverMirrorRef from a directory to a forgejo project")
log.Reset()
helpers_repository.GitMirrorRef(ctx, log, verificationDir, masterRef, otherRepositoryPushURL, forgejoRef)
masterSha := helpers_repository.GitGetSha(ctx, log, verificationDir, masterRef)
helpers_repository.GitMirrorRef(ctx, log, otherRepositoryURL, forgejoRef, verificationDir, directoryRef)
assert.EqualValues(t, masterSha, helpers_repository.GitGetSha(ctx, log, verificationDir, directoryRef))
}