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