1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package listagreements_test
10
"github.com/juju/cmd/cmdtesting"
11
coretesting "github.com/juju/juju/testing"
12
"github.com/juju/terms-client/api/wireformat"
13
jujutesting "github.com/juju/testing"
14
jc "github.com/juju/testing/checkers"
15
gc "gopkg.in/check.v1"
16
"gopkg.in/macaroon-bakery.v1/httpbakery"
18
"github.com/juju/romulus/cmd/listagreements"
21
var _ = gc.Suite(&listAgreementsSuite{})
23
var testTermsAndConditions = "Test Terms and Conditions"
25
type listAgreementsSuite struct {
26
coretesting.FakeJujuXDGDataHomeSuite
30
func (s *listAgreementsSuite) SetUpTest(c *gc.C) {
31
s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
32
s.client = &mockClient{}
34
jujutesting.PatchValue(listagreements.NewClient, func(_ *httpbakery.Client) (listagreements.TermsServiceClient, error) {
40
expectedListAgreementsJSONOutput = `[
45
"created-on": "2015-12-25T00:00:00Z"
49
expectedListAgreementsJSONOutputWithOwner = `[
55
"created-on": "2015-12-25T00:00:00Z"
61
func (s *listAgreementsSuite) TestGetUsersAgreements(c *gc.C) {
62
ctx, err := cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
63
c.Assert(err, jc.ErrorIsNil)
64
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, `[]
66
c.Assert(s.client.called, jc.IsTrue)
68
s.client.setError("well, this is embarassing")
69
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
70
c.Assert(err, gc.ErrorMatches, "failed to list user agreements: well, this is embarassing")
71
c.Assert(s.client.called, jc.IsTrue)
73
agreements := []wireformat.AgreementResponse{{
77
CreatedOn: time.Date(2015, 12, 25, 0, 0, 0, 0, time.UTC),
79
s.client.setAgreements(agreements)
81
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
82
c.Assert(err, jc.ErrorIsNil)
83
c.Assert(ctx, gc.NotNil)
84
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, expectedListAgreementsJSONOutput)
85
c.Assert(s.client.called, jc.IsTrue)
87
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand(), "--format", "yaml")
88
c.Assert(err, jc.ErrorIsNil)
89
c.Assert(ctx, gc.NotNil)
90
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "- user: test-user\n term: test-term\n revision: 1\n createdon: 2015-12-25T00:00:00Z\n")
91
c.Assert(s.client.called, jc.IsTrue)
94
func (s *listAgreementsSuite) TestGetUsersAgreementsWithTermOwner(c *gc.C) {
95
ctx, err := cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
96
c.Assert(err, jc.ErrorIsNil)
97
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, `[]
99
c.Assert(s.client.called, jc.IsTrue)
101
s.client.setError("well, this is embarassing")
102
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
103
c.Assert(err, gc.ErrorMatches, "failed to list user agreements: well, this is embarassing")
104
c.Assert(s.client.called, jc.IsTrue)
106
agreements := []wireformat.AgreementResponse{{
111
CreatedOn: time.Date(2015, 12, 25, 0, 0, 0, 0, time.UTC),
113
s.client.setAgreements(agreements)
115
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand())
116
c.Assert(err, jc.ErrorIsNil)
117
c.Assert(ctx, gc.NotNil)
118
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, expectedListAgreementsJSONOutputWithOwner)
119
c.Assert(s.client.called, jc.IsTrue)
121
ctx, err = cmdtesting.RunCommand(c, listagreements.NewListAgreementsCommand(), "--format", "yaml")
122
c.Assert(err, jc.ErrorIsNil)
123
c.Assert(ctx, gc.NotNil)
124
c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "- user: test-user\n owner: owner\n term: test-term\n revision: 1\n createdon: 2015-12-25T00:00:00Z\n")
125
c.Assert(s.client.called, jc.IsTrue)
128
type mockClient struct {
131
agreements []wireformat.AgreementResponse
135
func (c *mockClient) setAgreements(agreements []wireformat.AgreementResponse) {
136
c.agreements = agreements
141
func (c *mockClient) setError(err string) {
147
func (c *mockClient) GetUsersAgreements() ([]wireformat.AgreementResponse, error) {
150
return nil, errors.New(c.err)
152
return c.agreements, nil