github.com/pivotal-cf/go-pivnet/v6@v6.0.2/auth_test.go (about) 1 package pivnet_test 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/onsi/gomega/ghttp" 8 "github.com/pivotal-cf/go-pivnet/v6" 9 "github.com/pivotal-cf/go-pivnet/v6/logger" 10 "github.com/pivotal-cf/go-pivnet/v6/logger/loggerfakes" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("PivnetClient - Auth", func() { 17 var ( 18 server *ghttp.Server 19 client pivnet.Client 20 token string 21 apiAddress string 22 userAgent string 23 24 refresh_token string 25 26 newClientConfig pivnet.ClientConfig 27 fakeLogger logger.Logger 28 ) 29 30 BeforeEach(func() { 31 server = ghttp.NewServer() 32 apiAddress = server.URL() 33 token = "my-auth-token" 34 userAgent = "pivnet-resource/0.1.0 (some-url)" 35 36 fakeLogger = &loggerfakes.FakeLogger{} 37 newClientConfig = pivnet.ClientConfig{ 38 Host: apiAddress, 39 UserAgent: userAgent, 40 } 41 accessTokenService := pivnet.NewAccessTokenOrLegacyToken(token, apiAddress, false) 42 client = pivnet.NewClient(accessTokenService, newClientConfig, fakeLogger) 43 }) 44 45 AfterEach(func() { 46 server.Close() 47 }) 48 49 Describe("Check", func() { 50 It("returns true,nil", func() { 51 server.AppendHandlers( 52 ghttp.CombineHandlers( 53 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/authentication", apiPrefix)), 54 ghttp.RespondWith(http.StatusOK, nil), 55 ), 56 ) 57 58 ok, err := client.Auth.Check() 59 Expect(err).NotTo(HaveOccurred()) 60 61 Expect(ok).To(BeTrue()) 62 }) 63 64 Context("when the server responds with a 401 status code", func() { 65 var ( 66 body []byte 67 ) 68 69 BeforeEach(func() { 70 body = []byte(`{"message":"foo message"}`) 71 }) 72 73 It("returns false,nil", func() { 74 server.AppendHandlers( 75 ghttp.CombineHandlers( 76 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/authentication", apiPrefix)), 77 ghttp.RespondWith(http.StatusUnauthorized, body), 78 ), 79 ) 80 81 ok, err := client.Auth.Check() 82 Expect(err).NotTo(HaveOccurred()) 83 84 Expect(ok).To(BeFalse()) 85 }) 86 }) 87 88 Context("when the server responds with a 403 status code", func() { 89 var ( 90 body []byte 91 ) 92 93 BeforeEach(func() { 94 body = []byte(`{"message":"foo message"}`) 95 }) 96 97 It("returns false,nil", func() { 98 server.AppendHandlers( 99 ghttp.CombineHandlers( 100 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/authentication", apiPrefix)), 101 ghttp.RespondWith(http.StatusForbidden, body), 102 ), 103 ) 104 105 ok, err := client.Auth.Check() 106 Expect(err).NotTo(HaveOccurred()) 107 108 Expect(ok).To(BeFalse()) 109 }) 110 }) 111 112 Context("when the server responds with any other status code", func() { 113 var ( 114 body []byte 115 ) 116 117 BeforeEach(func() { 118 body = []byte(`{"message":"foo message"}`) 119 }) 120 121 It("returns false,err", func() { 122 server.AppendHandlers( 123 ghttp.CombineHandlers( 124 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/authentication", apiPrefix)), 125 ghttp.RespondWith(http.StatusTeapot, body), 126 ), 127 ) 128 129 ok, err := client.Auth.Check() 130 Expect(err.Error()).To(ContainSubstring("foo message")) 131 132 Expect(ok).To(BeFalse()) 133 }) 134 }) 135 }) 136 137 Describe("FetchUAAToken", func() { 138 It("returns the UAA token", func() { 139 refresh_token = "some-refresh-token" 140 141 expectedRequestBody := fmt.Sprintf( 142 `{"refresh_token":"%s"}`, 143 refresh_token, 144 ) 145 146 response := pivnet.UAATokenResponse{ 147 Token: "some-token", 148 } 149 150 server.AppendHandlers( 151 ghttp.CombineHandlers( 152 ghttp.VerifyRequest("POST", fmt.Sprintf( 153 "%s/authentication/access_tokens", 154 apiPrefix, 155 )), 156 ghttp.VerifyJSON(expectedRequestBody), 157 ghttp.RespondWithJSONEncoded(http.StatusOK, response), 158 ), 159 ) 160 161 tokenResponse, err := client.Auth.FetchUAAToken(refresh_token) 162 Expect(err).NotTo(HaveOccurred()) 163 Expect(tokenResponse.Token).To(Equal("some-token")) 164 }) 165 166 Context("When Pivnet returns a 401", func() { 167 It("returns an error", func() { 168 refresh_token = "some-refresh-token" 169 170 expectedRequestBody := fmt.Sprintf( 171 `{"refresh_token":"%s"}`, 172 refresh_token, 173 ) 174 175 server.AppendHandlers( 176 ghttp.CombineHandlers( 177 ghttp.VerifyRequest("POST", fmt.Sprintf( 178 "%s/authentication/access_tokens", 179 apiPrefix, 180 )), 181 ghttp.VerifyJSON(expectedRequestBody), 182 ghttp.RespondWithJSONEncoded(http.StatusUnauthorized, nil), 183 ), 184 ) 185 186 _, err := client.Auth.FetchUAAToken(refresh_token) 187 Expect(err).To(HaveOccurred()) 188 }) 189 }) 190 }) 191 })