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  })