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  })