github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/feature_flags_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 Flags Command", func() { 20 var ( 21 cmd FeatureFlagsCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v7fakes.FakeFeatureFlagsActor 26 executeErr error 27 binaryName string 28 ) 29 30 const tableHeaders = `name\s+state` 31 32 JustBeforeEach(func() { 33 executeErr = cmd.Execute(nil) 34 }) 35 36 BeforeEach(func() { 37 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 38 fakeConfig = new(commandfakes.FakeConfig) 39 fakeSharedActor = new(commandfakes.FakeSharedActor) 40 fakeActor = new(v7fakes.FakeFeatureFlagsActor) 41 42 cmd = FeatureFlagsCommand{ 43 UI: testUI, 44 Config: fakeConfig, 45 SharedActor: fakeSharedActor, 46 Actor: fakeActor, 47 } 48 49 binaryName = "faceman" 50 fakeConfig.BinaryNameReturns(binaryName) 51 }) 52 53 Context("When the environment is not setup correctly", func() { 54 When("checking target fails", func() { 55 BeforeEach(func() { 56 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 57 }) 58 59 It("returns an error", func() { 60 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 61 62 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 63 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 64 Expect(checkTargetedOrg).To(BeFalse()) 65 Expect(checkTargetedSpace).To(BeFalse()) 66 }) 67 }) 68 }) 69 70 Context("When the environment is setup correctly", func() { 71 BeforeEach(func() { 72 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 73 }) 74 75 When("FeatureFlagsActor returns an error", func() { 76 var expectedErr error 77 78 BeforeEach(func() { 79 warnings := v7action.Warnings{"warning-1", "warning-2"} 80 expectedErr = errors.New("some-error") 81 fakeActor.GetFeatureFlagsReturns(nil, warnings, expectedErr) 82 }) 83 84 It("prints that error with warnings", func() { 85 Expect(executeErr).To(Equal(expectedErr)) 86 87 Expect(testUI.Err).To(Say("warning-1")) 88 Expect(testUI.Err).To(Say("warning-2")) 89 Expect(testUI.Out).ToNot(Say(tableHeaders)) 90 }) 91 }) 92 93 When("everything is perfect", func() { 94 BeforeEach(func() { 95 flags := []v7action.FeatureFlag{ 96 {Name: "flag2", Enabled: true}, 97 {Name: "flag1", Enabled: false}, 98 } 99 fakeActor.GetFeatureFlagsReturns(flags, v7action.Warnings{"warning-1", "warning-2"}, nil) 100 }) 101 102 It("asks the FeatureFlagsActor for a list of feature flags", func() { 103 Expect(fakeActor.GetFeatureFlagsCallCount()).To(Equal(1)) 104 }) 105 106 It("prints warnings", func() { 107 Expect(testUI.Err).To(Say(`warning-1`)) 108 Expect(testUI.Err).To(Say(`warning-2`)) 109 }) 110 111 It("prints the list of feature flags in alphabetical order", func() { 112 Expect(testUI.Out).To(Say(tableHeaders)) 113 Expect(testUI.Out).To(Say(`flag2\s+enabled`)) 114 Expect(testUI.Out).To(Say(`flag1\s+disabled`)) 115 }) 116 117 It("prints the flavor text", func() { 118 Expect(testUI.Out).To(Say("Getting feature flags as banana\\.\\.\\.")) 119 }) 120 }) 121 }) 122 })