github.com/pivotal-cf/go-pivnet/v6@v6.0.2/release_types_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 - release types", func() { 18 var ( 19 server *ghttp.Server 20 client pivnet.Client 21 apiAddress string 22 userAgent string 23 24 newClientConfig pivnet.ClientConfig 25 fakeLogger logger.Logger 26 fakeAccessTokenService *gopivnetfakes.FakeAccessTokenService 27 ) 28 29 BeforeEach(func() { 30 server = ghttp.NewServer() 31 apiAddress = server.URL() 32 userAgent = "pivnet-resource/0.1.0 (some-url)" 33 34 fakeLogger = &loggerfakes.FakeLogger{} 35 fakeAccessTokenService = &gopivnetfakes.FakeAccessTokenService{} 36 newClientConfig = pivnet.ClientConfig{ 37 Host: apiAddress, 38 UserAgent: userAgent, 39 } 40 client = pivnet.NewClient(fakeAccessTokenService, newClientConfig, fakeLogger) 41 }) 42 43 AfterEach(func() { 44 server.Close() 45 }) 46 47 Describe("Get", func() { 48 It("returns the release types", func() { 49 response := `{"release_types": ["foo","bar"]}` 50 51 server.AppendHandlers( 52 ghttp.CombineHandlers( 53 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/releases/release_types", apiPrefix)), 54 ghttp.RespondWith(http.StatusOK, response), 55 ), 56 ) 57 58 releaseTypes, err := client.ReleaseTypes.Get() 59 Expect(err).NotTo(HaveOccurred()) 60 61 Expect(releaseTypes).To(HaveLen(2)) 62 Expect(releaseTypes[0]).To(Equal(pivnet.ReleaseType("foo"))) 63 Expect(releaseTypes[1]).To(Equal(pivnet.ReleaseType("bar"))) 64 }) 65 66 Context("when the server responds with a non-2XX status code", func() { 67 var ( 68 body []byte 69 ) 70 71 BeforeEach(func() { 72 body = []byte(`{"message":"foo message"}`) 73 }) 74 75 It("returns an error", func() { 76 server.AppendHandlers( 77 ghttp.CombineHandlers( 78 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/releases/release_types", apiPrefix)), 79 ghttp.RespondWith(http.StatusTeapot, body), 80 ), 81 ) 82 83 _, err := client.ReleaseTypes.Get() 84 Expect(err.Error()).To(ContainSubstring("foo message")) 85 }) 86 }) 87 88 Context("when the json unmarshalling fails with error", func() { 89 It("forwards the error", func() { 90 server.AppendHandlers( 91 ghttp.CombineHandlers( 92 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/releases/release_types", apiPrefix)), 93 ghttp.RespondWith(http.StatusTeapot, "%%%"), 94 ), 95 ) 96 97 _, err := client.ReleaseTypes.Get() 98 Expect(err).To(HaveOccurred()) 99 100 Expect(err.Error()).To(ContainSubstring("invalid character")) 101 }) 102 }) 103 }) 104 })