1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package meterstatus_test
9
jc "github.com/juju/testing/checkers"
10
gc "gopkg.in/check.v1"
12
"github.com/juju/juju/apiserver/meterstatus"
13
"github.com/juju/juju/state"
16
type meterStatusWrapperSuite struct{}
18
var _ = gc.Suite(&meterStatusWrapperSuite{})
20
func (s *meterStatusWrapperSuite) TestError(c *gc.C) {
21
_, err := meterstatus.MeterStatusWrapper(ErrorGetter)
22
c.Assert(err, gc.ErrorMatches, "an error")
25
func (s *meterStatusWrapperSuite) TestWrapper(c *gc.C) {
28
input func() (state.MeterStatus, error)
29
expectedOutput state.MeterStatus
31
about: "notset in, amber out",
33
expectedOutput: state.MeterStatus{state.MeterAmber, "not set"},
35
about: "notavailable in, red out",
36
input: NotAvailableGetter,
37
expectedOutput: state.MeterStatus{state.MeterRed, "not available"},
39
about: "red in, red out",
41
expectedOutput: state.MeterStatus{state.MeterRed, "info"},
43
about: "green in, green out",
45
expectedOutput: state.MeterStatus{state.MeterGreen, "info"},
47
about: "amber in, amber out",
49
expectedOutput: state.MeterStatus{state.MeterAmber, "info"},
51
for i, test := range tests {
52
c.Logf("test %d: %s", i, test.about)
53
status, err := meterstatus.MeterStatusWrapper(test.input)
54
c.Assert(err, jc.ErrorIsNil)
55
c.Assert(status.Code, gc.Equals, test.expectedOutput.Code)
56
c.Assert(status.Info, gc.Equals, test.expectedOutput.Info)
60
func ErrorGetter() (state.MeterStatus, error) {
61
return state.MeterStatus{}, errors.New("an error")
64
func NotAvailableGetter() (state.MeterStatus, error) {
65
return state.MeterStatus{state.MeterNotAvailable, ""}, nil
68
func NotSetGetter() (state.MeterStatus, error) {
69
return state.MeterStatus{state.MeterNotSet, ""}, nil
72
func RedGetter() (state.MeterStatus, error) {
73
return state.MeterStatus{state.MeterRed, "info"}, nil
76
func GreenGetter() (state.MeterStatus, error) {
77
return state.MeterStatus{state.MeterGreen, "info"}, nil
79
func AmberGetter() (state.MeterStatus, error) {
80
return state.MeterStatus{state.MeterAmber, "info"}, nil