github.com/pivotal-cf/go-pivnet/v6@v6.0.2/pivnet_versions_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 - pivnet versions", 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("List", func() { 48 var ( 49 pivnetResourceVersion = "7.8.9" 50 pivnetCliVersion = "2.3.4" 51 ) 52 53 Context("valid requests", func() { 54 It("returns the pivnet component versions", func() { 55 response := fmt.Sprintf(`{"pivnet_cli": "%s", "pivnet_resource": "%s"}`, pivnetCliVersion, pivnetResourceVersion) 56 57 server.AppendHandlers( 58 ghttp.CombineHandlers( 59 ghttp.VerifyRequest("GET", fmt.Sprintf("%s/versions", apiPrefix)), 60 ghttp.RespondWith(http.StatusOK, response), 61 ), 62 ) 63 64 versions, err := client.PivnetVersions.List() 65 Expect(err).NotTo(HaveOccurred()) 66 Expect(versions.PivnetCliVersion).To(Equal(pivnetCliVersion)) 67 Expect(versions.PivnetResourceVersion).To(Equal(pivnetResourceVersion)) 68 }) 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/versions", apiPrefix)), 84 ghttp.RespondWith(http.StatusTeapot, body), 85 ), 86 ) 87 88 _, err := client.PivnetVersions.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/versions", apiPrefix)), 98 ghttp.RespondWith(http.StatusTeapot, "%%%"), 99 ), 100 ) 101 102 _, err := client.PivnetVersions.List() 103 Expect(err).To(HaveOccurred()) 104 105 Expect(err.Error()).To(ContainSubstring("invalid character")) 106 }) 107 }) 108 }) 109 })