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 }