@@ -3,58 +3,73 @@ package http
33import (
44 "context"
55 "encoding/json"
6- "errors "
6+ "fmt "
77 "musicboxapi/database"
88 "musicboxapi/models"
99 "net/http"
1010 "net/http/httptest"
1111 "testing"
12+ "time"
1213
1314 "github.com/stretchr/testify/assert"
1415)
1516
1617type mockTaskLogTable struct {
1718 database.ITasklogTable
18- insertTaskLog func () (lastInsertedId int , err error )
19- updateTaskLogStatus func (taskId int , nStatus int ) (err error )
20- endTaskLog func (taskId int , nStatus int , data []byte ) (err error )
21- updateTaskLogError func (params ... any ) (err error )
22- getTaskLogs func (ctx context.Context ) ([]models.TaskLog , error )
19+ getParentLogs func (ctx context.Context ) ([]models.ParentTaskLog , error )
20+ getChildLogs func (ctx context.Context , parentId int ) ([]models.ChildTaskLog , error )
21+
22+ // Rest is used internally....
23+ createParentTaskLog func (url string ) (models.ParentTaskLog , error )
24+ createChildTaskLog func (parent models.ParentTaskLog ) (models.ChildTaskLog , error )
25+ updateChildTaskLogStatus func (child models.ChildTaskLog ) error
26+ childTaskLogDone func (child models.ChildTaskLog ) error
27+ childTaskLogError func (child models.ChildTaskLog ) error
2328}
2429
25- func (h * mockTaskLogTable ) InsertTaskLog ( ) (lastInsertedId int , err error ) {
26- return h .insertTaskLog ( )
30+ func (h * mockTaskLogTable ) GetParentLogs ( ctx context. Context ) ([]models. ParentTaskLog , error ) {
31+ return h .getParentLogs ( ctx )
2732}
28- func (h * mockTaskLogTable ) UpdateTaskLogStatus ( taskId int , nStatus int ) (err error ) {
29- return h .updateTaskLogStatus ( taskId , nStatus )
33+ func (h * mockTaskLogTable ) GetChildLogs ( ctx context. Context , parentId int ) ([]models. ChildTaskLog , error ) {
34+ return h .getChildLogs ( ctx , parentId )
3035}
31- func (h * mockTaskLogTable ) EndTaskLog (taskId int , nStatus int , data []byte ) (err error ) {
32- return h .endTaskLog (taskId , nStatus , data )
36+
37+ // Rest is used internally....
38+ func (h * mockTaskLogTable ) CreateParentTaskLog (url string ) (models.ParentTaskLog , error ) {
39+ return h .createParentTaskLog (url )
3340}
34- func (h * mockTaskLogTable ) UpdateTaskLogError ( params ... any ) (err error ) {
35- return h .updateTaskLogError ( params ... )
41+ func (h * mockTaskLogTable ) CreateChildTaskLog ( parent models. ParentTaskLog ) (models. ChildTaskLog , error ) {
42+ return h .createChildTaskLog ( parent )
3643}
37-
38- func (h * mockTaskLogTable ) GetTaskLogs (ctx context.Context ) ([]models.TaskLog , error ) {
39- return h .getTaskLogs (ctx )
44+ func (h * mockTaskLogTable ) UpdateChildTaskLogStatus (child models.ChildTaskLog ) error {
45+ return h .updateChildTaskLogStatus (child )
46+ }
47+ func (h * mockTaskLogTable ) ChildTaskLogDone (child models.ChildTaskLog ) error {
48+ return h .childTaskLogDone (child )
49+ }
50+ func (h * mockTaskLogTable ) ChildTaskLogError (child models.ChildTaskLog ) error {
51+ return h .childTaskLogError (child )
4052}
4153
42- func TestGetTaskLogsError (t * testing.T ) {
54+ func TestGetParentLogs (t * testing.T ) {
4355 // Arrange
4456 route := "/tasklogs"
4557 router := SetupTestRouter ()
4658
4759 mockTable := & mockTaskLogTable {
48- getTaskLogs : func (ctx context.Context ) (songs []models.TaskLog , error error ) {
49- return nil , errors .New ("Woops" )
60+ getParentLogs : func (ctx context.Context ) ([]models.ParentTaskLog , error ) {
61+ return []models.ParentTaskLog {
62+ {Id : 0 , Url : "www.google.com" , AddTime : time .Now ()},
63+ {Id : 1 , Url : "www.youtube.com" , AddTime : time .Now ()},
64+ }, nil
5065 },
5166 }
5267
53- tasklogHandler := TaskLogHandler {
68+ taskLogHandler := TaskLogHandler {
5469 TasklogTable : mockTable ,
5570 }
5671
57- router .GET (route , tasklogHandler . FetchTaskLogs )
72+ router .GET (route , taskLogHandler . FetchParentTaskLogs )
5873
5974 recorder := httptest .NewRecorder ()
6075
@@ -64,40 +79,68 @@ func TestGetTaskLogsError(t *testing.T) {
6479 router .ServeHTTP (recorder , req )
6580
6681 // Assert
67- assert .Equal (t , http .StatusInternalServerError , recorder .Code )
68- }
82+ assert .Equal (t , http .StatusOK , recorder .Code )
6983
70- func TestGetTaskLogs (t * testing.T ) {
84+ var rawResult map [string ]any
85+
86+ err := json .Unmarshal (recorder .Body .Bytes (), & rawResult )
87+
88+ assert .Equal (t , nil , err )
89+
90+ dataBytes , err := json .Marshal (rawResult ["Data" ])
91+
92+ var logs []models.ParentTaskLog
93+ err = json .Unmarshal (dataBytes , & logs )
94+
95+ assert .NoError (t , err )
96+ assert .Equal (t , 2 , len (logs ))
97+ }
98+ func TestGetChildLogs (t * testing.T ) {
7199 // Arrange
72- route := "/tasklogs"
100+ parentId := 1
101+ route := "/tasklogs/:parentId"
73102 router := SetupTestRouter ()
74103
75104 mockTable := & mockTaskLogTable {
76- getTaskLogs : func (ctx context.Context ) (songs []models.TaskLog , error error ) {
77- type l struct {}
78-
79- ll := l {}
80-
81- _output , _ := json .Marshal (ll )
82- return []models.TaskLog {
83- {Id : 1 , Status : int (models .Error ), OutputLog : (* json .RawMessage )(& _output )},
84- }, nil
105+ getChildLogs : func (ctx context.Context , parentId int ) ([]models.ChildTaskLog , error ) {
106+ childTasks := []models.ChildTaskLog {
107+ {Id : 0 , ParentId : 1 , StartTime : time .Now (), EndTime : time .Now ().Add (1 ), Status : 4 },
108+ {Id : 0 , ParentId : 1 , StartTime : time .Now (), EndTime : time .Now ().Add (1 ), Status : 4 },
109+ }
110+ return childTasks , nil
85111 },
86112 }
87113
88- tasklogHandler := TaskLogHandler {
114+ taskLogHandler := TaskLogHandler {
89115 TasklogTable : mockTable ,
90116 }
91117
92- router .GET (route , tasklogHandler . FetchTaskLogs )
118+ router .GET (route , taskLogHandler . FetchChildTaskLogs )
93119
94120 recorder := httptest .NewRecorder ()
95121
96- req , _ := http .NewRequest ("GET" , route , nil )
122+ _route := fmt .Sprintf ("/tasklogs/%d" , parentId )
123+
124+ req , _ := http .NewRequest ("GET" , _route , nil )
97125
98126 // Act
99127 router .ServeHTTP (recorder , req )
100128
101129 // Assert
102130 assert .Equal (t , http .StatusOK , recorder .Code )
131+
132+ var rawResult map [string ]any
133+
134+ err := json .Unmarshal (recorder .Body .Bytes (), & rawResult )
135+
136+ assert .Equal (t , nil , err )
137+
138+ dataBytes , err := json .Marshal (rawResult ["Data" ])
139+
140+ var logs []models.ChildTaskLog
141+ err = json .Unmarshal (dataBytes , & logs )
142+
143+ assert .NoError (t , err )
144+ assert .Equal (t , 2 , len (logs ))
145+ assert .Equal (t , parentId , logs [0 ].ParentId )
103146}
0 commit comments