github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/service_key_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes" 8 v7 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes" 10 "github.com/LukasHeimann/cloudfoundrycli/v8/resources" 11 "github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3" 12 "github.com/LukasHeimann/cloudfoundrycli/v8/util/ui" 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 . "github.com/onsi/gomega/gbytes" 16 ) 17 18 var _ = Describe("service-key Command", func() { 19 var ( 20 cmd v7.ServiceKeyCommand 21 testUI *ui.UI 22 fakeConfig *commandfakes.FakeConfig 23 fakeSharedActor *commandfakes.FakeSharedActor 24 executeErr error 25 fakeActor *v7fakes.FakeActor 26 ) 27 28 const ( 29 fakeServiceInstanceName = "fake-service-instance-name" 30 fakeServiceKeyName = "fake-service-key-name" 31 fakeSpaceGUID = "fake-space-guid" 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(NewBuffer(), NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v7fakes.FakeActor) 39 40 cmd = v7.ServiceKeyCommand{ 41 BaseCommand: v7.BaseCommand{ 42 UI: testUI, 43 Config: fakeConfig, 44 SharedActor: fakeSharedActor, 45 Actor: fakeActor, 46 }, 47 } 48 49 fakeConfig.TargetedSpaceReturns(configv3.Space{GUID: fakeSpaceGUID}) 50 51 setPositionalFlags(&cmd, fakeServiceInstanceName, fakeServiceKeyName) 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 It("checks the user is logged in, and targeting an org and space", func() { 59 Expect(executeErr).NotTo(HaveOccurred()) 60 61 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 62 actualOrg, actualSpace := fakeSharedActor.CheckTargetArgsForCall(0) 63 Expect(actualOrg).To(BeTrue()) 64 Expect(actualSpace).To(BeTrue()) 65 }) 66 67 When("getting details", func() { 68 const fakeUserName = "fake-user-name" 69 70 BeforeEach(func() { 71 fakeActor.GetCurrentUserReturns(configv3.User{Name: fakeUserName}, nil) 72 73 fakeActor.GetServiceKeyDetailsByServiceInstanceAndNameReturns( 74 resources.ServiceCredentialBindingDetails{ 75 Credentials: map[string]interface{}{"foo": "bar", "pass": "<3test"}, 76 }, 77 v7action.Warnings{"a warning"}, 78 nil, 79 ) 80 }) 81 82 It("delegates to the actor", func() { 83 Expect(fakeActor.GetServiceKeyDetailsByServiceInstanceAndNameCallCount()).To(Equal(1)) 84 actualServiceInstanceName, actualKeyName, actualSpaceGUID := fakeActor.GetServiceKeyDetailsByServiceInstanceAndNameArgsForCall(0) 85 Expect(actualServiceInstanceName).To(Equal(fakeServiceInstanceName)) 86 Expect(actualKeyName).To(Equal(fakeServiceKeyName)) 87 Expect(actualSpaceGUID).To(Equal(fakeSpaceGUID)) 88 }) 89 90 It("prints an intro, details, and warnings", func() { 91 Expect(executeErr).NotTo(HaveOccurred()) 92 Expect(testUI.Err).To(Say("a warning")) 93 Expect(testUI.Out).To(SatisfyAll( 94 Say(`Getting key %s for service instance %s as %s\.\.\.\n`, fakeServiceKeyName, fakeServiceInstanceName, fakeUserName), 95 Say(`\n`), 96 Say(`\{\n`), 97 Say(` "foo": "bar",\n`), 98 Say(` "pass": "<3test"\n`), 99 Say(`\}\n`), 100 )) 101 }) 102 103 When("getting the username returns an error", func() { 104 BeforeEach(func() { 105 fakeActor.GetCurrentUserReturns(configv3.User{}, errors.New("bad thing")) 106 }) 107 108 It("returns the error", func() { 109 Expect(executeErr).To(MatchError("bad thing")) 110 }) 111 }) 112 113 When("actor returns another error", func() { 114 BeforeEach(func() { 115 fakeActor.GetServiceKeyDetailsByServiceInstanceAndNameReturns( 116 resources.ServiceCredentialBindingDetails{}, 117 v7action.Warnings{"a warning"}, 118 errors.New("bang"), 119 ) 120 }) 121 122 It("prints warnings and returns an error", func() { 123 Expect(testUI.Err).To(Say("a warning")) 124 Expect(executeErr).To(MatchError("bang")) 125 }) 126 }) 127 }) 128 129 When("getting GUID", func() { 130 const fakeGUID = "fake-key-guid" 131 132 BeforeEach(func() { 133 fakeActor.GetServiceKeyByServiceInstanceAndNameReturns( 134 resources.ServiceCredentialBinding{GUID: fakeGUID}, 135 v7action.Warnings{"a warning"}, 136 nil, 137 ) 138 139 setFlag(&cmd, "--guid") 140 }) 141 142 It("delegates to the actor", func() { 143 Expect(fakeActor.GetServiceKeyByServiceInstanceAndNameCallCount()).To(Equal(1)) 144 actualServiceInstanceName, actualKeyName, actualSpaceGUID := fakeActor.GetServiceKeyByServiceInstanceAndNameArgsForCall(0) 145 Expect(actualServiceInstanceName).To(Equal(fakeServiceInstanceName)) 146 Expect(actualKeyName).To(Equal(fakeServiceKeyName)) 147 Expect(actualSpaceGUID).To(Equal(fakeSpaceGUID)) 148 }) 149 150 It("prints the GUID and nothing else", func() { 151 Expect(testUI.Out).To(Say(fakeGUID)) 152 Expect(testUI.Err).NotTo(Say("a warning")) 153 }) 154 155 When("actor returns an error", func() { 156 BeforeEach(func() { 157 fakeActor.GetServiceKeyByServiceInstanceAndNameReturns( 158 resources.ServiceCredentialBinding{}, 159 v7action.Warnings{"a warning"}, 160 errors.New("bang"), 161 ) 162 }) 163 164 It("prints warnings and returns an error", func() { 165 Expect(testUI.Err).To(Say("a warning")) 166 Expect(executeErr).To(MatchError("bang")) 167 }) 168 }) 169 }) 170 })