@@ -368,3 +368,103 @@ func TestConnectHandler_CreateProjectResource(t *testing.T) {
368
368
})
369
369
}
370
370
}
371
+
372
+ func TestConnectHandler_GetProjectResource (t * testing.T ) {
373
+ tests := []struct {
374
+ name string
375
+ setup func (rs * mocks.ResourceService )
376
+ request * connect.Request [frontierv1beta1.GetProjectResourceRequest ]
377
+ want * connect.Response [frontierv1beta1.GetProjectResourceResponse ]
378
+ wantErr error
379
+ }{
380
+ {
381
+ name : "should return internal error if resource service returns error" ,
382
+ setup : func (rs * mocks.ResourceService ) {
383
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), testResource .ID ).Return (resource.Resource {}, errors .New ("test error" ))
384
+ },
385
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {
386
+ Id : testResource .ID ,
387
+ }),
388
+ want : nil ,
389
+ wantErr : connect .NewError (connect .CodeInternal , ErrInternalServerError ),
390
+ },
391
+ {
392
+ name : "should return not found error if id is empty" ,
393
+ setup : func (rs * mocks.ResourceService ) {
394
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), "" ).Return (resource.Resource {}, resource .ErrInvalidID )
395
+ },
396
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {}),
397
+ want : nil ,
398
+ wantErr : connect .NewError (connect .CodeNotFound , ErrNotFound ),
399
+ },
400
+ {
401
+ name : "should return not found error if id is not uuid" ,
402
+ setup : func (rs * mocks.ResourceService ) {
403
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), "some-id" ).Return (resource.Resource {}, resource .ErrInvalidUUID )
404
+ },
405
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {
406
+ Id : "some-id" ,
407
+ }),
408
+ want : nil ,
409
+ wantErr : connect .NewError (connect .CodeNotFound , ErrNotFound ),
410
+ },
411
+ {
412
+ name : "should return not found error if resource not exist" ,
413
+ setup : func (rs * mocks.ResourceService ) {
414
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), testResource .ID ).Return (resource.Resource {}, resource .ErrNotExist )
415
+ },
416
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {
417
+ Id : testResource .ID ,
418
+ }),
419
+ want : nil ,
420
+ wantErr : connect .NewError (connect .CodeNotFound , ErrNotFound ),
421
+ },
422
+ {
423
+ name : "should return success if resource service returns resource" ,
424
+ setup : func (rs * mocks.ResourceService ) {
425
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), testResource .ID ).Return (testResource , nil )
426
+ },
427
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {
428
+ Id : testResource .ID ,
429
+ }),
430
+ want : connect .NewResponse (& frontierv1beta1.GetProjectResourceResponse {
431
+ Resource : testResourcePB ,
432
+ }),
433
+ wantErr : nil ,
434
+ },
435
+ {
436
+ name : "should return internal error if transform fails" ,
437
+ setup : func (rs * mocks.ResourceService ) {
438
+ invalidResource := testResource
439
+ invalidResource .Metadata = map [string ]interface {}{
440
+ "invalid" : func () {}, // functions can't be marshaled
441
+ }
442
+ rs .EXPECT ().Get (mock .AnythingOfType ("context.backgroundCtx" ), testResource .ID ).Return (invalidResource , nil )
443
+ },
444
+ request : connect .NewRequest (& frontierv1beta1.GetProjectResourceRequest {
445
+ Id : testResource .ID ,
446
+ }),
447
+ want : nil ,
448
+ wantErr : connect .NewError (connect .CodeInternal , ErrInternalServerError ),
449
+ },
450
+ }
451
+
452
+ for _ , tt := range tests {
453
+ t .Run (tt .name , func (t * testing.T ) {
454
+ mockResourceSrv := new (mocks.ResourceService )
455
+ if tt .setup != nil {
456
+ tt .setup (mockResourceSrv )
457
+ }
458
+ h := ConnectHandler {resourceService : mockResourceSrv }
459
+ resp , err := h .GetProjectResource (context .Background (), tt .request )
460
+ if tt .wantErr != nil {
461
+ assert .Error (t , err )
462
+ assert .Equal (t , tt .wantErr .(* connect.Error ).Code (), err .(* connect.Error ).Code ())
463
+ assert .Equal (t , tt .wantErr .(* connect.Error ).Message (), err .(* connect.Error ).Message ())
464
+ } else {
465
+ assert .NoError (t , err )
466
+ assert .EqualValues (t , tt .want , resp )
467
+ }
468
+ })
469
+ }
470
+ }
0 commit comments