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  }