github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/command/plugin/add_plugin_repo_command_test.go (about) 1 package plugin_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/command/commandfakes" 6 . "code.cloudfoundry.org/cli/command/plugin" 7 "code.cloudfoundry.org/cli/command/plugin/pluginfakes" 8 "code.cloudfoundry.org/cli/util/ui" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/gbytes" 12 ) 13 14 var _ = Describe("add-plugin-repo command", func() { 15 var ( 16 cmd AddPluginRepoCommand 17 testUI *ui.UI 18 fakeConfig *commandfakes.FakeConfig 19 fakeActor *pluginfakes.FakeAddPluginRepoActor 20 executeErr error 21 ) 22 23 BeforeEach(func() { 24 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 25 fakeConfig = new(commandfakes.FakeConfig) 26 fakeActor = new(pluginfakes.FakeAddPluginRepoActor) 27 cmd = AddPluginRepoCommand{UI: testUI, Config: fakeConfig, Actor: fakeActor} 28 }) 29 30 JustBeforeEach(func() { 31 executeErr = cmd.Execute(nil) 32 }) 33 34 Context("when the provided repo name already exists", func() { 35 BeforeEach(func() { 36 cmd.RequiredArgs.PluginRepoName = "some-repo" 37 cmd.RequiredArgs.PluginRepoURL = "some-repo-URL" 38 fakeActor.AddPluginRepositoryReturns(actionerror.RepositoryNameTakenError{Name: "some-repo"}) 39 }) 40 41 It("returns RepositoryNameTakenError", func() { 42 Expect(executeErr).To(MatchError(actionerror.RepositoryNameTakenError{Name: "some-repo"})) 43 }) 44 }) 45 46 Context("when the provided repo name and URL already exist in the same repo", func() { 47 BeforeEach(func() { 48 cmd.RequiredArgs.PluginRepoName = "some-repo" 49 cmd.RequiredArgs.PluginRepoURL = "some-repo-URL" 50 fakeActor.AddPluginRepositoryReturns(actionerror.RepositoryAlreadyExistsError{Name: "some-repo", URL: "https://some-repo-URL"}) 51 }) 52 53 It("displays a message that the repo is already registered and does not return an error", func() { 54 Expect(executeErr).ToNot(HaveOccurred()) 55 56 Expect(testUI.Out).To(Say("https://some-repo-URL already registered as some-repo")) 57 58 Expect(fakeActor.AddPluginRepositoryCallCount()).To(Equal(1)) 59 repoName, repoURL := fakeActor.AddPluginRepositoryArgsForCall(0) 60 Expect(repoName).To(Equal("some-repo")) 61 Expect(repoURL).To(Equal("some-repo-URL")) 62 }) 63 }) 64 65 Context("when an AddPluginRepositoryError is encountered", func() { 66 BeforeEach(func() { 67 cmd.RequiredArgs.PluginRepoName = "some-repo" 68 cmd.RequiredArgs.PluginRepoURL = "some-URL" 69 fakeActor.AddPluginRepositoryReturns(actionerror.AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"}) 70 }) 71 72 It("handles the error", func() { 73 Expect(executeErr).To(MatchError(actionerror.AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"})) 74 }) 75 }) 76 77 Context("when no errors are encountered", func() { 78 BeforeEach(func() { 79 cmd.RequiredArgs.PluginRepoName = "some-repo" 80 cmd.RequiredArgs.PluginRepoURL = "https://some-repo-URL" 81 fakeActor.AddPluginRepositoryReturns(nil) 82 }) 83 84 It("adds the plugin repo", func() { 85 Expect(executeErr).ToNot(HaveOccurred()) 86 87 Expect(testUI.Out).To(Say("https://some-repo-URL added as some-repo")) 88 89 Expect(fakeActor.AddPluginRepositoryCallCount()).To(Equal(1)) 90 repoName, repoURL := fakeActor.AddPluginRepositoryArgsForCall(0) 91 Expect(repoName).To(Equal("some-repo")) 92 Expect(repoURL).To(Equal("https://some-repo-URL")) 93 }) 94 }) 95 })