7
7
"io"
8
8
"net/http"
9
9
"net/http/httptest"
10
+ "net/url"
11
+ "strconv"
10
12
"strings"
11
13
"testing"
12
14
@@ -399,7 +401,7 @@ func TestEventSession(t *testing.T) {
399
401
400
402
webSocketUpgraderMock .On ("Upgrade" , gomock .Anything , gomock .Anything ).Return (conn , nil ).Once ()
401
403
402
- mock .On ("EventSession " , gomock .Anything , models .UID (uid ), gomock .Anything ).
404
+ mock .On ("SaveEventSession " , gomock .Anything , models .UID (uid ), gomock .Anything ).
403
405
Return (errors .New ("not able record" )).Once ()
404
406
},
405
407
expected : http .StatusInternalServerError ,
@@ -422,7 +424,7 @@ func TestEventSession(t *testing.T) {
422
424
423
425
webSocketUpgraderMock .On ("Upgrade" , gomock .Anything , gomock .Anything ).Return (conn , nil ).Once ()
424
426
425
- mock .On ("EventSession " , gomock .Anything , models .UID (uid ),
427
+ mock .On ("SaveEventSession " , gomock .Anything , models .UID (uid ),
426
428
gomock .Anything ).Return (nil ).Once ()
427
429
428
430
conn .On ("ReadJSON" , gomock .Anything ).Return (& websocket.CloseError {
@@ -468,3 +470,195 @@ func TestEventSession(t *testing.T) {
468
470
})
469
471
}
470
472
}
473
+
474
+ func TestListEventsSession (t * testing.T ) {
475
+ mock := new (mocks.Service )
476
+
477
+ cases := []struct {
478
+ title string
479
+ req * requests.SessionListEvents
480
+ requiredMocks func ()
481
+ expectedStatus int
482
+ expectedCounter string
483
+ expectedBody string
484
+ }{
485
+ {
486
+ title : "fails to list session's events when input data is invalid" ,
487
+ req : & requests.SessionListEvents {
488
+ UID : "" ,
489
+ Paginator : query.Paginator {},
490
+ Sorter : query.Sorter {},
491
+ Filters : query.Filters {},
492
+ },
493
+ requiredMocks : func () {},
494
+ expectedStatus : http .StatusBadRequest ,
495
+ expectedCounter : "" ,
496
+ expectedBody : "" ,
497
+ },
498
+ {
499
+ title : "fails to list session's events when cannot validate input params" ,
500
+ req : & requests.SessionListEvents {
501
+ UID : "" ,
502
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
503
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
504
+ Filters : query.Filters {},
505
+ },
506
+ requiredMocks : func () {},
507
+ expectedStatus : http .StatusBadRequest ,
508
+ expectedCounter : "" ,
509
+ expectedBody : "" ,
510
+ },
511
+ {
512
+ title : "fails to list session's events when service fails because session doesn't exist" ,
513
+ req : & requests.SessionListEvents {
514
+ UID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
515
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
516
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
517
+ Filters : query.Filters {},
518
+ },
519
+ requiredMocks : func () {
520
+ mock .
521
+ On ("ListEventsSession" ,
522
+ gomock .Anything ,
523
+ models .UID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ),
524
+ gomock .Anything ,
525
+ gomock .Anything ,
526
+ gomock .Anything ,
527
+ ).
528
+ Return (nil , 0 , svc .ErrSessionNotFound ).
529
+ Once ()
530
+ },
531
+ expectedStatus : http .StatusNotFound ,
532
+ expectedCounter : "" ,
533
+ expectedBody : "" ,
534
+ },
535
+ {
536
+ title : "fails to list session's events when service fails" ,
537
+ req : & requests.SessionListEvents {
538
+ UID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
539
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
540
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
541
+ Filters : query.Filters {},
542
+ },
543
+ requiredMocks : func () {
544
+ mock .
545
+ On ("ListEventsSession" ,
546
+ gomock .Anything ,
547
+ models .UID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ),
548
+ gomock .Anything ,
549
+ gomock .Anything ,
550
+ gomock .Anything ,
551
+ ).
552
+ Return (nil , 0 , errors .New ("" )).
553
+ Once ()
554
+ },
555
+ expectedStatus : http .StatusInternalServerError ,
556
+ expectedCounter : "" ,
557
+ expectedBody : "" ,
558
+ },
559
+ {
560
+ title : "success to list session's events when it is empty" ,
561
+ req : & requests.SessionListEvents {
562
+ UID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
563
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
564
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
565
+ Filters : query.Filters {},
566
+ },
567
+ requiredMocks : func () {
568
+ mock .
569
+ On ("ListEventsSession" ,
570
+ gomock .Anything ,
571
+ models .UID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ),
572
+ gomock .Anything ,
573
+ gomock .Anything ,
574
+ gomock .Anything ,
575
+ ).
576
+ Return ([]models.SessionEvent {}, 0 , nil ).
577
+ Once ()
578
+ },
579
+ expectedStatus : http .StatusOK ,
580
+ expectedCounter : "0" ,
581
+ expectedBody : `[]` + "\n " ,
582
+ },
583
+ {
584
+ title : "success to list session's events with one item" ,
585
+ req : & requests.SessionListEvents {
586
+ UID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
587
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
588
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
589
+ Filters : query.Filters {},
590
+ },
591
+ requiredMocks : func () {
592
+ mock .
593
+ On ("ListEventsSession" ,
594
+ gomock .Anything ,
595
+ models .UID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ),
596
+ gomock .Anything ,
597
+ gomock .Anything ,
598
+ gomock .Anything ,
599
+ ).
600
+ Return ([]models.SessionEvent {
601
+ {},
602
+ }, 1 , nil ).
603
+ Once ()
604
+ },
605
+ expectedStatus : http .StatusOK ,
606
+ expectedCounter : "1" ,
607
+ expectedBody : `[{"session":"","type":"","timestamp":"0001-01-01T00:00:00Z","data":null,"seat":0}]` + "\n " ,
608
+ },
609
+ {
610
+ title : "success to list session's events with more than one item" ,
611
+ req : & requests.SessionListEvents {
612
+ UID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ,
613
+ Paginator : query.Paginator {Page : 1 , PerPage : 10 },
614
+ Sorter : query.Sorter {By : "name" , Order : "asc" },
615
+ Filters : query.Filters {},
616
+ },
617
+ requiredMocks : func () {
618
+ mock .
619
+ On ("ListEventsSession" ,
620
+ gomock .Anything ,
621
+ models .UID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ),
622
+ gomock .Anything ,
623
+ gomock .Anything ,
624
+ gomock .Anything ,
625
+ ).
626
+ Return ([]models.SessionEvent {
627
+ {},
628
+ {},
629
+ }, 2 , nil ).
630
+ Once ()
631
+ },
632
+ expectedStatus : http .StatusOK ,
633
+ expectedCounter : "2" ,
634
+ expectedBody : `[{"session":"","type":"","timestamp":"0001-01-01T00:00:00Z","data":null,"seat":0},{"session":"","type":"","timestamp":"0001-01-01T00:00:00Z","data":null,"seat":0}]` + "\n " ,
635
+ },
636
+ }
637
+
638
+ for _ , tc := range cases {
639
+ t .Run (tc .title , func (t * testing.T ) {
640
+ tc .requiredMocks ()
641
+
642
+ urlVal := & url.Values {}
643
+ urlVal .Set ("page" , strconv .Itoa (tc .req .Page ))
644
+ urlVal .Set ("per_page" , strconv .Itoa (tc .req .PerPage ))
645
+ urlVal .Set ("sort_by" , tc .req .By )
646
+ urlVal .Set ("order_by" , tc .req .Order )
647
+
648
+ req := httptest .NewRequest (http .MethodGet , fmt .Sprintf ("/api/sessions/%s/events?" + urlVal .Encode (), tc .req .UID ), nil )
649
+ req .Header .Set ("Content-Type" , "application/json" )
650
+ req .Header .Set ("X-Role" , authorizer .RoleOwner .String ())
651
+
652
+ rec := httptest .NewRecorder ()
653
+
654
+ e := NewRouter (mock )
655
+ e .ServeHTTP (rec , req )
656
+
657
+ assert .Equal (t , tc .expectedStatus , rec .Result ().StatusCode )
658
+ assert .Equal (t , tc .expectedCounter , rec .Header ().Get ("X-Total-Count" ))
659
+ assert .Equal (t , tc .expectedBody , rec .Body .String ())
660
+ })
661
+ }
662
+
663
+ mock .AssertExpectations (t )
664
+ }
0 commit comments