44package integration
55
66import (
7+ "slices"
78 "testing"
89
910 "code.gitea.io/gitea/models/db"
1011 repo_model "code.gitea.io/gitea/models/repo"
12+ "code.gitea.io/gitea/models/unit"
1113 "code.gitea.io/gitea/models/unittest"
1214 user_model "code.gitea.io/gitea/models/user"
1315 "code.gitea.io/gitea/modules/git"
@@ -19,11 +21,13 @@ import (
1921 "code.gitea.io/gitea/tests"
2022
2123 "github.com/stretchr/testify/assert"
24+ "github.com/stretchr/testify/require"
2225)
2326
2427func TestMirrorPull (t * testing.T ) {
2528 defer tests .PrepareTestEnv (t )()
2629
30+ ctx := t .Context ()
2731 user := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
2832 repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
2933 repoPath := repo_model .RepoPath (user .Name , repo .Name )
@@ -35,10 +39,10 @@ func TestMirrorPull(t *testing.T) {
3539 Mirror : true ,
3640 CloneAddr : repoPath ,
3741 Wiki : true ,
38- Releases : false ,
42+ Releases : true ,
3943 }
4044
41- mirrorRepo , err := repo_service .CreateRepositoryDirectly (db . DefaultContext , user , user , repo_service.CreateRepoOptions {
45+ mirrorRepo , err := repo_service .CreateRepositoryDirectly (ctx , user , user , repo_service.CreateRepoOptions {
4246 Name : opts .RepoName ,
4347 Description : opts .Description ,
4448 IsPrivate : opts .Private ,
@@ -48,22 +52,27 @@ func TestMirrorPull(t *testing.T) {
4852 assert .NoError (t , err )
4953 assert .True (t , mirrorRepo .IsMirror , "expected pull-mirror repo to be marked as a mirror immediately after its creation" )
5054
51- ctx := t .Context ()
52-
53- mirror , err := repo_service .MigrateRepositoryGitData (ctx , user , mirrorRepo , opts , nil )
55+ mirrorRepo , err = repo_service .MigrateRepositoryGitData (ctx , user , mirrorRepo , opts , nil )
5456 assert .NoError (t , err )
5557
58+ // these units should have been enabled
59+ mirrorRepo .Units = nil
60+ require .NoError (t , mirrorRepo .LoadUnits (ctx ))
61+ assert .True (t , slices .ContainsFunc (mirrorRepo .Units , func (u * repo_model.RepoUnit ) bool { return u .Type == unit .TypeReleases }))
62+ assert .True (t , slices .ContainsFunc (mirrorRepo .Units , func (u * repo_model.RepoUnit ) bool { return u .Type == unit .TypeWiki }))
63+
5664 gitRepo , err := gitrepo .OpenRepository (git .DefaultContext , repo )
5765 assert .NoError (t , err )
5866 defer gitRepo .Close ()
5967
6068 findOptions := repo_model.FindReleasesOptions {
6169 IncludeDrafts : true ,
6270 IncludeTags : true ,
63- RepoID : mirror .ID ,
71+ RepoID : mirrorRepo .ID ,
6472 }
6573 initCount , err := db .Count [repo_model.Release ](db .DefaultContext , findOptions )
6674 assert .NoError (t , err )
75+ assert .Zero (t , initCount ) // no sync yet, so even though there is a tag in source repo, the mirror's release table is still empty
6776
6877 assert .NoError (t , release_service .CreateRelease (gitRepo , & repo_model.Release {
6978 RepoID : repo .ID ,
@@ -79,12 +88,15 @@ func TestMirrorPull(t *testing.T) {
7988 IsTag : true ,
8089 }, nil , "" ))
8190
82- _ , err = repo_model .GetMirrorByRepoID (ctx , mirror .ID )
91+ _ , err = repo_model .GetMirrorByRepoID (ctx , mirrorRepo .ID )
8392 assert .NoError (t , err )
8493
85- ok := mirror_service .SyncPullMirror (ctx , mirror .ID )
94+ ok := mirror_service .SyncPullMirror (ctx , mirrorRepo .ID )
8695 assert .True (t , ok )
8796
97+ // actually there is a tag in the source repo, so after "sync", that tag will also come into the mirror
98+ initCount ++
99+
88100 count , err := db .Count [repo_model.Release ](db .DefaultContext , findOptions )
89101 assert .NoError (t , err )
90102 assert .EqualValues (t , initCount + 1 , count )
@@ -93,7 +105,7 @@ func TestMirrorPull(t *testing.T) {
93105 assert .NoError (t , err )
94106 assert .NoError (t , release_service .DeleteReleaseByID (ctx , repo , release , user , true ))
95107
96- ok = mirror_service .SyncPullMirror (ctx , mirror .ID )
108+ ok = mirror_service .SyncPullMirror (ctx , mirrorRepo .ID )
97109 assert .True (t , ok )
98110
99111 count , err = db .Count [repo_model.Release ](db .DefaultContext , findOptions )
0 commit comments