github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/charms/services/repofactory_test.go (about)

     1  // Copyright 2021 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package services_test
     5  
     6  import (
     7  	"github.com/juju/loggo"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	"go.uber.org/mock/gomock"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/apiserver/facades/client/charms/services"
    14  	"github.com/juju/juju/apiserver/facades/client/charms/services/mocks"
    15  	corecharm "github.com/juju/juju/core/charm"
    16  	"github.com/juju/juju/core/charm/repository"
    17  	"github.com/juju/juju/environs/config"
    18  )
    19  
    20  var _ = gc.Suite(&repoFactoryTestSuite{})
    21  
    22  type repoFactoryTestSuite struct {
    23  	testing.IsolationSuite
    24  
    25  	stateBackend *mocks.MockStateBackend
    26  	modelBackend *mocks.MockModelBackend
    27  	repoFactory  corecharm.RepositoryFactory
    28  }
    29  
    30  func (s *repoFactoryTestSuite) TestGetCharmHubRepository(c *gc.C) {
    31  	defer s.setupMocks(c).Finish()
    32  
    33  	modelCfg, err := config.New(config.UseDefaults, map[string]interface{}{
    34  		config.NameKey: "foo",
    35  		config.TypeKey: "IAAS",
    36  		config.UUIDKey: "d0d2dad4-b899-405d-b8f7-52d0f9bbe24d",
    37  	})
    38  	c.Assert(err, jc.ErrorIsNil)
    39  
    40  	s.modelBackend.EXPECT().Config().Return(modelCfg, nil)
    41  
    42  	repo, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub)
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	c.Assert(repo, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance"))
    45  }
    46  
    47  func (s *repoFactoryTestSuite) TestGetCharmRepositoryMemoization(c *gc.C) {
    48  	defer s.setupMocks(c).Finish()
    49  
    50  	modelCfg, err := config.New(config.UseDefaults, map[string]interface{}{
    51  		config.NameKey: "foo",
    52  		config.TypeKey: "IAAS",
    53  		config.UUIDKey: "d0d2dad4-b899-405d-b8f7-52d0f9bbe24d",
    54  	})
    55  	c.Assert(err, jc.ErrorIsNil)
    56  
    57  	s.modelBackend.EXPECT().Config().Return(modelCfg, nil)
    58  
    59  	repo1, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub)
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	c.Assert(repo1, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance"))
    62  
    63  	repo2, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub)
    64  	c.Assert(err, jc.ErrorIsNil)
    65  	c.Assert(repo2, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance"))
    66  
    67  	// Note: we are comparing pointer values here hence the use of gc.Equals.
    68  	c.Assert(repo1, gc.Equals, repo2, gc.Commentf("expected to get memoized instance for CharmHub repository"))
    69  }
    70  
    71  func (s *repoFactoryTestSuite) setupMocks(c *gc.C) *gomock.Controller {
    72  	ctrl := gomock.NewController(c)
    73  	s.stateBackend = mocks.NewMockStateBackend(ctrl)
    74  	s.modelBackend = mocks.NewMockModelBackend(ctrl)
    75  
    76  	s.repoFactory = services.NewCharmRepoFactory(services.CharmRepoFactoryConfig{
    77  		Logger:       loggo.GetLogger("test"),
    78  		StateBackend: s.stateBackend,
    79  		ModelBackend: s.modelBackend,
    80  	})
    81  	return ctrl
    82  }