github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/application/expose_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package application
     5  
     6  import (
     7  	"github.com/juju/cmd/cmdtesting"
     8  	"github.com/juju/errors"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	jujutesting "github.com/juju/juju/juju/testing"
    13  	"github.com/juju/juju/rpc"
    14  	"github.com/juju/juju/testing"
    15  	"github.com/juju/juju/testing/factory"
    16  )
    17  
    18  type ExposeSuite struct {
    19  	jujutesting.RepoSuite
    20  	testing.CmdBlockHelper
    21  }
    22  
    23  func (s *ExposeSuite) SetUpTest(c *gc.C) {
    24  	s.RepoSuite.SetUpTest(c)
    25  	s.CmdBlockHelper = testing.NewCmdBlockHelper(s.APIState)
    26  	c.Assert(s.CmdBlockHelper, gc.NotNil)
    27  	s.AddCleanup(func(*gc.C) { s.CmdBlockHelper.Close() })
    28  }
    29  
    30  var _ = gc.Suite(&ExposeSuite{})
    31  
    32  func runExpose(c *gc.C, args ...string) error {
    33  	_, err := cmdtesting.RunCommand(c, NewExposeCommand(), args...)
    34  	return err
    35  }
    36  
    37  func (s *ExposeSuite) assertExposed(c *gc.C, application string) {
    38  	svc, err := s.State.Application(application)
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	exposed := svc.IsExposed()
    41  	c.Assert(exposed, jc.IsTrue)
    42  }
    43  
    44  func (s *ExposeSuite) TestExpose(c *gc.C) {
    45  	s.Factory.MakeApplication(c, &factory.ApplicationParams{Name: "some-application-name"})
    46  
    47  	err := runExpose(c, "some-application-name")
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	s.assertExposed(c, "some-application-name")
    50  
    51  	err = runExpose(c, "nonexistent-application")
    52  	c.Assert(errors.Cause(err), gc.DeepEquals, &rpc.RequestError{
    53  		Message: `application "nonexistent-application" not found`,
    54  		Code:    "not found",
    55  	})
    56  }
    57  
    58  func (s *ExposeSuite) TestBlockExpose(c *gc.C) {
    59  	s.Factory.MakeApplication(c, &factory.ApplicationParams{Name: "some-application-name"})
    60  
    61  	// Block operation
    62  	s.BlockAllChanges(c, "TestBlockExpose")
    63  
    64  	err := runExpose(c, "some-application-name")
    65  	s.AssertBlocked(c, err, ".*TestBlockExpose.*")
    66  }