github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/common/errors_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "bytes" 8 9 "github.com/juju/errors" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 "gopkg.in/macaroon-bakery.v2-unstable/httpbakery" 14 15 "github.com/juju/juju/cmd/juju/common" 16 ) 17 18 type errorsSuite struct { 19 testing.IsolationSuite 20 } 21 22 var _ = gc.Suite(&errorsSuite{}) 23 24 func (s *errorsSuite) TestTermsRequiredPassThru(c *gc.C) { 25 err := errors.New("nothing about terms") 26 c.Assert(err, gc.Equals, common.MaybeTermsAgreementError(err)) 27 } 28 29 func (s *errorsSuite) TestBakeryNonTerms(c *gc.C) { 30 err := &httpbakery.DischargeError{Reason: &httpbakery.Error{ 31 Code: "bad cookie", 32 }} 33 c.Assert(err, gc.Equals, common.MaybeTermsAgreementError(err)) 34 err = &httpbakery.DischargeError{Reason: &httpbakery.Error{ 35 Code: "term agreement required", 36 Message: "but terms not specified in message", 37 }} 38 c.Assert(err, gc.Equals, common.MaybeTermsAgreementError(err)) 39 } 40 41 func (s *errorsSuite) TestSingleTermRequired(c *gc.C) { 42 err := &httpbakery.DischargeError{Reason: &httpbakery.Error{ 43 Code: "term agreement required", 44 Message: "term agreement required: foo/1", 45 }} 46 termErr, ok := common.MaybeTermsAgreementError(err).(*common.TermsRequiredError) 47 c.Assert(ok, jc.IsTrue, gc.Commentf("failed to match common.TermsRequiredError")) 48 c.Assert(termErr, gc.ErrorMatches, `.*please agree to terms "foo/1".*`) 49 c.Assert(termErr.UserErr(), gc.ErrorMatches, 50 `.*Declined: some terms require agreement. Try: "juju agree foo/1".*`) 51 } 52 53 func (s *errorsSuite) TestMultipleTermsRequired(c *gc.C) { 54 err := &httpbakery.DischargeError{Reason: &httpbakery.Error{ 55 Code: "term agreement required", 56 Message: "term agreement required: foo/1 bar/2", 57 }} 58 termErr, ok := common.MaybeTermsAgreementError(err).(*common.TermsRequiredError) 59 c.Assert(ok, jc.IsTrue, gc.Commentf("failed to match common.TermsRequiredError")) 60 c.Assert(termErr, gc.ErrorMatches, `.*please agree to terms "foo/1 bar/2".*`) 61 c.Assert(termErr.UserErr(), gc.ErrorMatches, 62 `.*Declined: some terms require agreement. Try: "juju agree foo/1 bar/2".*`) 63 } 64 65 func (s *errorsSuite) TestPermissionsMessage(c *gc.C) { 66 var buf bytes.Buffer 67 common.PermissionsMessage(&buf, "bork") 68 c.Assert(buf.String(), jc.Contains, `You do not have permission to bork.`) 69 buf.Reset() 70 common.PermissionsMessage(&buf, "") 71 c.Assert(buf.String(), jc.Contains, `You do not have permission to complete this operation.`) 72 }