@@ -25,7 +25,6 @@ import (
25
25
func TestProjectsService_CreateProject (t * testing.T ) {
26
26
27
27
t .Run ("returns invalid argument when request validation fails" , func (t * testing.T ) {
28
-
29
28
for _ , s := range []struct {
30
29
Name string
31
30
Spec * v1.Project
@@ -149,7 +148,169 @@ func TestProjectsService_CreateProject(t *testing.T) {
149
148
}, response .Msg )
150
149
151
150
})
151
+ }
152
+
153
+ func TestProjectsService_ListProjects (t * testing.T ) {
154
+
155
+ t .Run ("invalid argument when both team id and project id are missing" , func (t * testing.T ) {
156
+ _ , client := setupProjectsService (t )
157
+
158
+ _ , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {}))
159
+ require .Error (t , err )
160
+ require .Equal (t , connect .CodeInvalidArgument , connect .CodeOf (err ))
161
+ })
162
+
163
+ t .Run ("invalid argument when both team id and project id are set" , func (t * testing.T ) {
164
+ _ , client := setupProjectsService (t )
165
+
166
+ _ , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
167
+ UserId : "user-id" ,
168
+ TeamId : "team-id" ,
169
+ }))
170
+ require .Error (t , err )
171
+ require .Equal (t , connect .CodeInvalidArgument , connect .CodeOf (err ))
172
+ })
173
+
174
+ t .Run ("invalid argument when user ID is not a valid UUID" , func (t * testing.T ) {
175
+ _ , client := setupProjectsService (t )
176
+
177
+ _ , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
178
+ UserId : "some-id" ,
179
+ }))
180
+ require .Error (t , err )
181
+ require .Equal (t , connect .CodeInvalidArgument , connect .CodeOf (err ))
182
+ })
183
+
184
+ t .Run ("invalid argument when team ID is not a valid UUID" , func (t * testing.T ) {
185
+ _ , client := setupProjectsService (t )
186
+
187
+ _ , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
188
+ TeamId : "some-id" ,
189
+ }))
190
+ require .Error (t , err )
191
+ require .Equal (t , connect .CodeInvalidArgument , connect .CodeOf (err ))
192
+ })
193
+
194
+ t .Run ("no projects from server return empty list" , func (t * testing.T ) {
195
+ serverMock , client := setupProjectsService (t )
152
196
197
+ serverMock .EXPECT ().GetUserProjects (gomock .Any ()).Return (nil , nil )
198
+
199
+ response , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
200
+ UserId : uuid .New ().String (),
201
+ }))
202
+ require .NoError (t , err )
203
+ requireEqualProto (t , & v1.ListProjectsResponse {
204
+ Projects : nil ,
205
+ TotalResults : 0 ,
206
+ }, response .Msg )
207
+ })
208
+
209
+ t .Run ("retrieves projects for user, when user ID is specified and paginates" , func (t * testing.T ) {
210
+ serverMock , client := setupProjectsService (t )
211
+
212
+ projects := []* protocol.Project {
213
+ newProject (& protocol.Project {}),
214
+ newProject (& protocol.Project {}),
215
+ newProject (& protocol.Project {}),
216
+ newProject (& protocol.Project {}),
217
+ newProject (& protocol.Project {}),
218
+ }
219
+
220
+ serverMock .EXPECT ().GetUserProjects (gomock .Any ()).Return (projects , nil ).Times (3 )
221
+
222
+ firstPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
223
+ UserId : uuid .New ().String (),
224
+ Pagination : & v1.Pagination {
225
+ PageSize : 2 ,
226
+ },
227
+ }))
228
+ require .NoError (t , err )
229
+ requireEqualProto (t , & v1.ListProjectsResponse {
230
+ Projects : projectsToAPIResponse (projects [0 :2 ]),
231
+ TotalResults : int32 (len (projects )),
232
+ }, firstPage .Msg )
233
+
234
+ secondPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
235
+ UserId : uuid .New ().String (),
236
+ Pagination : & v1.Pagination {
237
+ PageSize : 2 ,
238
+ Page : 2 ,
239
+ },
240
+ }))
241
+ require .NoError (t , err )
242
+ requireEqualProto (t , & v1.ListProjectsResponse {
243
+ Projects : projectsToAPIResponse (projects [2 :4 ]),
244
+ TotalResults : int32 (len (projects )),
245
+ }, secondPage .Msg )
246
+
247
+ thirdPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
248
+ UserId : uuid .New ().String (),
249
+ Pagination : & v1.Pagination {
250
+ PageSize : 2 ,
251
+ Page : 3 ,
252
+ },
253
+ }))
254
+ require .NoError (t , err )
255
+ requireEqualProto (t , & v1.ListProjectsResponse {
256
+ Projects : projectsToAPIResponse (projects [4 :]),
257
+ TotalResults : int32 (len (projects )),
258
+ }, thirdPage .Msg )
259
+ })
260
+
261
+ t .Run ("retrieves projects for team, when team ID is specified and paginates" , func (t * testing.T ) {
262
+ serverMock , client := setupProjectsService (t )
263
+
264
+ teamID := uuid .New ().String ()
265
+
266
+ projects := []* protocol.Project {
267
+ newProject (& protocol.Project {}),
268
+ newProject (& protocol.Project {}),
269
+ newProject (& protocol.Project {}),
270
+ newProject (& protocol.Project {}),
271
+ newProject (& protocol.Project {}),
272
+ }
273
+
274
+ serverMock .EXPECT ().GetTeamProjects (gomock .Any (), teamID ).Return (projects , nil ).Times (3 )
275
+
276
+ firstPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
277
+ TeamId : teamID ,
278
+ Pagination : & v1.Pagination {
279
+ PageSize : 2 ,
280
+ },
281
+ }))
282
+ require .NoError (t , err )
283
+ requireEqualProto (t , & v1.ListProjectsResponse {
284
+ Projects : projectsToAPIResponse (projects [0 :2 ]),
285
+ TotalResults : int32 (len (projects )),
286
+ }, firstPage .Msg )
287
+
288
+ secondPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
289
+ TeamId : teamID ,
290
+ Pagination : & v1.Pagination {
291
+ PageSize : 2 ,
292
+ Page : 2 ,
293
+ },
294
+ }))
295
+ require .NoError (t , err )
296
+ requireEqualProto (t , & v1.ListProjectsResponse {
297
+ Projects : projectsToAPIResponse (projects [2 :4 ]),
298
+ TotalResults : int32 (len (projects )),
299
+ }, secondPage .Msg )
300
+
301
+ thirdPage , err := client .ListProjects (context .Background (), connect .NewRequest (& v1.ListProjectsRequest {
302
+ TeamId : teamID ,
303
+ Pagination : & v1.Pagination {
304
+ PageSize : 2 ,
305
+ Page : 3 ,
306
+ },
307
+ }))
308
+ require .NoError (t , err )
309
+ requireEqualProto (t , & v1.ListProjectsResponse {
310
+ Projects : projectsToAPIResponse (projects [4 :]),
311
+ TotalResults : int32 (len (projects )),
312
+ }, thirdPage .Msg )
313
+ })
153
314
}
154
315
155
316
func setupProjectsService (t * testing.T ) (* protocol.MockAPIInterface , v1connect.ProjectsServiceClient ) {
0 commit comments