github.com/loafoe/cli@v7.1.0+incompatible/command/v7/feature_flag_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 . "code.cloudfoundry.org/cli/command/v7" 10 "code.cloudfoundry.org/cli/command/v7/v7fakes" 11 "code.cloudfoundry.org/cli/util/configv3" 12 "code.cloudfoundry.org/cli/util/ui" 13 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("Feature Flag Command", func() { 20 var ( 21 cmd FeatureFlagCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v7fakes.FakeActor 26 executeErr error 27 args []string 28 binaryName string 29 featureFlagName = "flag1" 30 ) 31 32 BeforeEach(func() { 33 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 34 fakeConfig = new(commandfakes.FakeConfig) 35 fakeSharedActor = new(commandfakes.FakeSharedActor) 36 fakeActor = new(v7fakes.FakeActor) 37 args = nil 38 39 cmd = FeatureFlagCommand{ 40 BaseCommand: BaseCommand{ 41 UI: testUI, 42 Config: fakeConfig, 43 SharedActor: fakeSharedActor, 44 Actor: fakeActor, 45 }, 46 } 47 48 binaryName = "faceman" 49 fakeConfig.BinaryNameReturns(binaryName) 50 51 cmd.RequiredArgs.Feature = featureFlagName 52 fakeConfig.CurrentUserReturns(configv3.User{Name: "apple"}, nil) 53 54 fakeActor.GetFeatureFlagByNameReturns(v7action.FeatureFlag{ 55 Name: "flag1", 56 Enabled: true, 57 }, v7action.Warnings{"this is a warning"}, nil) 58 }) 59 60 JustBeforeEach(func() { 61 executeErr = cmd.Execute(args) 62 }) 63 64 When("the environment is not set up correctly", func() { 65 BeforeEach(func() { 66 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 67 }) 68 69 It("returns an error", func() { 70 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 71 72 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 73 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 74 Expect(checkTargetedOrg).To(BeFalse()) 75 Expect(checkTargetedSpace).To(BeFalse()) 76 }) 77 }) 78 79 It("should print text indicating its running", func() { 80 Expect(executeErr).NotTo(HaveOccurred()) 81 Expect(testUI.Out).To(Say(`Getting info for feature flag flag1 as apple\.\.\.`)) 82 }) 83 84 It("prints out warnings", func() { 85 Expect(testUI.Err).To(Say("this is a warning")) 86 }) 87 88 When("getting featureFlag fails", func() { 89 When("the featureFlag does not exist", func() { 90 BeforeEach(func() { 91 featureFlag := v7action.FeatureFlag{} 92 fakeActor.GetFeatureFlagByNameReturns(featureFlag, v7action.Warnings{"this is a warning"}, actionerror.FeatureFlagNotFoundError{FeatureFlagName: featureFlagName}) 93 }) 94 95 It("Fails and returns a FeatureFlagNotFoundError", func() { 96 Expect(executeErr).To(Equal(actionerror.FeatureFlagNotFoundError{FeatureFlagName: featureFlagName})) 97 Expect(testUI.Err).To(Say("this is a warning")) 98 }) 99 }) 100 BeforeEach(func() { 101 fakeActor.GetFeatureFlagByNameReturns(v7action.FeatureFlag{}, v7action.Warnings{"this is a warning"}, 102 errors.New("some-error")) 103 }) 104 105 It("prints warnings and returns error", func() { 106 Expect(executeErr).To(MatchError("some-error")) 107 Expect(testUI.Err).To(Say("this is a warning")) 108 }) 109 }) 110 111 It("prints a table of featureFlag", func() { 112 featureFlagArgs := fakeActor.GetFeatureFlagByNameArgsForCall(0) 113 Expect(featureFlagArgs).To(Equal(featureFlagName)) 114 Expect(executeErr).NotTo(HaveOccurred()) 115 Expect(testUI.Err).To(Say("this is a warning")) 116 Expect(testUI.Out).To(Say(`Features\s+State`)) 117 Expect(testUI.Out).To(Say(`flag1\s+enabled`)) 118 }) 119 })