github.com/jasonkeene/cli@v6.14.1-0.20160816203908-ca5715166dfb+incompatible/cf/commands/oauth_token_test.go (about)

     1  package commands_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/cloudfoundry/cli/cf/api/authentication/authenticationfakes"
     7  	"github.com/cloudfoundry/cli/cf/commandregistry"
     8  	"github.com/cloudfoundry/cli/cf/configuration/coreconfig"
     9  	"github.com/cloudfoundry/cli/cf/requirements"
    10  	"github.com/cloudfoundry/cli/cf/requirements/requirementsfakes"
    11  	"github.com/cloudfoundry/cli/cf/trace/tracefakes"
    12  	"github.com/cloudfoundry/cli/plugin/models"
    13  	testcmd "github.com/cloudfoundry/cli/testhelpers/commands"
    14  	testconfig "github.com/cloudfoundry/cli/testhelpers/configuration"
    15  	testterm "github.com/cloudfoundry/cli/testhelpers/terminal"
    16  
    17  	"os"
    18  
    19  	. "github.com/cloudfoundry/cli/testhelpers/matchers"
    20  	. "github.com/onsi/ginkgo"
    21  	. "github.com/onsi/gomega"
    22  )
    23  
    24  var _ = Describe("OauthToken", func() {
    25  	var (
    26  		ui                  *testterm.FakeUI
    27  		authRepo            *authenticationfakes.FakeRepository
    28  		requirementsFactory *requirementsfakes.FakeFactory
    29  		configRepo          coreconfig.Repository
    30  		deps                commandregistry.Dependency
    31  	)
    32  
    33  	updateCommandDependency := func(pluginCall bool) {
    34  		deps.UI = ui
    35  		deps.RepoLocator = deps.RepoLocator.SetAuthenticationRepository(authRepo)
    36  		deps.Config = configRepo
    37  		commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("oauth-token").SetDependency(deps, pluginCall))
    38  	}
    39  
    40  	BeforeEach(func() {
    41  		ui = &testterm.FakeUI{}
    42  		fakeLogger := new(tracefakes.FakePrinter)
    43  		authRepo = new(authenticationfakes.FakeRepository)
    44  		configRepo = testconfig.NewRepositoryWithDefaults()
    45  		requirementsFactory = new(requirementsfakes.FakeFactory)
    46  		deps = commandregistry.NewDependency(os.Stdout, fakeLogger, "")
    47  	})
    48  
    49  	runCommand := func() bool {
    50  		return testcmd.RunCLICommand("oauth-token", []string{}, requirementsFactory, updateCommandDependency, false, ui)
    51  	}
    52  
    53  	Describe("requirements", func() {
    54  		It("fails when the user is not logged in", func() {
    55  			requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"})
    56  			Expect(runCommand()).ToNot(HavePassedRequirements())
    57  		})
    58  	})
    59  
    60  	Describe("when logged in", func() {
    61  		BeforeEach(func() {
    62  			requirementsFactory.NewLoginRequirementReturns(requirements.Passing{})
    63  		})
    64  
    65  		It("fails if oauth refresh fails", func() {
    66  			authRepo.RefreshAuthTokenReturns("", errors.New("Could not refresh"))
    67  			runCommand()
    68  
    69  			Expect(ui.Outputs()).To(ContainSubstrings(
    70  				[]string{"FAILED"},
    71  				[]string{"Could not refresh"},
    72  			))
    73  		})
    74  
    75  		It("returns to the user the oauth token after a refresh", func() {
    76  			authRepo.RefreshAuthTokenReturns("1234567890", nil)
    77  			runCommand()
    78  
    79  			Expect(ui.Outputs()).To(ContainSubstrings(
    80  				[]string{"1234567890"},
    81  			))
    82  		})
    83  
    84  		Context("when invoked by a plugin", func() {
    85  			var (
    86  				pluginModel plugin_models.GetOauthToken_Model
    87  			)
    88  
    89  			BeforeEach(func() {
    90  				pluginModel = plugin_models.GetOauthToken_Model{}
    91  				deps.PluginModels.OauthToken = &pluginModel
    92  			})
    93  
    94  			It("populates the plugin model upon execution", func() {
    95  				authRepo.RefreshAuthTokenReturns("911999111", nil)
    96  				testcmd.RunCLICommand("oauth-token", []string{}, requirementsFactory, updateCommandDependency, true, ui)
    97  				Expect(pluginModel.Token).To(Equal("911999111"))
    98  			})
    99  		})
   100  	})
   101  })