77 "io"
88 "net/http"
99 "net/http/httptest"
10+ "net/url"
11+ "strconv"
1012 "strings"
1113 "testing"
1214
@@ -399,7 +401,7 @@ func TestEventSession(t *testing.T) {
399401
400402 webSocketUpgraderMock .On ("Upgrade" , gomock .Anything , gomock .Anything ).Return (conn , nil ).Once ()
401403
402- mock .On ("EventSession " , gomock .Anything , models .UID (uid ), gomock .Anything ).
404+ mock .On ("SaveEventSession " , gomock .Anything , models .UID (uid ), gomock .Anything ).
403405 Return (errors .New ("not able record" )).Once ()
404406 },
405407 expected : http .StatusInternalServerError ,
@@ -422,7 +424,7 @@ func TestEventSession(t *testing.T) {
422424
423425 webSocketUpgraderMock .On ("Upgrade" , gomock .Anything , gomock .Anything ).Return (conn , nil ).Once ()
424426
425- mock .On ("EventSession " , gomock .Anything , models .UID (uid ),
427+ mock .On ("SaveEventSession " , gomock .Anything , models .UID (uid ),
426428 gomock .Anything ).Return (nil ).Once ()
427429
428430 conn .On ("ReadJSON" , gomock .Anything ).Return (& websocket.CloseError {
@@ -468,3 +470,195 @@ func TestEventSession(t *testing.T) {
468470 })
469471 }
470472}
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