@@ -8,13 +8,16 @@ import (
8
8
"context"
9
9
"fmt"
10
10
"net/http"
11
+ "net/http/httptest"
11
12
"os"
13
+ "strconv"
12
14
"testing"
13
15
"time"
14
16
15
17
base "code.gitea.io/gitea/modules/migration"
16
18
17
19
"github.com/stretchr/testify/assert"
20
+ "github.com/xanzy/go-gitlab"
18
21
)
19
22
20
23
func TestGitlabDownloadRepo (t * testing.T ) {
@@ -310,12 +313,14 @@ func TestGitlabDownloadRepo(t *testing.T) {
310
313
assert .NoError (t , err )
311
314
assertReviewsEqual (t , []* base.Review {
312
315
{
316
+ IssueIndex : 1 ,
313
317
ReviewerID : 4102996 ,
314
318
ReviewerName : "zeripath" ,
315
319
CreatedAt : time .Date (2019 , 11 , 28 , 16 , 2 , 8 , 377000000 , time .UTC ),
316
320
State : "APPROVED" ,
317
321
},
318
322
{
323
+ IssueIndex : 1 ,
319
324
ReviewerID : 527793 ,
320
325
ReviewerName : "axifive" ,
321
326
CreatedAt : time .Date (2019 , 11 , 28 , 16 , 2 , 8 , 377000000 , time .UTC ),
@@ -327,10 +332,145 @@ func TestGitlabDownloadRepo(t *testing.T) {
327
332
assert .NoError (t , err )
328
333
assertReviewsEqual (t , []* base.Review {
329
334
{
335
+ IssueIndex : 2 ,
330
336
ReviewerID : 4575606 ,
331
337
ReviewerName : "real6543" ,
332
338
CreatedAt : time .Date (2020 , 4 , 19 , 19 , 24 , 21 , 108000000 , time .UTC ),
333
339
State : "APPROVED" ,
334
340
},
335
341
}, rvs )
336
342
}
343
+
344
+ func gitlabClientMockSetup (t * testing.T ) (* http.ServeMux , * httptest.Server , * gitlab.Client ) {
345
+ // mux is the HTTP request multiplexer used with the test server.
346
+ mux := http .NewServeMux ()
347
+
348
+ // server is a test HTTP server used to provide mock API responses.
349
+ server := httptest .NewServer (mux )
350
+
351
+ // client is the Gitlab client being tested.
352
+ client , err := gitlab .NewClient ("" , gitlab .WithBaseURL (server .URL ))
353
+ if err != nil {
354
+ server .Close ()
355
+ t .Fatalf ("Failed to create client: %v" , err )
356
+ }
357
+
358
+ return mux , server , client
359
+ }
360
+
361
+ func gitlabClientMockTeardown (server * httptest.Server ) {
362
+ server .Close ()
363
+ }
364
+
365
+ type reviewTestCase struct {
366
+ repoID , prID , reviewerID int
367
+ reviewerName string
368
+ createdAt , updatedAt * time.Time
369
+ expectedCreatedAt time.Time
370
+ }
371
+
372
+ func convertTestCase (t reviewTestCase ) (func (w http.ResponseWriter , r * http.Request ), base.Review ) {
373
+ var updatedAtField string
374
+ if t .updatedAt == nil {
375
+ updatedAtField = ""
376
+ } else {
377
+ updatedAtField = `"updated_at": "` + t .updatedAt .Format (time .RFC3339 ) + `",`
378
+ }
379
+
380
+ var createdAtField string
381
+ if t .createdAt == nil {
382
+ createdAtField = ""
383
+ } else {
384
+ createdAtField = `"created_at": "` + t .createdAt .Format (time .RFC3339 ) + `",`
385
+ }
386
+
387
+ handler := func (w http.ResponseWriter , r * http.Request ) {
388
+ fmt .Fprint (w , `
389
+ {
390
+ "id": 5,
391
+ "iid": ` + strconv .Itoa (t .prID )+ `,
392
+ "project_id": ` + strconv .Itoa (t .repoID )+ `,
393
+ "title": "Approvals API",
394
+ "description": "Test",
395
+ "state": "opened",
396
+ ` + createdAtField + `
397
+ ` + updatedAtField + `
398
+ "merge_status": "cannot_be_merged",
399
+ "approvals_required": 2,
400
+ "approvals_left": 1,
401
+ "approved_by": [
402
+ {
403
+ "user": {
404
+ "name": "Administrator",
405
+ "username": "` + t .reviewerName + `",
406
+ "id": ` + strconv .Itoa (t .reviewerID )+ `,
407
+ "state": "active",
408
+ "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
409
+ "web_url": "http://localhost:3000/root"
410
+ }
411
+ }
412
+ ]
413
+ }` )
414
+ }
415
+ review := base.Review {
416
+ IssueIndex : int64 (t .prID ),
417
+ ReviewerID : int64 (t .reviewerID ),
418
+ ReviewerName : t .reviewerName ,
419
+ CreatedAt : t .expectedCreatedAt ,
420
+ State : "APPROVED" ,
421
+ }
422
+
423
+ return handler , review
424
+ }
425
+
426
+ func TestGitlabGetReviews (t * testing.T ) {
427
+ mux , server , client := gitlabClientMockSetup (t )
428
+ defer gitlabClientMockTeardown (server )
429
+
430
+ repoID := 1324
431
+
432
+ downloader := & GitlabDownloader {
433
+ ctx : context .Background (),
434
+ client : client ,
435
+ repoID : repoID ,
436
+ }
437
+
438
+ createdAt := time .Date (2020 , 4 , 19 , 19 , 24 , 21 , 0 , time .UTC )
439
+
440
+ for _ , testCase := range []reviewTestCase {
441
+ {
442
+ repoID : repoID ,
443
+ prID : 1 ,
444
+ reviewerID : 801 ,
445
+ reviewerName : "someone1" ,
446
+ createdAt : nil ,
447
+ updatedAt : & createdAt ,
448
+ expectedCreatedAt : createdAt ,
449
+ },
450
+ {
451
+ repoID : repoID ,
452
+ prID : 2 ,
453
+ reviewerID : 802 ,
454
+ reviewerName : "someone2" ,
455
+ createdAt : & createdAt ,
456
+ updatedAt : nil ,
457
+ expectedCreatedAt : createdAt ,
458
+ },
459
+ {
460
+ repoID : repoID ,
461
+ prID : 3 ,
462
+ reviewerID : 803 ,
463
+ reviewerName : "someone3" ,
464
+ createdAt : nil ,
465
+ updatedAt : nil ,
466
+ expectedCreatedAt : time .Now (),
467
+ },
468
+ } {
469
+ mock , review := convertTestCase (testCase )
470
+ mux .HandleFunc (fmt .Sprintf ("/api/v4/projects/%d/merge_requests/%d/approvals" , testCase .repoID , testCase .prID ), mock )
471
+
472
+ rvs , err := downloader .GetReviews (base .BasicIssueContext (testCase .prID ))
473
+ assert .NoError (t , err )
474
+ assertReviewsEqual (t , []* base.Review {& review }, rvs )
475
+ }
476
+ }
0 commit comments