@@ -513,6 +513,8 @@ func TestListAPIKey(t *testing.T) {
513513
514514func TestUpdateAPIKey (t * testing.T ) {
515515 storeMock := new (storemock.Store )
516+ queryOptionsMock := new (storemock.QueryOptions )
517+ storeMock .On ("Options" ).Return (queryOptionsMock )
516518
517519 cases := []struct {
518520 description string
@@ -554,6 +556,31 @@ func TestUpdateAPIKey(t *testing.T) {
554556 },
555557 expected : NewErrRoleInvalid (),
556558 },
559+ {
560+ description : "fails when api key does not exist for resolve" ,
561+ req : & requests.UpdateAPIKey {
562+ UserID : "000000000000000000000000" ,
563+ TenantID : "00000000-0000-4000-0000-000000000000" ,
564+ CurrentName : "nonexistent" ,
565+ Name : "newName" ,
566+ Role : "administrator" ,
567+ },
568+ requiredMocks : func (ctx context.Context ) {
569+ storeMock .
570+ On ("NamespaceResolve" , ctx , store .NamespaceTenantIDResolver , "00000000-0000-4000-0000-000000000000" ).
571+ Return (& models.Namespace {Members : []models.Member {{ID : "000000000000000000000000" , Role : "owner" }}}, nil ).
572+ Once ()
573+ queryOptionsMock .
574+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
575+ Return (nil ).
576+ Once ()
577+ storeMock .
578+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "nonexistent" , mock .AnythingOfType ("store.QueryOption" )).
579+ Return (nil , store .ErrNoDocuments ).
580+ Once ()
581+ },
582+ expected : NewErrAPIKeyNotFound ("nonexistent" , store .ErrNoDocuments ),
583+ },
557584 {
558585 description : "fails when a conflict is found" ,
559586 req : & requests.UpdateAPIKey {
@@ -564,10 +591,25 @@ func TestUpdateAPIKey(t *testing.T) {
564591 Role : "administrator" ,
565592 },
566593 requiredMocks : func (ctx context.Context ) {
594+ existingAPIKey := & models.APIKey {
595+ ID : "existing-id" ,
596+ Name : "dev" ,
597+ TenantID : "00000000-0000-4000-0000-000000000000" ,
598+ Role : "operator" ,
599+ }
600+
567601 storeMock .
568602 On ("NamespaceResolve" , ctx , store .NamespaceTenantIDResolver , "00000000-0000-4000-0000-000000000000" ).
569603 Return (& models.Namespace {Members : []models.Member {{ID : "000000000000000000000000" , Role : "owner" }}}, nil ).
570604 Once ()
605+ queryOptionsMock .
606+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
607+ Return (nil ).
608+ Once ()
609+ storeMock .
610+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
611+ Return (existingAPIKey , nil ).
612+ Once ()
571613 storeMock .
572614 On ("APIKeyConflicts" , ctx , "00000000-0000-4000-0000-000000000000" , & models.APIKeyConflicts {Name : "newName" }).
573615 Return ([]string {"name" }, true , nil ).
@@ -576,7 +618,7 @@ func TestUpdateAPIKey(t *testing.T) {
576618 expected : NewErrAPIKeyDuplicated ([]string {"name" }),
577619 },
578620 {
579- description : "fails when api key does not exists " ,
621+ description : "fails when api key save fails " ,
580622 req : & requests.UpdateAPIKey {
581623 UserID : "000000000000000000000000" ,
582624 TenantID : "00000000-0000-4000-0000-000000000000" ,
@@ -585,20 +627,42 @@ func TestUpdateAPIKey(t *testing.T) {
585627 Role : "administrator" ,
586628 },
587629 requiredMocks : func (ctx context.Context ) {
630+ existingAPIKey := & models.APIKey {
631+ ID : "existing-id" ,
632+ Name : "dev" ,
633+ TenantID : "00000000-0000-4000-0000-000000000000" ,
634+ Role : "operator" ,
635+ }
636+
637+ updatedAPIKey := & models.APIKey {
638+ ID : "existing-id" ,
639+ Name : "newName" ,
640+ TenantID : "00000000-0000-4000-0000-000000000000" ,
641+ Role : "administrator" ,
642+ }
643+
588644 storeMock .
589645 On ("NamespaceResolve" , ctx , store .NamespaceTenantIDResolver , "00000000-0000-4000-0000-000000000000" ).
590646 Return (& models.Namespace {Members : []models.Member {{ID : "000000000000000000000000" , Role : "owner" }}}, nil ).
591647 Once ()
648+ queryOptionsMock .
649+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
650+ Return (nil ).
651+ Once ()
652+ storeMock .
653+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
654+ Return (existingAPIKey , nil ).
655+ Once ()
592656 storeMock .
593657 On ("APIKeyConflicts" , ctx , "00000000-0000-4000-0000-000000000000" , & models.APIKeyConflicts {Name : "newName" }).
594658 Return ([]string {}, false , nil ).
595659 Once ()
596660 storeMock .
597- On ("APIKeyUpdate " , ctx , "00000000-0000-4000-0000-000000000000" , "dev" , & models. APIKeyChanges { Name : "newName" , Role : "administrator" } ).
598- Return (errors .New ("error" )).
661+ On ("APIKeySave " , ctx , updatedAPIKey ).
662+ Return (errors .New ("save error" )).
599663 Once ()
600664 },
601- expected : NewErrAPIKeyNotFound ( "dev" , errors .New ("error" ) ),
665+ expected : errors .New ("save error" ),
602666 },
603667 {
604668 description : "succeeds" ,
@@ -610,16 +674,81 @@ func TestUpdateAPIKey(t *testing.T) {
610674 Role : "administrator" ,
611675 },
612676 requiredMocks : func (ctx context.Context ) {
677+ existingAPIKey := & models.APIKey {
678+ ID : "existing-id" ,
679+ Name : "dev" ,
680+ TenantID : "00000000-0000-4000-0000-000000000000" ,
681+ Role : "operator" ,
682+ }
683+
684+ updatedAPIKey := & models.APIKey {
685+ ID : "existing-id" ,
686+ Name : "newName" ,
687+ TenantID : "00000000-0000-4000-0000-000000000000" ,
688+ Role : "administrator" ,
689+ }
690+
613691 storeMock .
614692 On ("NamespaceResolve" , ctx , store .NamespaceTenantIDResolver , "00000000-0000-4000-0000-000000000000" ).
615693 Return (& models.Namespace {Members : []models.Member {{ID : "000000000000000000000000" , Role : "owner" }}}, nil ).
616694 Once ()
695+ queryOptionsMock .
696+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
697+ Return (nil ).
698+ Once ()
699+ storeMock .
700+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
701+ Return (existingAPIKey , nil ).
702+ Once ()
617703 storeMock .
618704 On ("APIKeyConflicts" , ctx , "00000000-0000-4000-0000-000000000000" , & models.APIKeyConflicts {Name : "newName" }).
619705 Return ([]string {}, false , nil ).
620706 Once ()
621707 storeMock .
622- On ("APIKeyUpdate" , ctx , "00000000-0000-4000-0000-000000000000" , "dev" , & models.APIKeyChanges {Name : "newName" , Role : "administrator" }).
708+ On ("APIKeySave" , ctx , updatedAPIKey ).
709+ Return (nil ).
710+ Once ()
711+ },
712+ expected : nil ,
713+ },
714+ {
715+ description : "succeeds whithout updating the name" ,
716+ req : & requests.UpdateAPIKey {
717+ UserID : "000000000000000000000000" ,
718+ TenantID : "00000000-0000-4000-0000-000000000000" ,
719+ CurrentName : "dev" ,
720+ Name : "dev" , // mesmo nome
721+ Role : "administrator" ,
722+ },
723+ requiredMocks : func (ctx context.Context ) {
724+ existingAPIKey := & models.APIKey {
725+ ID : "existing-id" ,
726+ Name : "dev" ,
727+ TenantID : "00000000-0000-4000-0000-000000000000" ,
728+ Role : "operator" ,
729+ }
730+
731+ updatedAPIKey := & models.APIKey {
732+ ID : "existing-id" ,
733+ Name : "dev" ,
734+ TenantID : "00000000-0000-4000-0000-000000000000" ,
735+ Role : "administrator" ,
736+ }
737+
738+ storeMock .
739+ On ("NamespaceResolve" , ctx , store .NamespaceTenantIDResolver , "00000000-0000-4000-0000-000000000000" ).
740+ Return (& models.Namespace {Members : []models.Member {{ID : "000000000000000000000000" , Role : "owner" }}}, nil ).
741+ Once ()
742+ queryOptionsMock .
743+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
744+ Return (nil ).
745+ Once ()
746+ storeMock .
747+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
748+ Return (existingAPIKey , nil ).
749+ Once ()
750+ storeMock .
751+ On ("APIKeySave" , ctx , updatedAPIKey ).
623752 Return (nil ).
624753 Once ()
625754 },
@@ -647,27 +776,61 @@ func TestUpdateAPIKey(t *testing.T) {
647776
648777func TestDeleteAPIKey (t * testing.T ) {
649778 storeMock := new (storemock.Store )
779+ queryOptionsMock := new (storemock.QueryOptions )
780+ storeMock .On ("Options" ).Return (queryOptionsMock )
650781
651782 cases := []struct {
652783 description string
653- tenantID string
654784 req * requests.DeleteAPIKey
655785 requiredMocks func (context.Context )
656786 expected error
657787 }{
658788 {
659- description : "fails when api key does not exists" ,
789+ description : "fails when api key does not exist for resolve" ,
790+ req : & requests.DeleteAPIKey {
791+ TenantID : "00000000-0000-4000-0000-000000000000" ,
792+ Name : "nonexistent" ,
793+ },
794+ requiredMocks : func (ctx context.Context ) {
795+ queryOptionsMock .
796+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
797+ Return (nil ).
798+ Once ()
799+ storeMock .
800+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "nonexistent" , mock .AnythingOfType ("store.QueryOption" )).
801+ Return (nil , store .ErrNoDocuments ).
802+ Once ()
803+ },
804+ expected : NewErrAPIKeyNotFound ("nonexistent" , store .ErrNoDocuments ),
805+ },
806+ {
807+ description : "fails when api key delete fails" ,
660808 req : & requests.DeleteAPIKey {
661809 TenantID : "00000000-0000-4000-0000-000000000000" ,
662810 Name : "dev" ,
663811 },
664812 requiredMocks : func (ctx context.Context ) {
813+ existingAPIKey := & models.APIKey {
814+ ID : "existing-id" ,
815+ Name : "dev" ,
816+ TenantID : "00000000-0000-4000-0000-000000000000" ,
817+ Role : "operator" ,
818+ }
819+
820+ queryOptionsMock .
821+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
822+ Return (nil ).
823+ Once ()
665824 storeMock .
666- On ("APIKeyDelete" , ctx , "00000000-0000-4000-0000-000000000000" , "dev" ).
667- Return (errors .New ("error" )).
825+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
826+ Return (existingAPIKey , nil ).
827+ Once ()
828+ storeMock .
829+ On ("APIKeyDelete" , ctx , existingAPIKey ).
830+ Return (errors .New ("delete error" )).
668831 Once ()
669832 },
670- expected : NewErrAPIKeyNotFound ( "dev" , errors .New ("error" ) ),
833+ expected : errors .New ("delete error" ),
671834 },
672835 {
673836 description : "succeeds" ,
@@ -676,8 +839,23 @@ func TestDeleteAPIKey(t *testing.T) {
676839 Name : "dev" ,
677840 },
678841 requiredMocks : func (ctx context.Context ) {
842+ existingAPIKey := & models.APIKey {
843+ ID : "existing-id" ,
844+ Name : "dev" ,
845+ TenantID : "00000000-0000-4000-0000-000000000000" ,
846+ Role : "operator" ,
847+ }
848+
849+ queryOptionsMock .
850+ On ("InNamespace" , "00000000-0000-4000-0000-000000000000" ).
851+ Return (nil ).
852+ Once ()
853+ storeMock .
854+ On ("APIKeyResolve" , ctx , store .APIKeyNameResolver , "dev" , mock .AnythingOfType ("store.QueryOption" )).
855+ Return (existingAPIKey , nil ).
856+ Once ()
679857 storeMock .
680- On ("APIKeyDelete" , ctx , "00000000-0000-4000-0000-000000000000" , "dev" ).
858+ On ("APIKeyDelete" , ctx , existingAPIKey ).
681859 Return (nil ).
682860 Once ()
683861 },
@@ -695,7 +873,7 @@ func TestDeleteAPIKey(t *testing.T) {
695873 ctx := context .Background ()
696874 tc .requiredMocks (ctx )
697875
698- err = s .DeleteAPIKey (ctx , tc .req )
876+ err : = s .DeleteAPIKey (ctx , tc .req )
699877 require .Equal (t , tc .expected , err )
700878 })
701879 }
0 commit comments