github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/application/setseries_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package application_test 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/cmd/cmdtesting" 9 "github.com/juju/errors" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/cmd/juju/application" 15 "github.com/juju/juju/jujuclient/jujuclienttesting" 16 ) 17 18 type setSeriesSuite struct { 19 testing.IsolationSuite 20 mockApplicationAPI *mockSetApplicationSeriesAPI 21 } 22 23 var _ = gc.Suite(&setSeriesSuite{}) 24 25 func (s *setSeriesSuite) SetUpTest(c *gc.C) { 26 s.IsolationSuite.SetUpTest(c) 27 s.mockApplicationAPI = &mockSetApplicationSeriesAPI{Stub: &testing.Stub{}} 28 s.mockApplicationAPI.apiVersion = 5 29 } 30 31 func (s *setSeriesSuite) runUpdateSeries(c *gc.C, args ...string) (*cmd.Context, error) { 32 store := jujuclienttesting.MinimalStore() 33 return cmdtesting.RunCommand(c, application.NewSetSeriesCommandForTest(s.mockApplicationAPI, store), args...) 34 } 35 36 func (s *setSeriesSuite) TestSetSeriesApplicationGoodPath(c *gc.C) { 37 _, err := s.runUpdateSeries(c, "ghost", "xenial") 38 c.Assert(err, jc.ErrorIsNil) 39 s.mockApplicationAPI.CheckCall(c, 0, "UpdateApplicationSeries", "ghost", "xenial", false) 40 } 41 42 func (s *setSeriesSuite) TestSetSeriesApplicationGoodPathForce(c *gc.C) { 43 _, err := s.runUpdateSeries(c, "--force", "ghost", "xenial") 44 c.Assert(err, jc.ErrorIsNil) 45 s.mockApplicationAPI.CheckCall(c, 0, "UpdateApplicationSeries", "ghost", "xenial", true) 46 } 47 48 func (s *setSeriesSuite) TestNoArguments(c *gc.C) { 49 _, err := s.runUpdateSeries(c) 50 c.Assert(err, gc.ErrorMatches, "application name and series required") 51 } 52 53 func (s *setSeriesSuite) TestArgumentsSeriesOnly(c *gc.C) { 54 _, err := s.runUpdateSeries(c, "ghost") 55 c.Assert(err, gc.ErrorMatches, "no series specified") 56 } 57 58 func (s *setSeriesSuite) TestArgumentsApplicationOnly(c *gc.C) { 59 _, err := s.runUpdateSeries(c, "xenial") 60 c.Assert(err, gc.ErrorMatches, "no application name") 61 } 62 63 func (s *setSeriesSuite) TestTooManyArguments(c *gc.C) { 64 _, err := s.runUpdateSeries(c, "ghost", "xenial", "something else") 65 c.Assert(err, gc.ErrorMatches, `unrecognized args: \["something else"\]`, gc.Commentf("details: %s", errors.Details(err))) 66 } 67 68 func (s *setSeriesSuite) TestOldAPI(c *gc.C) { 69 s.mockApplicationAPI.apiVersion = 4 70 _, err := s.runUpdateSeries(c, "ghost", "xenial") 71 c.Assert(err, gc.ErrorMatches, "setting the application series is not supported by this API server") 72 } 73 74 type mockSetApplicationSeriesAPI struct { 75 *testing.Stub 76 apiVersion int 77 } 78 79 func (a *mockSetApplicationSeriesAPI) Close() error { 80 a.MethodCall(a, "Close") 81 return a.NextErr() 82 } 83 84 func (a *mockSetApplicationSeriesAPI) BestAPIVersion() int { 85 return a.apiVersion 86 } 87 88 func (a *mockSetApplicationSeriesAPI) UpdateApplicationSeries(appName, series string, force bool) error { 89 a.MethodCall(a, "UpdateApplicationSeries", appName, series, force) 90 return a.NextErr() 91 }