github.com/sleungcy/cli@v7.1.0+incompatible/actor/v7action/token_test.go (about)

     1  package v7action_test
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  
     7  	. "code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/actor/v7action/v7actionfakes"
     9  	"code.cloudfoundry.org/cli/api/uaa"
    10  	"code.cloudfoundry.org/cli/integration/helpers"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Token Actions", func() {
    16  	var (
    17  		actor         *Actor
    18  		fakeUAAClient *v7actionfakes.FakeUAAClient
    19  		fakeConfig    *v7actionfakes.FakeConfig
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeUAAClient = new(v7actionfakes.FakeUAAClient)
    24  		fakeConfig = new(v7actionfakes.FakeConfig)
    25  		actor = NewActor(nil, fakeConfig, nil, fakeUAAClient, nil, nil)
    26  	})
    27  
    28  	Describe("RefreshAccessToken", func() {
    29  		var (
    30  			accessToken string
    31  			err         error
    32  		)
    33  		JustBeforeEach(func() {
    34  			accessToken, err = actor.RefreshAccessToken()
    35  		})
    36  
    37  		When("the token is invalid", func() {
    38  			BeforeEach(func() {
    39  				fakeUAAClient.RefreshAccessTokenReturns(uaa.RefreshedTokens{
    40  					AccessToken:  "some-token",
    41  					Type:         "bearer",
    42  					RefreshToken: "new-refresh-token",
    43  				}, nil)
    44  				fakeConfig.RefreshTokenReturns("some-refresh-token")
    45  				fakeConfig.AccessTokenReturns("im a bad token :(")
    46  			})
    47  
    48  			It("returns the new access token from the uaa client", func() {
    49  				Expect(err).ToNot(HaveOccurred())
    50  				Expect(fakeUAAClient.RefreshAccessTokenCallCount()).To(Equal(1))
    51  				Expect(fakeUAAClient.RefreshAccessTokenArgsForCall(0)).To(Equal("some-refresh-token"))
    52  				Expect(accessToken).To(Equal("bearer some-token"))
    53  			})
    54  
    55  			It("updates the config with the refreshed token", func() {
    56  				Expect(fakeConfig.SetAccessTokenCallCount()).To(Equal(1))
    57  				Expect(fakeConfig.SetRefreshTokenCallCount()).To(Equal(1))
    58  				Expect(fakeConfig.SetAccessTokenArgsForCall(0)).To(Equal("bearer some-token"))
    59  				Expect(fakeConfig.SetRefreshTokenArgsForCall(0)).To(Equal("new-refresh-token"))
    60  			})
    61  		})
    62  
    63  		When("the token is not about to expire", func() {
    64  			var notExpiringAccessToken string
    65  			BeforeEach(func() {
    66  				fakeUAAClient.RefreshAccessTokenReturns(uaa.RefreshedTokens{
    67  					AccessToken: "some-token",
    68  					Type:        "bearer",
    69  				}, nil)
    70  				fakeConfig.RefreshTokenReturns("some-refresh-token")
    71  				notExpiringAccessToken = helpers.BuildTokenString(time.Now().AddDate(5, 0, 0))
    72  				fakeConfig.AccessTokenReturns(notExpiringAccessToken)
    73  			})
    74  
    75  			It("returns the current token without refreshing it", func() {
    76  				Expect(fakeUAAClient.RefreshAccessTokenCallCount()).To(Equal(0))
    77  				Expect(err).ToNot(HaveOccurred())
    78  				Expect(accessToken).To(Equal(notExpiringAccessToken))
    79  			})
    80  		})
    81  
    82  		When("the token is about to expire", func() {
    83  			BeforeEach(func() {
    84  				fakeUAAClient.RefreshAccessTokenReturns(uaa.RefreshedTokens{
    85  					AccessToken:  "some-token",
    86  					RefreshToken: "new-refresh-token",
    87  					Type:         "bearer",
    88  				}, nil)
    89  				fakeConfig.RefreshTokenReturns("some-refresh-token")
    90  				expiringAccessToken := helpers.BuildTokenString(time.Now().Add(5))
    91  				fakeConfig.AccessTokenReturns(expiringAccessToken)
    92  			})
    93  
    94  			It("returns the new access token from the uaa client", func() {
    95  				Expect(err).ToNot(HaveOccurred())
    96  				Expect(fakeUAAClient.RefreshAccessTokenCallCount()).To(Equal(1))
    97  				Expect(fakeUAAClient.RefreshAccessTokenArgsForCall(0)).To(Equal("some-refresh-token"))
    98  				Expect(accessToken).To(Equal("bearer some-token"))
    99  			})
   100  
   101  			It("updates the config with the refreshed token", func() {
   102  				Expect(fakeConfig.SetAccessTokenCallCount()).To(Equal(1))
   103  				Expect(fakeConfig.SetRefreshTokenCallCount()).To(Equal(1))
   104  				Expect(fakeConfig.SetAccessTokenArgsForCall(0)).To(Equal("bearer some-token"))
   105  				Expect(fakeConfig.SetRefreshTokenArgsForCall(0)).To(Equal("new-refresh-token"))
   106  			})
   107  
   108  			When("refreshing the access token fails", func() {
   109  				BeforeEach(func() {
   110  					fakeUAAClient.RefreshAccessTokenReturns(
   111  						uaa.RefreshedTokens{},
   112  						errors.New("I'm still an error!"),
   113  					)
   114  				})
   115  
   116  				It("returns that error", func() {
   117  					Expect(err).To(MatchError("I'm still an error!"))
   118  					Expect(accessToken).To(Equal(""), "AccessToken was not equal to \"\"")
   119  				})
   120  			})
   121  		})
   122  	})
   123  })