github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/credentialmanager/client_test.go (about)

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package credentialmanager_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names/v5"
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/apiserver/common"
    14  	apiservererrors "github.com/juju/juju/apiserver/errors"
    15  	"github.com/juju/juju/apiserver/facades/client/credentialmanager"
    16  	apiservertesting "github.com/juju/juju/apiserver/testing"
    17  	"github.com/juju/juju/rpc/params"
    18  	coretesting "github.com/juju/juju/testing"
    19  )
    20  
    21  type CredentialManagerSuite struct {
    22  	coretesting.BaseSuite
    23  
    24  	resources  *common.Resources
    25  	authorizer apiservertesting.FakeAuthorizer
    26  	backend    *testBackend
    27  
    28  	api *credentialmanager.CredentialManagerAPI
    29  }
    30  
    31  var _ = gc.Suite(&CredentialManagerSuite{})
    32  
    33  func (s *CredentialManagerSuite) SetUpTest(c *gc.C) {
    34  	s.BaseSuite.SetUpTest(c)
    35  	s.backend = newMockBackend()
    36  
    37  	s.resources = common.NewResources()
    38  	s.authorizer = apiservertesting.FakeAuthorizer{
    39  		Tag:      names.NewUserTag("read"),
    40  		AdminTag: names.NewUserTag("admin"),
    41  	}
    42  	s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() })
    43  
    44  	api, err := credentialmanager.NewCredentialManagerAPIForTest(s.backend, s.resources, s.authorizer)
    45  	c.Assert(err, jc.ErrorIsNil)
    46  	s.api = api
    47  }
    48  
    49  func (s *CredentialManagerSuite) TestInvalidateModelCredentialUnauthorized(c *gc.C) {
    50  	s.authorizer = apiservertesting.FakeAuthorizer{
    51  		Tag: names.NewMachineTag("0"),
    52  	}
    53  	_, err := credentialmanager.NewCredentialManagerAPIForTest(s.backend, s.resources, s.authorizer)
    54  	c.Assert(err, gc.ErrorMatches, "permission denied")
    55  }
    56  
    57  func (s *CredentialManagerSuite) TestInvalidateModelCredential(c *gc.C) {
    58  	result, err := s.api.InvalidateModelCredential(params.InvalidateCredentialArg{"not again"})
    59  	c.Assert(err, jc.ErrorIsNil)
    60  	c.Assert(result, gc.DeepEquals, params.ErrorResult{})
    61  	s.backend.CheckCalls(c, []testing.StubCall{
    62  		{"InvalidateModelCredential", []interface{}{"not again"}},
    63  	})
    64  }
    65  
    66  func (s *CredentialManagerSuite) TestInvalidateModelCredentialError(c *gc.C) {
    67  	expected := errors.New("boom")
    68  	s.backend.SetErrors(expected)
    69  	result, err := s.api.InvalidateModelCredential(params.InvalidateCredentialArg{"not again"})
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	c.Assert(result, gc.DeepEquals, params.ErrorResult{Error: apiservererrors.ServerError(expected)})
    72  	s.backend.CheckCalls(c, []testing.StubCall{
    73  		{"InvalidateModelCredential", []interface{}{"not again"}},
    74  	})
    75  }
    76  
    77  func newMockBackend() *testBackend {
    78  	return &testBackend{
    79  		Stub: &testing.Stub{},
    80  	}
    81  }
    82  
    83  type testBackend struct {
    84  	*testing.Stub
    85  }
    86  
    87  func (b *testBackend) InvalidateModelCredential(reason string) error {
    88  	b.AddCall("InvalidateModelCredential", reason)
    89  	return b.NextErr()
    90  }