github.com/loafoe/cli@v7.1.0+incompatible/actor/sharedaction/help_test.go (about) 1 package sharedaction_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 . "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/sharedaction/sharedactionfakes" 7 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 ) 11 12 type commandList struct { 13 App appCommand `command:"app" description:"Display health and status for an app"` 14 Restage restageCommand `command:"restage" alias:"rg" description:"Restage an app"` 15 Help helpCommand `command:"help" alias:"h" description:"Show help"` 16 Usage usageMethodCommand `command:"fancy"` 17 } 18 19 type appCommand struct { 20 GUID bool `long:"guid" description:"Retrieve and display the given app's guid. All other health and status output for the app is suppressed." default:"some-default"` 21 usage interface{} `usage:"CF_NAME app APP_NAME"` 22 relatedCommands interface{} `related_commands:"apps, events, logs, map-route, unmap-route, push"` 23 } 24 25 type restageCommand struct { 26 envCFStagingTimeout interface{} `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for buildpack staging, in minutes" environmentDefault:"15"` 27 envCFStartupTimeout interface{} `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"` 28 } 29 30 type helpCommand struct { 31 AllCommands bool `short:"a" description:"All available CLI commands"` 32 usage interface{} `usage:"CF_NAME help [COMMAND]"` 33 } 34 35 type usageMethodCommand struct { 36 } 37 38 func (c usageMethodCommand) Usage() string { 39 return ` 40 Usage line 1 41 Usage line 2 42 ` 43 } 44 45 func (c usageMethodCommand) Examples() string { 46 return ` 47 Examples line 1 48 Examples line 2 49 ` 50 } 51 52 var _ = Describe("Help Actions", func() { 53 var actor *Actor 54 55 BeforeEach(func() { 56 actor = NewActor(&sharedactionfakes.FakeConfig{}) 57 }) 58 59 Describe("CommandInfoByName", func() { 60 When("the command exists", func() { 61 When("passed the command name", func() { 62 It("returns command info", func() { 63 commandInfo, err := actor.CommandInfoByName(commandList{}, "app") 64 Expect(err).NotTo(HaveOccurred()) 65 66 Expect(commandInfo.Name).To(Equal("app")) 67 Expect(commandInfo.Description).To(Equal("Display health and status for an app")) 68 Expect(commandInfo.Alias).To(BeEmpty()) 69 Expect(commandInfo.Usage).To(Equal("CF_NAME app APP_NAME")) 70 Expect(commandInfo.Flags).To(HaveLen(1)) 71 Expect(commandInfo.Flags).To(ContainElement(CommandFlag{ 72 Short: "", 73 Long: "guid", 74 Description: "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", 75 Default: "some-default", 76 })) 77 Expect(commandInfo.RelatedCommands).To(Equal([]string{ 78 "apps", "events", "logs", "map-route", "push", "unmap-route", 79 })) 80 }) 81 82 When("the command uses timeout environment variables", func() { 83 It("has timeout environment variables", func() { 84 commandInfo, err := actor.CommandInfoByName(commandList{}, "restage") 85 Expect(err).NotTo(HaveOccurred()) 86 87 Expect(commandInfo.Environment).To(ConsistOf( 88 EnvironmentVariable{ 89 Name: "CF_STAGING_TIMEOUT", 90 Description: "Max wait time for buildpack staging, in minutes", 91 DefaultValue: "15", 92 }, 93 EnvironmentVariable{ 94 Name: "CF_STARTUP_TIMEOUT", 95 Description: "Max wait time for app instance startup, in minutes", 96 DefaultValue: "5", 97 })) 98 }) 99 }) 100 101 When("the command does not use environment variables", func() { 102 It("does not have environment variables", func() { 103 commandInfo, err := actor.CommandInfoByName(commandList{}, "app") 104 Expect(err).NotTo(HaveOccurred()) 105 106 Expect(commandInfo.Environment).To(BeEmpty()) 107 }) 108 }) 109 110 When("the command has a Usage() method", func() { 111 It("retrieves the usage text from the method", func() { 112 commandInfo, err := actor.CommandInfoByName(commandList{}, "fancy") 113 Expect(err).NotTo(HaveOccurred()) 114 115 Expect(commandInfo.Usage).To(Equal("Usage line 1\n Usage line 2")) 116 }) 117 }) 118 119 When("the command has a Examples() method", func() { 120 It("retrieves the examples text from the method", func() { 121 commandInfo, err := actor.CommandInfoByName(commandList{}, "fancy") 122 Expect(err).NotTo(HaveOccurred()) 123 124 Expect(commandInfo.Examples).To(Equal("Examples line 1\n Examples line 2")) 125 }) 126 }) 127 }) 128 129 When("passed the command alias", func() { 130 It("returns command info", func() { 131 commandInfo, err := actor.CommandInfoByName(commandList{}, "h") 132 Expect(err).NotTo(HaveOccurred()) 133 134 Expect(commandInfo.Name).To(Equal("help")) 135 Expect(commandInfo.Description).To(Equal("Show help")) 136 Expect(commandInfo.Alias).To(Equal("h")) 137 Expect(commandInfo.Usage).To(Equal("CF_NAME help [COMMAND]")) 138 Expect(commandInfo.Flags).To(ConsistOf( 139 CommandFlag{ 140 Short: "a", 141 Long: "", 142 Description: "All available CLI commands", 143 }, 144 )) 145 }) 146 }) 147 }) 148 149 When("the command does not exist", func() { 150 It("returns err", func() { 151 _, err := actor.CommandInfoByName(commandList{}, "does-not-exist") 152 153 Expect(err).To(HaveOccurred()) 154 Expect(err).To(MatchError(actionerror.InvalidCommandError{CommandName: "does-not-exist"})) 155 }) 156 }) 157 }) 158 159 Describe("CommandInfos", func() { 160 It("returns back all the command's names and descriptions", func() { 161 commands := actor.CommandInfos(commandList{}) 162 163 Expect(commands["app"]).To(Equal(CommandInfo{ 164 Name: "app", 165 Description: "Display health and status for an app", 166 })) 167 Expect(commands["help"]).To(Equal(CommandInfo{ 168 Name: "help", 169 Description: "Show help", 170 Alias: "h", 171 })) 172 Expect(commands["restage"]).To(Equal(CommandInfo{ 173 Name: "restage", 174 Description: "Restage an app", 175 Alias: "rg", 176 })) 177 }) 178 }) 179 })