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