github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+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  	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  	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  	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  	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  })