File: helpers_repository_test.go

package info (click to toggle)
golang-code.forgejo-f3-gof3 3.11.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,952 kB
  • sloc: sh: 100; makefile: 65
file content (124 lines) | stat: -rw-r--r-- 5,682 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// 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, "")
	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()
	internalRef := repository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryInternalRef()

	log.Reset()
	destination := t.TempDir()
	tests_repository.NewTestHelper(t, destination, nil)
	helpers_repository.GitMirror(ctx, log, repositoryURL, destination, internalRef)
	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()
	otherInternalRef := otherRepository.GetDriver().(f3_tree.RepositoryNodeDriverProxyInterface).GetRepositoryInternalRef()

	log.Reset()
	helpers_repository.GitMirror(ctx, log, repositoryURL, otherRepositoryURL, otherInternalRef)
	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, otherRepositoryURL, otherInternalRef)
	require.Contains(t, log.String(), "+refs/")
	verificationDir := t.TempDir()
	repositoryHelper = tests_repository.NewTestHelper(t, verificationDir, nil)
	helpers_repository.GitMirror(ctx, log, otherRepositoryURL, verificationDir, "")
	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, otherRepositoryURL, 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, otherRepositoryURL, 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))
}