launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/cmd/juju/switch_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"os"
     8  
     9  	gc "launchpad.net/gocheck"
    10  
    11  	"launchpad.net/juju-core/cmd"
    12  	_ "launchpad.net/juju-core/juju"
    13  	"launchpad.net/juju-core/testing"
    14  )
    15  
    16  type SwitchSimpleSuite struct {
    17  }
    18  
    19  var _ = gc.Suite(&SwitchSimpleSuite{})
    20  
    21  func (*SwitchSimpleSuite) TestNoEnvironment(c *gc.C) {
    22  	defer testing.MakeEmptyFakeHome(c).Restore()
    23  	_, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    24  	c.Assert(err, gc.ErrorMatches, "couldn't read the environment")
    25  }
    26  
    27  func (*SwitchSimpleSuite) TestNoDefault(c *gc.C) {
    28  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfigNoDefault).Restore()
    29  	_, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    30  	c.Assert(err, gc.ErrorMatches, "no currently specified environment")
    31  }
    32  
    33  func (*SwitchSimpleSuite) TestShowsDefault(c *gc.C) {
    34  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    35  	context, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    36  	c.Assert(err, gc.IsNil)
    37  	c.Assert(testing.Stdout(context), gc.Equals, "erewhemos\n")
    38  }
    39  
    40  func (*SwitchSimpleSuite) TestCurrentEnvironmentHasPrecidence(c *gc.C) {
    41  	home := testing.MakeFakeHome(c, testing.MultipleEnvConfig)
    42  	defer home.Restore()
    43  	home.AddFiles(c, []testing.TestFile{{".juju/current-environment", "fubar"}})
    44  	context, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    45  	c.Assert(err, gc.IsNil)
    46  	c.Assert(testing.Stdout(context), gc.Equals, "fubar\n")
    47  }
    48  
    49  func (*SwitchSimpleSuite) TestShowsJujuEnv(c *gc.C) {
    50  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    51  	os.Setenv("JUJU_ENV", "using-env")
    52  	context, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    53  	c.Assert(err, gc.IsNil)
    54  	c.Assert(testing.Stdout(context), gc.Equals, "using-env\n")
    55  }
    56  
    57  func (*SwitchSimpleSuite) TestJujuEnvOverCurrentEnvironment(c *gc.C) {
    58  	home := testing.MakeFakeHome(c, testing.MultipleEnvConfig)
    59  	defer home.Restore()
    60  	home.AddFiles(c, []testing.TestFile{{".juju/current-environment", "fubar"}})
    61  	os.Setenv("JUJU_ENV", "using-env")
    62  	context, err := testing.RunCommand(c, &SwitchCommand{}, nil)
    63  	c.Assert(err, gc.IsNil)
    64  	c.Assert(testing.Stdout(context), gc.Equals, "using-env\n")
    65  }
    66  
    67  func (*SwitchSimpleSuite) TestSettingWritesFile(c *gc.C) {
    68  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    69  	context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"erewhemos-2"})
    70  	c.Assert(err, gc.IsNil)
    71  	c.Assert(testing.Stdout(context), gc.Equals, "erewhemos -> erewhemos-2\n")
    72  	c.Assert(cmd.ReadCurrentEnvironment(), gc.Equals, "erewhemos-2")
    73  }
    74  
    75  func (*SwitchSimpleSuite) TestSettingToUnknown(c *gc.C) {
    76  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    77  	_, err := testing.RunCommand(c, &SwitchCommand{}, []string{"unknown"})
    78  	c.Assert(err, gc.ErrorMatches, `"unknown" is not a name of an existing defined environment`)
    79  }
    80  
    81  func (*SwitchSimpleSuite) TestSettingWhenJujuEnvSet(c *gc.C) {
    82  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    83  	os.Setenv("JUJU_ENV", "using-env")
    84  	_, err := testing.RunCommand(c, &SwitchCommand{}, []string{"erewhemos-2"})
    85  	c.Assert(err, gc.ErrorMatches, `cannot switch when JUJU_ENV is overriding the environment \(set to "using-env"\)`)
    86  }
    87  
    88  const expectedEnvironments = `erewhemos
    89  erewhemos-2
    90  `
    91  
    92  func (*SwitchSimpleSuite) TestListEnvironments(c *gc.C) {
    93  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
    94  	context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list"})
    95  	c.Assert(err, gc.IsNil)
    96  	c.Assert(testing.Stdout(context), gc.Equals, expectedEnvironments)
    97  }
    98  
    99  func (*SwitchSimpleSuite) TestListEnvironmentsOSJujuEnvSet(c *gc.C) {
   100  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
   101  	os.Setenv("JUJU_ENV", "using-env")
   102  	context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list"})
   103  	c.Assert(err, gc.IsNil)
   104  	c.Assert(testing.Stdout(context), gc.Equals, expectedEnvironments)
   105  }
   106  
   107  func (*SwitchSimpleSuite) TestListEnvironmentsAndChange(c *gc.C) {
   108  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
   109  	_, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list", "erewhemos-2"})
   110  	c.Assert(err, gc.ErrorMatches, "cannot switch and list at the same time")
   111  }
   112  
   113  func (*SwitchSimpleSuite) TestTooManyParams(c *gc.C) {
   114  	defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore()
   115  	_, err := testing.RunCommand(c, &SwitchCommand{}, []string{"foo", "bar"})
   116  	c.Assert(err, gc.ErrorMatches, `unrecognized args: ."bar".`)
   117  }