Describe("Locating binary file", func() { Describe("install from plugin repository when '-r' provided", func() { Context("gets metadata of the plugin from repo", func() { Context("when repo is not found in config", func() { It("informs user repo is not found", func() { runCommand("plugin1", "-r", "repo1", "-f") Expect(ui.Outputs()).To(ContainSubstrings([]string{"Looking up 'plugin1' from repository 'repo1'"})) Expect(ui.Outputs()).To(ContainSubstrings([]string{"repo1 not found"})) }) }) Context("when repo is found in config", func() { Context("when repo endpoint returns an error", func() { It("informs user about the error", func() { config.SetPluginRepo(models.PluginRepo{Name: "repo1", URL: ""}) fakePluginRepo.GetPluginsReturns(nil, []string{"repo error1"}) runCommand("plugin1", "-r", "repo1", "-f") Expect(ui.Outputs()).To(ContainSubstrings([]string{"Error getting plugin metadata from repo"})) Expect(ui.Outputs()).To(ContainSubstrings([]string{"repo error1"})) }) }) Context("when plugin metadata is available and desired plugin is not found", func() { It("informs user about the error", func() { config.SetPluginRepo(models.PluginRepo{Name: "repo1", URL: ""}) fakePluginRepo.GetPluginsReturns(nil, nil) runCommand("plugin1", "-r", "repo1", "-f") Expect(ui.Outputs()).To(ContainSubstrings([]string{"plugin1 is not available in repo 'repo1'"}))
commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("list-plugin-repos").SetDependency(deps, pluginCall)) } BeforeEach(func() { ui = &testterm.FakeUI{} requirementsFactory = new(requirementsfakes.FakeFactory) config = testconfig.NewRepositoryWithDefaults() }) var callListPluginRepos = func(args ...string) bool { return testcmd.RunCLICommand("list-plugin-repos", args, requirementsFactory, updateCommandDependency, false, ui) } It("lists all added plugin repo in a table", func() { config.SetPluginRepo(models.PluginRepo{ Name: "repo1", URL: "http://url1.com", }) config.SetPluginRepo(models.PluginRepo{ Name: "repo2", URL: "http://url2.com", }) callListPluginRepos() Expect(ui.Outputs()).To(ContainSubstrings( []string{"repo1", "http://url1.com"}, []string{"repo2", "http://url2.com"}, )) })
} BeforeEach(func() { ui = &testterm.FakeUI{} requirementsFactory = new(requirementsfakes.FakeFactory) config = testconfig.NewRepositoryWithDefaults() }) var callRemovePluginRepo = func(args ...string) bool { return testcmd.RunCLICommand("remove-plugin-repo", args, requirementsFactory, updateCommandDependency, false, ui) } Context("When repo name is valid", func() { BeforeEach(func() { config.SetPluginRepo(models.PluginRepo{ Name: "repo1", URL: "http://someserver1.com:1234", }) config.SetPluginRepo(models.PluginRepo{ Name: "repo2", URL: "http://server2.org:8080", }) }) It("deletes the repo from the config", func() { callRemovePluginRepo("repo1") Expect(len(config.PluginRepos())).To(Equal(1)) Expect(config.PluginRepos()[0].Name).To(Equal("repo2")) Expect(config.PluginRepos()[0].URL).To(Equal("http://server2.org:8080")) }) })
organization := models.OrganizationFields{Name: "the-org"} config.SetOrganizationFields(organization) Expect(config.OrganizationFields()).To(Equal(organization)) space := models.SpaceFields{Name: "the-space"} config.SetSpaceFields(space) Expect(config.SpaceFields()).To(Equal(space)) config.SetSSLDisabled(false) Expect(config.IsSSLDisabled()).To(BeFalse()) config.SetLocale("en_US") Expect(config.Locale()).To(Equal("en_US")) config.SetPluginRepo(models.PluginRepo{Name: "repo", URL: "nowhere.com"}) Expect(config.PluginRepos()[0].Name).To(Equal("repo")) Expect(config.PluginRepos()[0].URL).To(Equal("nowhere.com")) s, _ := semver.Make("3.1") Expect(config.IsMinAPIVersion(s)).To(Equal(false)) config.SetMinCLIVersion("6.5.0") Expect(config.MinCLIVersion()).To(Equal("6.5.0")) config.SetMinRecommendedCLIVersion("6.9.0") Expect(config.MinRecommendedCLIVersion()).To(Equal("6.9.0")) }) Describe("HasAPIEndpoint", func() { Context("when both endpoint and version are set", func() {
AfterEach(func() { testServer.Close() }) It("saves the repo url into config", func() { callAddPluginRepo([]string{"repo", testServer.URL}) Expect(config.PluginRepos()[0].Name).To(Equal("repo")) Expect(config.PluginRepos()[0].URL).To(Equal(testServer.URL)) }) }) Context("repo name already existing", func() { BeforeEach(func() { config.SetPluginRepo(models.PluginRepo{Name: "repo", URL: "http://repo.com"}) }) It("informs user of the already existing repo", func() { callAddPluginRepo([]string{"repo", "http://repo2.com"}) Expect(ui.Outputs()).To(ContainSubstrings( []string{"Plugin repo named \"repo\"", " already exists"}, )) }) }) Context("repo address already existing", func() { BeforeEach(func() { config.SetPluginRepo(models.PluginRepo{Name: "repo1", URL: "http://repo.com"})
}) var callRepoPlugins = func(args ...string) error { err := flagContext.Parse(args...) if err != nil { return err } cmd.Execute(flagContext) return nil } Context("when using the default CF-Community repo", func() { BeforeEach(func() { config.SetPluginRepo(models.PluginRepo{ Name: "cf", URL: "http://plugins.cloudfoundry.org", }) }) It("uses https when pointing to plugins.cloudfoundry.org", func() { err := callRepoPlugins() Expect(err).NotTo(HaveOccurred()) Expect(fakePluginRepo.GetPluginsCallCount()).To(Equal(1)) Expect(fakePluginRepo.GetPluginsArgsForCall(0)[0].Name).To(Equal("cf")) Expect(fakePluginRepo.GetPluginsArgsForCall(0)[0].URL).To(Equal("https://plugins.cloudfoundry.org")) Expect(len(fakePluginRepo.GetPluginsArgsForCall(0))).To(Equal(1)) }) }) Context("when using other plugin repos", func() {