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