github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/charms/client_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package charms_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	basetesting "github.com/juju/juju/api/base/testing"
    11  	"github.com/juju/juju/api/charms"
    12  	"github.com/juju/juju/apiserver/params"
    13  	coretesting "github.com/juju/juju/testing"
    14  )
    15  
    16  type charmsMockSuite struct {
    17  	coretesting.BaseSuite
    18  	charmsClient *charms.Client
    19  }
    20  
    21  //TODO (mattyw) There are just mock tests in here. We need real tests for each api call.
    22  
    23  var _ = gc.Suite(&charmsMockSuite{})
    24  
    25  func (s *charmsMockSuite) TestCharmInfo(c *gc.C) {
    26  	var called bool
    27  	curl := "local:quantal/dummy-1"
    28  
    29  	apiCaller := basetesting.APICallerFunc(
    30  		func(objType string,
    31  			version int,
    32  			id, request string,
    33  			a, result interface{},
    34  		) error {
    35  			called = true
    36  			c.Check(objType, gc.Equals, "Charms")
    37  			c.Check(id, gc.Equals, "")
    38  			c.Check(request, gc.Equals, "CharmInfo")
    39  
    40  			args, ok := a.(params.CharmInfo)
    41  			c.Assert(ok, jc.IsTrue)
    42  			c.Assert(args.CharmURL, gc.DeepEquals, curl)
    43  			if wanted, k := result.(*charms.CharmInfo); k {
    44  				wanted.URL = curl
    45  			}
    46  			return nil
    47  		})
    48  	charmsClient := charms.NewClient(apiCaller)
    49  	charmResult, err := charmsClient.CharmInfo(curl)
    50  	c.Assert(err, jc.ErrorIsNil)
    51  	c.Assert(called, jc.IsTrue)
    52  	c.Assert(charmResult.URL, gc.DeepEquals, curl)
    53  }
    54  
    55  func (s *charmsMockSuite) TestList(c *gc.C) {
    56  	var called bool
    57  	charmName := "dummy-1"
    58  	curl := "local:quantal/dummy-1"
    59  
    60  	apiCaller := basetesting.APICallerFunc(
    61  		func(objType string,
    62  			version int,
    63  			id, request string,
    64  			a, result interface{},
    65  		) error {
    66  			called = true
    67  			c.Check(objType, gc.Equals, "Charms")
    68  			c.Check(id, gc.Equals, "")
    69  			c.Check(request, gc.Equals, "List")
    70  
    71  			args, ok := a.(params.CharmsList)
    72  			c.Assert(ok, jc.IsTrue)
    73  
    74  			c.Assert(args.Names, gc.HasLen, 1)
    75  			c.Assert(args.Names[0], gc.DeepEquals, charmName)
    76  
    77  			if wanted, k := result.(*params.CharmsListResult); k {
    78  				wanted.CharmURLs = []string{curl}
    79  			}
    80  			return nil
    81  		})
    82  	charmsClient := charms.NewClient(apiCaller)
    83  	listResult, err := charmsClient.List([]string{charmName})
    84  	c.Assert(err, jc.ErrorIsNil)
    85  	c.Assert(called, jc.IsTrue)
    86  	c.Assert(listResult, gc.HasLen, 1)
    87  	c.Assert(listResult[0], gc.DeepEquals, curl)
    88  }
    89  
    90  func (s *charmsMockSuite) TestIsMeteredFalse(c *gc.C) {
    91  	var called bool
    92  	curl := "local:quantal/dummy-1"
    93  	apiCaller := basetesting.APICallerFunc(
    94  		func(objType string,
    95  			version int,
    96  			id, request string,
    97  			a, result interface{},
    98  		) error {
    99  			called = true
   100  			c.Check(objType, gc.Equals, "Charms")
   101  			c.Check(id, gc.Equals, "")
   102  			c.Check(request, gc.Equals, "IsMetered")
   103  
   104  			args, ok := a.(params.CharmInfo)
   105  			c.Assert(ok, jc.IsTrue)
   106  			c.Assert(args.CharmURL, gc.DeepEquals, curl)
   107  			if wanted, k := result.(*charms.CharmInfo); k {
   108  				wanted.URL = curl
   109  			}
   110  			return nil
   111  		})
   112  	charmsClient := charms.NewClient(apiCaller)
   113  	_, err := charmsClient.IsMetered(curl)
   114  	c.Assert(err, jc.ErrorIsNil)
   115  	c.Assert(called, jc.IsTrue)
   116  }