github.com/pivotal-cf/go-pivnet/v6@v6.0.2/eulas_test.go (about) 1 package pivnet_test 2 3 import ( 4 "fmt" 5 "github.com/pivotal-cf/go-pivnet/v6/go-pivnetfakes" 6 "net/http" 7 8 "github.com/onsi/gomega/ghttp" 9 "github.com/pivotal-cf/go-pivnet/v6" 10 "github.com/pivotal-cf/go-pivnet/v6/logger" 11 "github.com/pivotal-cf/go-pivnet/v6/logger/loggerfakes" 12 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 ) 16 17 var _ = Describe("PivnetClient - EULA", func() { 18 var ( 19 server *ghttp.Server 20 client pivnet.Client 21 token string 22 apiAddress string 23 userAgent string 24 25 newClientConfig pivnet.ClientConfig 26 fakeLogger logger.Logger 27 fakeAccessTokenService *gopivnetfakes.FakeAccessTokenService 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 fakeAccessTokenService = &gopivnetfakes.FakeAccessTokenService{} 38 newClientConfig = pivnet.ClientConfig{ 39 Host: apiAddress, 40 UserAgent: userAgent, 41 } 42 client = pivnet.NewClient(fakeAccessTokenService, newClientConfig, fakeLogger) 43 }) 44 45 AfterEach(func() { 46 server.Close() 47 }) 48 49 Describe("List", func() { 50 It("returns all EULAs", func() { 51 response := `{"eulas": [{"id":1,"name":"eula1"},{"id": 2,"name":"eula2"}]}` 52 53 server.AppendHandlers( 54 ghttp.CombineHandlers( 55 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas", apiPrefix)), 56 ghttp.RespondWith(http.StatusOK, response), 57 ), 58 ) 59 60 eulas, err := client.EULA.List() 61 Expect(err).NotTo(HaveOccurred()) 62 63 Expect(eulas).To(HaveLen(2)) 64 65 Expect(eulas[0].ID).To(Equal(1)) 66 Expect(eulas[0].Name).To(Equal("eula1")) 67 Expect(eulas[1].ID).To(Equal(2)) 68 Expect(eulas[1].Name).To(Equal("eula2")) 69 }) 70 71 Context("when the server responds with a non-2XX status code", func() { 72 var ( 73 body []byte 74 ) 75 76 BeforeEach(func() { 77 body = []byte(`{"message":"foo message"}`) 78 }) 79 80 It("returns an error", func() { 81 server.AppendHandlers( 82 ghttp.CombineHandlers( 83 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas", apiPrefix)), 84 ghttp.RespondWith(http.StatusTeapot, body), 85 ), 86 ) 87 88 _, err := client.EULA.List() 89 Expect(err.Error()).To(ContainSubstring("foo message")) 90 }) 91 }) 92 93 Context("when the json unmarshalling fails with error", func() { 94 It("forwards the error", func() { 95 server.AppendHandlers( 96 ghttp.CombineHandlers( 97 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas", apiPrefix)), 98 ghttp.RespondWith(http.StatusOK, "%%%"), 99 ), 100 ) 101 102 _, err := client.EULA.List() 103 Expect(err).To(HaveOccurred()) 104 105 Expect(err.Error()).To(ContainSubstring("invalid character")) 106 }) 107 }) 108 }) 109 110 Describe("Get", func() { 111 var ( 112 eulaSlug string 113 ) 114 115 BeforeEach(func() { 116 eulaSlug = "eula_1" 117 }) 118 119 It("returns the EULA for the provided eula slug", func() { 120 response := `{"id":1,"name":"eula1","slug":"eula_1"}` 121 122 server.AppendHandlers( 123 ghttp.CombineHandlers( 124 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas/%s", apiPrefix, eulaSlug)), 125 ghttp.RespondWith(http.StatusOK, response), 126 ), 127 ) 128 129 eula, err := client.EULA.Get(eulaSlug) 130 Expect(err).NotTo(HaveOccurred()) 131 132 Expect(eula.ID).To(Equal(1)) 133 Expect(eula.Name).To(Equal("eula1")) 134 Expect(eula.Slug).To(Equal(eulaSlug)) 135 }) 136 137 Context("when the server responds with a non-2XX status code", func() { 138 var ( 139 body []byte 140 ) 141 142 BeforeEach(func() { 143 body = []byte(`{"message":"foo message"}`) 144 }) 145 146 It("returns an error", func() { 147 server.AppendHandlers( 148 ghttp.CombineHandlers( 149 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas/%s", apiPrefix, eulaSlug)), 150 ghttp.RespondWith(http.StatusTeapot, body), 151 ), 152 ) 153 154 _, err := client.EULA.Get(eulaSlug) 155 Expect(err.Error()).To(ContainSubstring("foo message")) 156 }) 157 }) 158 159 Context("when the json unmarshalling fails with error", func() { 160 It("forwards the error", func() { 161 server.AppendHandlers( 162 ghttp.CombineHandlers( 163 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/eulas/%s", apiPrefix, eulaSlug)), 164 ghttp.RespondWith(http.StatusOK, "%%%"), 165 ), 166 ) 167 168 _, err := client.EULA.Get(eulaSlug) 169 Expect(err).To(HaveOccurred()) 170 171 Expect(err.Error()).To(ContainSubstring("invalid character")) 172 }) 173 }) 174 }) 175 176 Describe("Accept", func() { 177 var ( 178 releaseID int 179 productSlug string 180 EULAAcceptanceURL string 181 ) 182 183 BeforeEach(func() { 184 productSlug = "banana-slug" 185 releaseID = 42 186 EULAAcceptanceURL = fmt.Sprintf(apiPrefix+"/products/%s/releases/%d/pivnet_resource_eula_acceptance", productSlug, releaseID) 187 fakeAccessTokenService.AccessTokenReturns(token, nil) 188 }) 189 190 It("accepts the EULA for a given release and product ID", func() { 191 response := fmt.Sprintf(`{"accepted_at": "2016-01-11","_links":{}}`) 192 193 server.AppendHandlers( 194 ghttp.CombineHandlers( 195 ghttp.VerifyRequest("POST", EULAAcceptanceURL), 196 ghttp.VerifyHeaderKV("Authorization", fmt.Sprintf("Token %s", token)), 197 ghttp.VerifyJSON(`{}`), 198 ghttp.RespondWith(http.StatusOK, response), 199 ), 200 ) 201 202 Expect(client.EULA.Accept(productSlug, releaseID)).To(Succeed()) 203 }) 204 205 Context("when any other non-200 status code comes back", func() { 206 var ( 207 body []byte 208 ) 209 210 BeforeEach(func() { 211 body = []byte(`{"message":"foo message"}`) 212 }) 213 214 It("returns an error", func() { 215 server.AppendHandlers( 216 ghttp.CombineHandlers( 217 ghttp.VerifyRequest("POST", EULAAcceptanceURL), 218 ghttp.VerifyHeaderKV("Authorization", fmt.Sprintf("Token %s", token)), 219 ghttp.VerifyJSON(`{}`), 220 ghttp.RespondWith(http.StatusTeapot, body), 221 ), 222 ) 223 224 err := client.EULA.Accept(productSlug, releaseID) 225 Expect(err.Error()).To(ContainSubstring("foo message")) 226 }) 227 }) 228 }) 229 })