github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/charms/list_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package charms_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/cmd/envcmd"
    12  	"github.com/juju/juju/cmd/juju/charms"
    13  	"github.com/juju/juju/testing"
    14  )
    15  
    16  // This suite provides basic tests for the "charms list" command.
    17  type CharmsListCommandSuite struct {
    18  	BaseSuite
    19  	mockAPI *mockListAPI
    20  }
    21  
    22  var _ = gc.Suite(&CharmsListCommandSuite{})
    23  
    24  func (s *CharmsListCommandSuite) SetUpTest(c *gc.C) {
    25  	s.BaseSuite.SetUpTest(c)
    26  	s.mockAPI = &mockListAPI{}
    27  	s.PatchValue(charms.GetCharmsListAPI, func(c *charms.ListCommand) (charms.CharmsListAPI, error) {
    28  		return s.mockAPI, nil
    29  	})
    30  }
    31  
    32  func (s *CharmsListCommandSuite) TestListAllCharms(c *gc.C) {
    33  	context, err := testing.RunCommand(c, envcmd.Wrap(&charms.ListCommand{}))
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	c.Assert(testing.Stdout(context), gc.Equals, `- charm
    36  - local:charm
    37  - local:charm--1
    38  - local:charm-1
    39  - local:series/charm
    40  - local:series/charm-3
    41  - local:series/charm-0
    42  - cs:~user/charm
    43  - cs:~user/charm-1
    44  - cs:~user/series/charm
    45  - cs:~user/series/charm-1
    46  - cs:series/charm
    47  - cs:series/charm-3
    48  - cs:series/charm-0
    49  - cs:charm
    50  - cs:charm--1
    51  - cs:charm-1
    52  - charm
    53  - charm-1
    54  - series/charm
    55  - series/charm-1
    56  `)
    57  }
    58  
    59  func (s *CharmsListCommandSuite) TestListNamedCharm(c *gc.C) {
    60  	fewCharms := []string{"charm"}
    61  	context, err := testing.RunCommand(c, envcmd.Wrap(&charms.ListCommand{}), fewCharms...)
    62  	c.Assert(err, jc.ErrorIsNil)
    63  	c.Assert(testing.Stdout(context), gc.Equals, `- charm
    64  `)
    65  }
    66  
    67  func (s *CharmsListCommandSuite) TestListCharmJSON(c *gc.C) {
    68  	args := []string{"--format", "json", "charm"}
    69  	context, err := testing.RunCommand(c, envcmd.Wrap(&charms.ListCommand{}), args...)
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	c.Assert(testing.Stdout(context), gc.Equals, `["charm"]
    72  `)
    73  }
    74  
    75  func (s *CharmsListCommandSuite) TestListError(c *gc.C) {
    76  	s.mockAPI.wantErr = true
    77  	_, err := testing.RunCommand(c, envcmd.Wrap(&charms.ListCommand{}))
    78  	c.Assert(err.Error(), gc.Matches, ".*expected test error.*")
    79  }
    80  
    81  type mockListAPI struct {
    82  	wantErr bool
    83  }
    84  
    85  func (*mockListAPI) Close() error {
    86  	return nil
    87  }
    88  
    89  func (m *mockListAPI) List(names []string) ([]string, error) {
    90  	if m.wantErr {
    91  		return nil, errors.New("expected test error")
    92  	}
    93  	if len(names) > 0 {
    94  		return names, nil
    95  	}
    96  	return []string{"charm",
    97  		"local:charm",
    98  		"local:charm--1",
    99  		"local:charm-1",
   100  		"local:series/charm",
   101  		"local:series/charm-3",
   102  		"local:series/charm-0",
   103  		"cs:~user/charm",
   104  		"cs:~user/charm-1",
   105  		"cs:~user/series/charm",
   106  		"cs:~user/series/charm-1",
   107  		"cs:series/charm",
   108  		"cs:series/charm-3",
   109  		"cs:series/charm-0",
   110  		"cs:charm",
   111  		"cs:charm--1",
   112  		"cs:charm-1",
   113  		"charm",
   114  		"charm-1",
   115  		"series/charm",
   116  		"series/charm-1",
   117  	}, nil
   118  }