github.com/loafoe/cli@v7.1.0+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.FakeActor 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.FakeActor) 41 42 cmd = FeatureFlagsCommand{ 43 BaseCommand: BaseCommand{ 44 UI: testUI, 45 Config: fakeConfig, 46 SharedActor: fakeSharedActor, 47 Actor: fakeActor, 48 }, 49 } 50 51 binaryName = "faceman" 52 fakeConfig.BinaryNameReturns(binaryName) 53 }) 54 55 Context("When the environment is not setup correctly", func() { 56 When("checking target fails", func() { 57 BeforeEach(func() { 58 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 59 }) 60 61 It("returns an error", func() { 62 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 63 64 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 65 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 66 Expect(checkTargetedOrg).To(BeFalse()) 67 Expect(checkTargetedSpace).To(BeFalse()) 68 }) 69 }) 70 }) 71 72 Context("When the environment is setup correctly", func() { 73 BeforeEach(func() { 74 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 75 }) 76 77 When("FeatureFlagsActor returns an error", func() { 78 var expectedErr error 79 80 BeforeEach(func() { 81 warnings := v7action.Warnings{"warning-1", "warning-2"} 82 expectedErr = errors.New("some-error") 83 fakeActor.GetFeatureFlagsReturns(nil, warnings, expectedErr) 84 }) 85 86 It("prints that error with warnings", func() { 87 Expect(executeErr).To(Equal(expectedErr)) 88 89 Expect(testUI.Err).To(Say("warning-1")) 90 Expect(testUI.Err).To(Say("warning-2")) 91 Expect(testUI.Out).ToNot(Say(tableHeaders)) 92 }) 93 }) 94 95 When("everything is perfect", func() { 96 BeforeEach(func() { 97 flags := []v7action.FeatureFlag{ 98 {Name: "flag2", Enabled: true}, 99 {Name: "flag1", Enabled: false}, 100 } 101 fakeActor.GetFeatureFlagsReturns(flags, v7action.Warnings{"warning-1", "warning-2"}, nil) 102 }) 103 104 It("asks the FeatureFlagsActor for a list of feature flags", func() { 105 Expect(fakeActor.GetFeatureFlagsCallCount()).To(Equal(1)) 106 }) 107 108 It("prints warnings", func() { 109 Expect(testUI.Err).To(Say(`warning-1`)) 110 Expect(testUI.Err).To(Say(`warning-2`)) 111 }) 112 113 It("prints the list of feature flags in alphabetical order", func() { 114 Expect(testUI.Out).To(Say(tableHeaders)) 115 Expect(testUI.Out).To(Say(`flag2\s+enabled`)) 116 Expect(testUI.Out).To(Say(`flag1\s+disabled`)) 117 }) 118 119 It("prints the flavor text", func() { 120 Expect(testUI.Out).To(Say("Getting feature flags as banana\\.\\.\\.")) 121 }) 122 }) 123 }) 124 })