github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/plugins/juju-metadata/deleteimage_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "github.com/juju/cmd/cmdtesting" 8 "github.com/juju/errors" 9 gitjujutesting "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/cmd/modelcmd" 14 "github.com/juju/juju/jujuclient/jujuclienttesting" 15 ) 16 17 const deleteTestId = "tst12345" 18 19 type deleteImageSuite struct { 20 BaseCloudImageMetadataSuite 21 22 mockAPI *mockDeleteAPI 23 24 deletedIds []string 25 } 26 27 var _ = gc.Suite(&deleteImageSuite{}) 28 29 func (s *deleteImageSuite) SetUpTest(c *gc.C) { 30 s.BaseCloudImageMetadataSuite.SetUpTest(c) 31 32 s.deletedIds = []string{} 33 s.mockAPI = &mockDeleteAPI{ 34 delete: func(imageId string) error { 35 s.deletedIds = append(s.deletedIds, imageId) 36 return nil 37 }, 38 Stub: &gitjujutesting.Stub{}, 39 } 40 } 41 42 func (s *deleteImageSuite) TestDeleteImageMetadata(c *gc.C) { 43 s.assertDeleteImageMetadata(c, deleteTestId) 44 } 45 46 func (s *deleteImageSuite) TestDeleteImageMetadataNoImageId(c *gc.C) { 47 s.assertDeleteImageMetadataErr(c, "image ID must be supplied when deleting image metadata") 48 } 49 50 func (s *deleteImageSuite) TestDeleteImageMetadataManyImageIds(c *gc.C) { 51 s.assertDeleteImageMetadataErr(c, "only one image ID can be supplied as an argument to this command", deleteTestId, deleteTestId) 52 } 53 54 func (s *deleteImageSuite) TestDeleteImageMetadataFailed(c *gc.C) { 55 msg := "failed" 56 s.mockAPI.delete = func(imageId string) error { 57 return errors.New(msg) 58 } 59 s.assertDeleteImageMetadataErr(c, msg, deleteTestId) 60 s.mockAPI.CheckCallNames(c, "Delete", "Close") 61 } 62 63 func (s *deleteImageSuite) runDeleteImageMetadata(c *gc.C, args ...string) error { 64 tstDelete := &deleteImageMetadataCommand{} 65 tstDelete.SetClientStore(jujuclienttesting.MinimalStore()) 66 tstDelete.newAPIFunc = func() (MetadataDeleteAPI, error) { 67 return s.mockAPI, nil 68 } 69 deleteCmd := modelcmd.Wrap(tstDelete) 70 71 _, err := cmdtesting.RunCommand(c, deleteCmd, args...) 72 return err 73 } 74 75 func (s *deleteImageSuite) assertDeleteImageMetadata(c *gc.C, id string) { 76 err := s.runDeleteImageMetadata(c, id) 77 c.Assert(err, jc.ErrorIsNil) 78 c.Assert(s.deletedIds, gc.DeepEquals, []string{id}) 79 s.mockAPI.CheckCallNames(c, "Delete", "Close") 80 } 81 82 func (s *deleteImageSuite) assertDeleteImageMetadataErr(c *gc.C, errorMsg string, args ...string) { 83 err := s.runDeleteImageMetadata(c, args...) 84 c.Assert(err, gc.ErrorMatches, errorMsg) 85 c.Assert(s.deletedIds, gc.DeepEquals, []string{}) 86 } 87 88 type mockDeleteAPI struct { 89 *gitjujutesting.Stub 90 91 delete func(imageId string) error 92 } 93 94 func (s mockDeleteAPI) Close() error { 95 s.MethodCall(s, "Close") 96 return nil 97 } 98 99 func (s mockDeleteAPI) Delete(imageId string) error { 100 s.MethodCall(s, "Delete", imageId) 101 return s.delete(imageId) 102 }