github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/user/whoami_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package user_test
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/cmd/cmdtesting"
     9  	"github.com/juju/errors"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/cmd/juju/user"
    14  	"github.com/juju/juju/core/model"
    15  	"github.com/juju/juju/jujuclient"
    16  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type WhoAmITestSuite struct {
    21  	testing.BaseSuite
    22  	store          jujuclient.ClientStore
    23  	expectedOutput string
    24  	expectedErr    string
    25  }
    26  
    27  var _ = gc.Suite(&WhoAmITestSuite{})
    28  
    29  func (s *WhoAmITestSuite) TestEmptyStore(c *gc.C) {
    30  	s.expectedOutput = `
    31  There is no current controller.
    32  Run juju list-controllers to see available controllers.
    33  `[1:]
    34  
    35  	s.store = jujuclient.NewMemStore()
    36  	s.assertWhoAmI(c)
    37  }
    38  
    39  func (s *WhoAmITestSuite) TestNoCurrentController(c *gc.C) {
    40  	s.expectedOutput = `
    41  There is no current controller.
    42  Run juju list-controllers to see available controllers.
    43  `[1:]
    44  
    45  	s.store = &jujuclient.MemStore{
    46  		Controllers: map[string]jujuclient.ControllerDetails{
    47  			"controller": {},
    48  		},
    49  	}
    50  	s.assertWhoAmI(c)
    51  }
    52  
    53  func (s *WhoAmITestSuite) TestNoCurrentModel(c *gc.C) {
    54  	s.expectedOutput = `
    55  Controller:  controller
    56  Model:       <no-current-model>
    57  User:        admin
    58  `[1:]
    59  
    60  	s.store = &jujuclient.MemStore{
    61  		CurrentControllerName: "controller",
    62  		Controllers: map[string]jujuclient.ControllerDetails{
    63  			"controller": {},
    64  		},
    65  		Models: map[string]*jujuclient.ControllerModels{
    66  			"controller": {
    67  				Models: map[string]jujuclient.ModelDetails{
    68  					"admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS},
    69  				},
    70  			},
    71  		},
    72  		Accounts: map[string]jujuclient.AccountDetails{
    73  			"controller": {
    74  				User: "admin",
    75  			},
    76  		},
    77  	}
    78  	s.assertWhoAmI(c)
    79  }
    80  
    81  func (s *WhoAmITestSuite) TestNoCurrentUser(c *gc.C) {
    82  	s.expectedOutput = `
    83  You are not logged in to controller "controller" and model "admin/model".
    84  Run juju login if you want to login.
    85  `[1:]
    86  
    87  	s.store = &jujuclient.MemStore{
    88  		CurrentControllerName: "controller",
    89  		Controllers: map[string]jujuclient.ControllerDetails{
    90  			"controller": {},
    91  		},
    92  		Models: map[string]*jujuclient.ControllerModels{
    93  			"controller": {
    94  				Models: map[string]jujuclient.ModelDetails{
    95  					"admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS},
    96  				},
    97  				CurrentModel: "admin/model",
    98  			},
    99  		},
   100  	}
   101  	s.assertWhoAmI(c)
   102  }
   103  
   104  func (s *WhoAmITestSuite) assertWhoAmIForUser(c *gc.C, user, format string) {
   105  	s.store = &jujuclient.MemStore{
   106  		CurrentControllerName: "controller",
   107  		Controllers: map[string]jujuclient.ControllerDetails{
   108  			"controller": {},
   109  		},
   110  		Models: map[string]*jujuclient.ControllerModels{
   111  			"controller": {
   112  				Models: map[string]jujuclient.ModelDetails{
   113  					"admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS},
   114  				},
   115  				CurrentModel: "admin/model",
   116  			},
   117  		},
   118  		Accounts: map[string]jujuclient.AccountDetails{
   119  			"controller": {
   120  				User: user,
   121  			},
   122  		},
   123  	}
   124  	s.assertWhoAmI(c, "--format", format)
   125  }
   126  
   127  func (s *WhoAmITestSuite) TestWhoAmISameUser(c *gc.C) {
   128  	s.expectedOutput = `
   129  Controller:  controller
   130  Model:       model
   131  User:        admin
   132  `[1:]
   133  	s.assertWhoAmIForUser(c, "admin", "tabular")
   134  }
   135  
   136  func (s *WhoAmITestSuite) TestWhoAmIYaml(c *gc.C) {
   137  	s.expectedOutput = `
   138  controller: controller
   139  model: model
   140  user: admin
   141  `[1:]
   142  	s.assertWhoAmIForUser(c, "admin", "yaml")
   143  }
   144  
   145  func (s *WhoAmITestSuite) TestWhoAmIJson(c *gc.C) {
   146  	s.expectedOutput = `
   147  {"controller":"controller","model":"model","user":"admin"}
   148  `[1:]
   149  	s.assertWhoAmIForUser(c, "admin", "json")
   150  }
   151  
   152  func (s *WhoAmITestSuite) TestWhoAmIDifferentUsersModel(c *gc.C) {
   153  	s.expectedOutput = `
   154  Controller:  controller
   155  Model:       admin/model
   156  User:        bob
   157  `[1:]
   158  	s.assertWhoAmIForUser(c, "bob", "tabular")
   159  }
   160  
   161  func (s *WhoAmITestSuite) TestFromStoreErr(c *gc.C) {
   162  	msg := "fail getting current controller"
   163  	errStore := jujuclienttesting.NewStubStore()
   164  	errStore.SetErrors(errors.New(msg))
   165  	s.store = errStore
   166  	s.expectedErr = msg
   167  	s.assertWhoAmIFailed(c)
   168  	errStore.CheckCallNames(c, "CurrentController")
   169  }
   170  
   171  func (s *WhoAmITestSuite) runWhoAmI(c *gc.C, args ...string) (*cmd.Context, error) {
   172  	return cmdtesting.RunCommand(c, user.NewWhoAmICommandForTest(s.store), args...)
   173  }
   174  
   175  func (s *WhoAmITestSuite) assertWhoAmIFailed(c *gc.C, args ...string) {
   176  	_, err := s.runWhoAmI(c, args...)
   177  	c.Assert(err, gc.ErrorMatches, s.expectedErr)
   178  }
   179  
   180  func (s *WhoAmITestSuite) assertWhoAmI(c *gc.C, args ...string) string {
   181  	context, err := s.runWhoAmI(c, args...)
   182  	c.Assert(err, jc.ErrorIsNil)
   183  	output := cmdtesting.Stdout(context)
   184  	if output == "" {
   185  		output = cmdtesting.Stderr(context)
   186  	}
   187  	if s.expectedOutput != "" {
   188  		c.Assert(output, gc.Equals, s.expectedOutput)
   189  	}
   190  	return output
   191  }