@@ -11,6 +11,7 @@ import (
11
11
"github.com/dieg0code/shared/json/request"
12
12
"github.com/dieg0code/shared/json/response"
13
13
"github.com/dieg0code/shared/mocks"
14
+ "github.com/dieg0code/shared/models"
14
15
"github.com/gin-gonic/gin"
15
16
"github.com/stretchr/testify/assert"
16
17
"github.com/stretchr/testify/mock"
@@ -262,3 +263,118 @@ func TestGetUserByID(t *testing.T) {
262
263
userService .AssertExpectations (t )
263
264
})
264
265
}
266
+
267
+ func TestRegisterUser (t * testing.T ) {
268
+ t .Run ("RegisterUser_Success" , func (t * testing.T ) {
269
+ userService := new (mocks.MockUserService )
270
+ userController := NewUserControllerImpl (userService )
271
+
272
+ gin .SetMode (gin .TestMode )
273
+
274
+ router := gin .Default ()
275
+
276
+ router .POST ("/users" , userController .RegisterUser )
277
+
278
+ userService .On ("RegisterUser" , mock .Anything ).Return (models.User {
279
+ UserID : "uuid" ,
280
+ Username : "test" ,
281
+ Email : "test@test.com" ,
282
+ Role : "user" ,
283
+ }, nil )
284
+
285
+ registerUserRequest := request.CreateUserRequest {
286
+ Username : "test" ,
287
+ Email : "test@test.com" ,
288
+ Password : "password" ,
289
+ Role : "user" ,
290
+ }
291
+
292
+ reqBody , err := json .Marshal (registerUserRequest )
293
+ assert .NoError (t , err , "Expected no error marshalling request body" )
294
+
295
+ req , err := http .NewRequest (http .MethodPost , "/users" , bytes .NewBuffer (reqBody ))
296
+ assert .NoError (t , err , "Expected no error creating request" )
297
+
298
+ rec := httptest .NewRecorder ()
299
+ router .ServeHTTP (rec , req )
300
+
301
+ assert .Equal (t , http .StatusCreated , rec .Code , "Expected status code 201" )
302
+
303
+ var response response.BaseResponse
304
+ err = json .Unmarshal (rec .Body .Bytes (), & response )
305
+ assert .NoError (t , err , "Expected no error unmarshalling response body" )
306
+ assert .Equal (t , "success" , response .Status , "Expected response status to be success" )
307
+ assert .Equal (t , "User registered successfully" , response .Message , "Expected response message to be 'User registered successfully'" )
308
+ assert .Equal (t , "User test registered successfully ID: uuid" , response .Data .(string ), "Expected response data to be 'User test registered successfully ID: uuid'" )
309
+
310
+ userService .AssertExpectations (t )
311
+ })
312
+
313
+ t .Run ("RegisterUser_ErrorBindingJSON" , func (t * testing.T ) {
314
+ userService := new (mocks.MockUserService )
315
+ userController := NewUserControllerImpl (userService )
316
+
317
+ gin .SetMode (gin .TestMode )
318
+
319
+ router := gin .Default ()
320
+
321
+ router .POST ("/users" , userController .RegisterUser )
322
+
323
+ req , err := http .NewRequest (http .MethodPost , "/users" , bytes .NewBuffer ([]byte ("" )))
324
+ assert .NoError (t , err , "Expected no error creating request" )
325
+
326
+ rec := httptest .NewRecorder ()
327
+ router .ServeHTTP (rec , req )
328
+
329
+ assert .Equal (t , http .StatusBadRequest , rec .Code , "Expected status code 400" )
330
+
331
+ var response response.BaseResponse
332
+ err = json .Unmarshal (rec .Body .Bytes (), & response )
333
+ assert .NoError (t , err , "Expected no error unmarshalling response body" )
334
+ assert .Equal (t , "error" , response .Status , "Expected response status to be error" )
335
+ assert .Equal (t , "Invalid request body" , response .Message , "Expected response message to be 'Invalid request body'" )
336
+
337
+ userService .AssertExpectations (t )
338
+ })
339
+
340
+ t .Run ("RegisterUser_ErrorRegisteringUser" , func (t * testing.T ) {
341
+ userService := new (mocks.MockUserService )
342
+ userController := NewUserControllerImpl (userService )
343
+
344
+ gin .SetMode (gin .TestMode )
345
+
346
+ router := gin .Default ()
347
+
348
+ router .POST ("/users" , userController .RegisterUser )
349
+
350
+ userService .On ("RegisterUser" , mock .Anything ).Return (models.User {}, assert .AnError )
351
+
352
+ registerUserRequest := request.CreateUserRequest {
353
+ Username : "test" ,
354
+ Email : "test@test.com" ,
355
+ Password : "password" ,
356
+ Role : "user" ,
357
+ }
358
+
359
+ reqBody , err := json .Marshal (registerUserRequest )
360
+ assert .NoError (t , err , "Expected no error marshalling request body" )
361
+
362
+ req , err := http .NewRequest (http .MethodPost , "/users" , bytes .NewBuffer (reqBody ))
363
+ assert .NoError (t , err , "Expected no error creating request" )
364
+
365
+ rec := httptest .NewRecorder ()
366
+ router .ServeHTTP (rec , req )
367
+
368
+ assert .Equal (t , http .StatusInternalServerError , rec .Code , "Expected status code 500" )
369
+
370
+ var response response.BaseResponse
371
+ err = json .Unmarshal (rec .Body .Bytes (), & response )
372
+ assert .NoError (t , err , "Expected no error unmarshalling response body" )
373
+ assert .Equal (t , "error" , response .Status , "Expected response status to be error" )
374
+ assert .Equal (t , "Error registering user" , response .Message , "Expected response message to be 'Error registering user'" )
375
+ assert .Nil (t , response .Data , "Expected response data to be nil" )
376
+
377
+ userService .AssertExpectations (t )
378
+ })
379
+
380
+ }
0 commit comments