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  }