github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/api/cloudcontroller/ccv2/resource_test.go (about)

     1  package ccv2_test
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     7  	. "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  	. "github.com/onsi/gomega/ghttp"
    11  )
    12  
    13  var _ = Describe("Resource", func() {
    14  	var client *Client
    15  
    16  	BeforeEach(func() {
    17  		client = NewTestClient()
    18  	})
    19  
    20  	Describe("ResourceMatch", func() {
    21  		Context("when route binding is successful", func() {
    22  			BeforeEach(func() {
    23  				responseBody := `[
    24  						{
    25  							"sha1": "some-sha-1",
    26  							"size": 1
    27  						},
    28  						{
    29  							"sha1": "some-sha-3",
    30  							"size": 3
    31  						}
    32  					]`
    33  
    34  				expectedRequestBody := []map[string]interface{}{
    35  					map[string]interface{}{
    36  						"fn":   "some-file-1",
    37  						"mode": "744",
    38  						"sha1": "some-sha-1",
    39  						"size": 1,
    40  					},
    41  					map[string]interface{}{
    42  						"fn":   "some-file-2",
    43  						"mode": "744",
    44  						"sha1": "some-sha-2",
    45  						"size": 2,
    46  					},
    47  					map[string]interface{}{
    48  						"fn":   "some-file-3",
    49  						"mode": "744",
    50  						"sha1": "some-sha-3",
    51  						"size": 3,
    52  					},
    53  				}
    54  				server.AppendHandlers(
    55  					CombineHandlers(
    56  						VerifyRequest(http.MethodPut, "/v2/resource_match"),
    57  						VerifyJSONRepresenting(expectedRequestBody),
    58  						RespondWith(http.StatusCreated, responseBody, http.Header{"X-Cf-Warnings": {"this is a warning"}}),
    59  					),
    60  				)
    61  			})
    62  
    63  			It("returns the route and warnings", func() {
    64  				resourcesToMatch := []Resource{
    65  					{
    66  						Filename: "some-file-1",
    67  						Mode:     0744,
    68  						SHA1:     "some-sha-1",
    69  						Size:     1,
    70  					},
    71  					{
    72  						Filename: "some-file-2",
    73  						Mode:     0744,
    74  						SHA1:     "some-sha-2",
    75  						Size:     2,
    76  					},
    77  					{
    78  						Filename: "some-file-3",
    79  						Mode:     0744,
    80  						SHA1:     "some-sha-3",
    81  						Size:     3,
    82  					},
    83  				}
    84  				matchedResources, warnings, err := client.ResourceMatch(resourcesToMatch)
    85  
    86  				Expect(err).ToNot(HaveOccurred())
    87  				Expect(warnings).To(ConsistOf("this is a warning"))
    88  
    89  				Expect(matchedResources).To(ConsistOf(
    90  					Resource{
    91  						SHA1: "some-sha-1",
    92  						Size: 1,
    93  					},
    94  					Resource{
    95  						SHA1: "some-sha-3",
    96  						Size: 3,
    97  					}))
    98  			})
    99  		})
   100  
   101  		Context("when the cc returns an error", func() {
   102  			BeforeEach(func() {
   103  				response := `{
   104  					"code": 10001,
   105  					"description": "Some Error",
   106  					"error_code": "CF-SomeError"
   107  				}`
   108  				server.AppendHandlers(
   109  					CombineHandlers(
   110  						VerifyRequest(http.MethodPut, "/v2/resource_match"),
   111  						RespondWith(http.StatusTeapot, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}),
   112  					),
   113  				)
   114  			})
   115  
   116  			It("returns an error", func() {
   117  				_, warnings, err := client.ResourceMatch(nil)
   118  				Expect(err).To(MatchError(ccerror.V2UnexpectedResponseError{
   119  					ResponseCode: http.StatusTeapot,
   120  					V2ErrorResponse: ccerror.V2ErrorResponse{
   121  						Code:        10001,
   122  						Description: "Some Error",
   123  						ErrorCode:   "CF-SomeError",
   124  					},
   125  				}))
   126  				Expect(warnings).To(ConsistOf("this is a warning"))
   127  			})
   128  		})
   129  	})
   130  })