@@ -20,11 +20,26 @@ import (
2020func Test_Projects(t *testing.T) {
2121 assert.NoError(t, unittest.PrepareTestDatabase())
2222
23+ userAdmin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
2324 user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
2425 org3 := unittest.AssertExistsAndLoadBean(t, &org_model.Organization{ID: 3})
2526 user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
2627
2728 t.Run("User projects", func(t *testing.T) {
29+ err := db.Insert(db.DefaultContext, &project_model.ProjectIssue{
30+ ProjectID: 4,
31+ IssueID: 1,
32+ ProjectColumnID: 4,
33+ })
34+ assert.NoError(t, err)
35+
36+ err = db.Insert(db.DefaultContext, &project_model.ProjectIssue{
37+ ProjectID: 4,
38+ IssueID: 4,
39+ ProjectColumnID: 4,
40+ })
41+ assert.NoError(t, err)
42+
2843 projects, err := db.Find[project_model.Project](db.DefaultContext, project_model.SearchOptions{
2944 OwnerID: user2.ID,
3045 })
@@ -63,21 +78,54 @@ func Test_Projects(t *testing.T) {
6378 })
6479
6580 t.Run("Org projects", func(t *testing.T) {
81+ project1 := project_model.Project{
82+ Title: "project in an org",
83+ OwnerID: org3.ID,
84+ Type: project_model.TypeOrganization,
85+ TemplateType: project_model.TemplateTypeBasicKanban,
86+ }
87+ err := project_model.NewProject(db.DefaultContext, &project1)
88+ assert.NoError(t, err)
89+
90+ column1 := project_model.Column{
91+ Title: "column 1",
92+ ProjectID: project1.ID,
93+ }
94+ err = project_model.NewColumn(db.DefaultContext, &column1)
95+ assert.NoError(t, err)
96+
97+ column2 := project_model.Column{
98+ Title: "column 2",
99+ ProjectID: project1.ID,
100+ }
101+ err = project_model.NewColumn(db.DefaultContext, &column2)
102+ assert.NoError(t, err)
103+
104+ // issue 6 belongs to private repo 3 under org 3
105+ issue6 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 6})
106+ err = issues_model.IssueAssignOrRemoveProject(db.DefaultContext, issue6, user2, project1.ID, column1.ID)
107+ assert.NoError(t, err)
108+
109+ // issue 16 belongs to public repo 16 under org 3
110+ issue16 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 16})
111+ err = issues_model.IssueAssignOrRemoveProject(db.DefaultContext, issue16, user2, project1.ID, column1.ID)
112+ assert.NoError(t, err)
113+
66114 projects, err := db.Find[project_model.Project](db.DefaultContext, project_model.SearchOptions{
67115 OwnerID: org3.ID,
68116 })
69117 assert.NoError(t, err)
70118 assert.Len(t, projects, 1)
71- assert.EqualValues(t, 7 , projects[0].ID)
119+ assert.EqualValues(t, project1.ID , projects[0].ID)
72120
73121 t.Run("Authenticated user", func(t *testing.T) {
74122 columnIssues, err := LoadIssuesFromProject(db.DefaultContext, projects[0], &issues_model.IssuesOptions{
75123 Org: org3,
76- AccessUser: user2 ,
124+ AccessUser: userAdmin ,
77125 })
78126 assert.NoError(t, err)
79- assert.Len(t, columnIssues, 1) // 4 has 2 issues, 6 will not contains here because 0 issues
80- assert.Len(t, columnIssues[4 ], 2) // user2 can visit both issues, one from public repository one from private repository
127+ assert.Len(t, columnIssues, 1) // column1 has 2 issues, 6 will not contains here because 0 issues
128+ assert.Len(t, columnIssues[column1.ID ], 2) // user2 can visit both issues, one from public repository one from private repository
81129 })
82130
83131 t.Run("Anonymous user", func(t *testing.T) {
@@ -86,23 +134,23 @@ func Test_Projects(t *testing.T) {
86134 })
87135 assert.NoError(t, err)
88136 assert.Len(t, columnIssues, 1)
89- assert.Len(t, columnIssues[4 ], 1) // anonymous user can only visit public repo issues
137+ assert.Len(t, columnIssues[column1.ID ], 1) // anonymous user can only visit public repo issues
90138 })
91139
92140 t.Run("Authenticated user with no permission to the private repo", func(t *testing.T) {
93141 columnIssues, err := LoadIssuesFromProject(db.DefaultContext, projects[0], &issues_model.IssuesOptions{
94142 Org: org3,
95- AccessUser: user4 ,
143+ AccessUser: user2 ,
96144 })
97145 assert.NoError(t, err)
98146 assert.Len(t, columnIssues, 1)
99- assert.Len(t, columnIssues[4 ], 1) // user4 can only visit public repo issues
147+ assert.Len(t, columnIssues[column1.ID ], 1) // user4 can only visit public repo issues
100148 })
101149 })
102150
103- repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
104-
105151 t.Run("Repository projects", func(t *testing.T) {
152+ repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
153+
106154 projects, err := db.Find[project_model.Project](db.DefaultContext, project_model.SearchOptions{
107155 RepoID: repo1.ID,
108156 })
@@ -113,31 +161,36 @@ func Test_Projects(t *testing.T) {
113161 t.Run("Authenticated user", func(t *testing.T) {
114162 columnIssues, err := LoadIssuesFromProject(db.DefaultContext, projects[0], &issues_model.IssuesOptions{
115163 RepoIDs: []int64{repo1.ID},
116- AccessUser: user2 ,
164+ AccessUser: userAdmin ,
117165 })
118166 assert.NoError(t, err)
119- assert.Len(t, columnIssues, 1) // 4 has 2 issues, 6 will not contains here because 0 issues
120- assert.Len(t, columnIssues[4], 2) // user2 can visit both issues, one from public repository one from private repository
167+ assert.Len(t, columnIssues, 3)
168+ assert.Len(t, columnIssues[1], 2)
169+ assert.Len(t, columnIssues[2], 1)
170+ assert.Len(t, columnIssues[3], 1)
121171 })
122172
123173 t.Run("Anonymous user", func(t *testing.T) {
124174 columnIssues, err := LoadIssuesFromProject(db.DefaultContext, projects[0], &issues_model.IssuesOptions{
125- RepoIDs: []int64{repo1.ID},
126175 AllPublic: true,
127176 })
128177 assert.NoError(t, err)
129- assert.Len(t, columnIssues, 1)
130- assert.Len(t, columnIssues[4], 1) // anonymous user can only visit public repo issues
178+ assert.Len(t, columnIssues, 3)
179+ assert.Len(t, columnIssues[1], 2)
180+ assert.Len(t, columnIssues[2], 1)
181+ assert.Len(t, columnIssues[3], 1)
131182 })
132183
133184 t.Run("Authenticated user with no permission to the private repo", func(t *testing.T) {
134185 columnIssues, err := LoadIssuesFromProject(db.DefaultContext, projects[0], &issues_model.IssuesOptions{
135186 RepoIDs: []int64{repo1.ID},
136- AccessUser: user4 ,
187+ AccessUser: user2 ,
137188 })
138189 assert.NoError(t, err)
139- assert.Len(t, columnIssues, 1)
140- assert.Len(t, columnIssues[4], 1) // user4 can only visit public repo issues
190+ assert.Len(t, columnIssues, 3)
191+ assert.Len(t, columnIssues[1], 2)
192+ assert.Len(t, columnIssues[2], 1)
193+ assert.Len(t, columnIssues[3], 1)
141194 })
142195 })
143196}
0 commit comments