github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/modelcmd/base_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelcmd_test
     5  
     6  import (
     7  	"strings"
     8  
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/errors"
    12  	"github.com/juju/juju/api"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/cmd/modelcmd"
    15  	"github.com/juju/juju/jujuclient"
    16  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type BaseCommandSuite struct {
    21  	testing.FakeJujuXDGDataHomeSuite
    22  	store *jujuclienttesting.MemStore
    23  }
    24  
    25  var _ = gc.Suite(&BaseCommandSuite{})
    26  
    27  func (s *BaseCommandSuite) SetUpTest(c *gc.C) {
    28  	s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
    29  
    30  	s.store = jujuclienttesting.NewMemStore()
    31  	s.store.CurrentControllerName = "foo"
    32  	s.store.Controllers["foo"] = jujuclient.ControllerDetails{
    33  		APIEndpoints: []string{"testing.invalid:1234"},
    34  	}
    35  	s.store.Models["foo"] = &jujuclient.ControllerModels{
    36  		Models: map[string]jujuclient.ModelDetails{
    37  			"admin/badmodel":  {"deadbeef"},
    38  			"admin/goodmodel": {"deadbeef2"},
    39  		},
    40  		CurrentModel: "admin/badmodel",
    41  	}
    42  	s.store.Accounts["foo"] = jujuclient.AccountDetails{
    43  		User: "bar", Password: "hunter2",
    44  	}
    45  }
    46  
    47  func (s *BaseCommandSuite) assertUnknownModel(c *gc.C, current, expectedCurrent string) {
    48  	s.store.Models["foo"].CurrentModel = current
    49  	apiOpen := func(*api.Info, api.DialOpts) (api.Connection, error) {
    50  		return nil, errors.Trace(&params.Error{Code: params.CodeModelNotFound, Message: "model deaddeaf not found"})
    51  	}
    52  	cmd := modelcmd.NewModelCommandBase(s.store, "foo", "admin/badmodel")
    53  	cmd.SetAPIOpen(apiOpen)
    54  	conn, err := cmd.NewAPIRoot()
    55  	c.Assert(conn, gc.IsNil)
    56  	msg := strings.Replace(err.Error(), "\n", "", -1)
    57  	c.Assert(msg, gc.Equals, `model "admin/badmodel" has been removed from the controller, run 'juju models' and switch to one of them.There are 1 accessible models on controller "foo".`)
    58  	c.Assert(s.store.Models["foo"].Models, gc.HasLen, 1)
    59  	c.Assert(s.store.Models["foo"].Models["admin/goodmodel"], gc.DeepEquals, jujuclient.ModelDetails{"deadbeef2"})
    60  	c.Assert(s.store.Models["foo"].CurrentModel, gc.Equals, expectedCurrent)
    61  }
    62  
    63  func (s *BaseCommandSuite) TestUnknownModel(c *gc.C) {
    64  	s.assertUnknownModel(c, "admin/badmodel", "")
    65  }
    66  
    67  func (s *BaseCommandSuite) TestUnknownModelNotCurrent(c *gc.C) {
    68  	s.assertUnknownModel(c, "admin/goodmodel", "admin/goodmodel")
    69  }