Skip to content

Commit ee806d6

Browse files
committed
Add test for forks
1 parent 5a1e12d commit ee806d6

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed

tests/integration/api_fork_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,108 @@ import (
77
"net/http"
88
"testing"
99

10+
"code.gitea.io/gitea/models"
11+
auth_model "code.gitea.io/gitea/models/auth"
12+
"code.gitea.io/gitea/models/db"
13+
org_model "code.gitea.io/gitea/models/organization"
14+
"code.gitea.io/gitea/models/unittest"
15+
user_model "code.gitea.io/gitea/models/user"
16+
"code.gitea.io/gitea/modules/structs"
1017
api "code.gitea.io/gitea/modules/structs"
1118
"code.gitea.io/gitea/tests"
19+
20+
"github.com/stretchr/testify/assert"
1221
)
1322

1423
func TestCreateForkNoLogin(t *testing.T) {
1524
defer tests.PrepareTestEnv(t)()
1625
req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{})
1726
MakeRequest(t, req, http.StatusUnauthorized)
1827
}
28+
29+
func TestAPIForkListLimitedAndPrivateRepos(t *testing.T) {
30+
defer tests.PrepareTestEnv(t)()
31+
32+
user1Sess := loginUser(t, "user1")
33+
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
34+
limitedOrg := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 22})
35+
assert.EqualValues(t, structs.VisibleTypeLimited, limitedOrg.Visibility)
36+
37+
ownerTeam1, err := org_model.OrgFromUser(limitedOrg).GetOwnerTeam(db.DefaultContext)
38+
assert.NoError(t, err)
39+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam1, user1))
40+
defer func() {
41+
models.RemoveTeamMember(db.DefaultContext, ownerTeam1, user1)
42+
}()
43+
44+
user1Token := getTokenForLoggedInUser(t, user1Sess,
45+
auth_model.AccessTokenScopeWriteRepository,
46+
auth_model.AccessTokenScopeWriteOrganization)
47+
48+
req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{
49+
Organization: &limitedOrg.Name,
50+
}).AddTokenAuth(user1Token)
51+
MakeRequest(t, req, http.StatusAccepted)
52+
53+
user4Sess := loginUser(t, "user4")
54+
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user4"})
55+
56+
privateOrg := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 23})
57+
assert.EqualValues(t, structs.VisibleTypePrivate, privateOrg.Visibility)
58+
59+
ownerTeam2, err := org_model.OrgFromUser(privateOrg).GetOwnerTeam(db.DefaultContext)
60+
assert.NoError(t, err)
61+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam2, user4))
62+
defer func() {
63+
models.RemoveTeamMember(db.DefaultContext, ownerTeam2, user4)
64+
}()
65+
66+
user4Token := getTokenForLoggedInUser(t, user4Sess,
67+
auth_model.AccessTokenScopeWriteRepository,
68+
auth_model.AccessTokenScopeWriteOrganization)
69+
70+
req = NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{
71+
Organization: &privateOrg.Name,
72+
}).AddTokenAuth(user4Token)
73+
MakeRequest(t, req, http.StatusAccepted)
74+
75+
t.Run("Anomynous", func(t *testing.T) {
76+
defer tests.PrintCurrentTest(t)()
77+
78+
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks")
79+
resp := MakeRequest(t, req, http.StatusOK)
80+
81+
var forks []*api.Repository
82+
DecodeJSON(t, resp, &forks)
83+
84+
assert.Empty(t, forks)
85+
assert.EqualValues(t, "0", resp.Header().Get("X-Total-Count"))
86+
})
87+
88+
t.Run("Logged in", func(t *testing.T) {
89+
defer tests.PrintCurrentTest(t)()
90+
91+
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks").AddTokenAuth(user1Token)
92+
resp := MakeRequest(t, req, http.StatusOK)
93+
94+
var forks []*api.Repository
95+
DecodeJSON(t, resp, &forks)
96+
97+
assert.Len(t, forks, 1)
98+
assert.EqualValues(t, "1", resp.Header().Get("X-Total-Count"))
99+
100+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam2, user1))
101+
defer func() {
102+
models.RemoveTeamMember(db.DefaultContext, ownerTeam2, user1)
103+
}()
104+
105+
req = NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks").AddTokenAuth(user1Token)
106+
resp = MakeRequest(t, req, http.StatusOK)
107+
108+
forks = []*api.Repository{}
109+
DecodeJSON(t, resp, &forks)
110+
111+
assert.Len(t, forks, 2)
112+
assert.EqualValues(t, "2", resp.Header().Get("X-Total-Count"))
113+
})
114+
}

tests/integration/repo_fork_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ import (
77
"fmt"
88
"net/http"
99
"net/http/httptest"
10+
"net/url"
1011
"testing"
1112

13+
"code.gitea.io/gitea/models"
14+
"code.gitea.io/gitea/models/db"
15+
org_model "code.gitea.io/gitea/models/organization"
1216
"code.gitea.io/gitea/models/unittest"
1317
user_model "code.gitea.io/gitea/models/user"
18+
"code.gitea.io/gitea/modules/structs"
1419
"code.gitea.io/gitea/tests"
1520

1621
"github.com/stretchr/testify/assert"
@@ -74,3 +79,64 @@ func TestRepoForkToOrg(t *testing.T) {
7479
_, exists := htmlDoc.doc.Find(`a.ui.button[href*="/fork"]`).Attr("href")
7580
assert.False(t, exists, "Forking should not be allowed anymore")
7681
}
82+
83+
func TestForkListLimitedAndPrivateRepos(t *testing.T) {
84+
forkItemSelector := ".tw-flex.tw-items-center.tw-py-2"
85+
86+
onGiteaRun(t, func(t *testing.T, u *url.URL) {
87+
user1Sess := loginUser(t, "user1")
88+
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
89+
limitedOrg := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 22})
90+
assert.EqualValues(t, structs.VisibleTypeLimited, limitedOrg.Visibility)
91+
92+
ownerTeam1, err := org_model.OrgFromUser(limitedOrg).GetOwnerTeam(db.DefaultContext)
93+
assert.NoError(t, err)
94+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam1, user1))
95+
defer func() {
96+
models.RemoveTeamMember(db.DefaultContext, ownerTeam1, user1)
97+
}()
98+
99+
testRepoFork(t, user1Sess, "user2", "repo1", limitedOrg.Name, "repo1", "")
100+
101+
user4Sess := loginUser(t, "user4")
102+
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user4"})
103+
104+
privateOrg := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 23})
105+
assert.EqualValues(t, structs.VisibleTypePrivate, privateOrg.Visibility)
106+
107+
ownerTeam2, err := org_model.OrgFromUser(privateOrg).GetOwnerTeam(db.DefaultContext)
108+
assert.NoError(t, err)
109+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam2, user4))
110+
defer func() {
111+
models.RemoveTeamMember(db.DefaultContext, ownerTeam2, user4)
112+
}()
113+
114+
testRepoFork(t, user4Sess, "user2", "repo1", privateOrg.Name, "repo1", "")
115+
116+
t.Run("Anomynous", func(t *testing.T) {
117+
defer tests.PrintCurrentTest(t)()
118+
119+
req := NewRequest(t, "GET", "/user2/repo1/forks")
120+
resp := MakeRequest(t, req, http.StatusOK)
121+
htmlDoc := NewHTMLParser(t, resp.Body)
122+
assert.EqualValues(t, 0, htmlDoc.Find(forkItemSelector).Length())
123+
})
124+
125+
t.Run("Logged in", func(t *testing.T) {
126+
defer tests.PrintCurrentTest(t)()
127+
128+
req := NewRequest(t, "GET", "/user2/repo1/forks")
129+
resp := user1Sess.MakeRequest(t, req, http.StatusOK)
130+
htmlDoc := NewHTMLParser(t, resp.Body)
131+
assert.EqualValues(t, 1, htmlDoc.Find(forkItemSelector).Length())
132+
133+
assert.NoError(t, models.AddTeamMember(db.DefaultContext, ownerTeam2, user1))
134+
defer func() {
135+
models.RemoveTeamMember(db.DefaultContext, ownerTeam2, user1)
136+
}()
137+
resp = user1Sess.MakeRequest(t, req, http.StatusOK)
138+
htmlDoc = NewHTMLParser(t, resp.Body)
139+
assert.EqualValues(t, 2, htmlDoc.Find(forkItemSelector).Length())
140+
})
141+
})
142+
}

0 commit comments

Comments
 (0)