github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/api/cloudcontroller/ccv3/space_feature_test.go (about) 1 package ccv3_test 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 8 . "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/ghttp" 12 ) 13 14 var _ = Describe("Space Features", func() { 15 var client *Client 16 17 BeforeEach(func() { 18 client, _ = NewTestClient() 19 }) 20 21 Describe("GetSpaceFeature", func() { 22 var ( 23 warnings Warnings 24 executeErr error 25 spaceGUID = "some-space-guid" 26 enabled bool 27 ) 28 29 Context("Getting the SSH feature", func() { 30 JustBeforeEach(func() { 31 enabled, warnings, executeErr = client.GetSpaceFeature(spaceGUID, "ssh") 32 }) 33 34 When("there are no API errors", func() { 35 BeforeEach(func() { 36 response := fmt.Sprintf(`{ 37 "name": "ssh", 38 "description": "Enable SSHing into apps in the space.", 39 "enabled": true 40 }`) 41 42 server.AppendHandlers( 43 CombineHandlers( 44 VerifyRequest(http.MethodGet, fmt.Sprintf("/v3/spaces/%s/features/ssh", spaceGUID)), 45 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 46 ), 47 ) 48 }) 49 50 It("gets the SSH feature value", func() { 51 Expect(executeErr).NotTo(HaveOccurred()) 52 Expect(warnings).To(ConsistOf("this is a warning")) 53 Expect(enabled).To(BeTrue()) 54 }) 55 56 }) 57 58 When("the cloud controller returns errors and warnings", func() { 59 BeforeEach(func() { 60 response := `{ 61 "errors": [ 62 { 63 "code": 10010, 64 "detail": "Org not found", 65 "title": "CF-ResourceNotFound" 66 } 67 ] 68 }` 69 server.AppendHandlers( 70 CombineHandlers( 71 VerifyRequest(http.MethodGet, fmt.Sprintf("/v3/spaces/%s/features/ssh", spaceGUID)), 72 RespondWith(http.StatusTeapot, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 73 ), 74 ) 75 }) 76 77 It("returns the error and all warnings", func() { 78 Expect(executeErr).To(MatchError(ccerror.V3UnexpectedResponseError{ 79 ResponseCode: http.StatusTeapot, 80 V3ErrorResponse: ccerror.V3ErrorResponse{ 81 Errors: []ccerror.V3Error{ 82 { 83 Code: 10010, 84 Detail: "Org not found", 85 Title: "CF-ResourceNotFound", 86 }, 87 }, 88 }, 89 })) 90 Expect(warnings).To(ConsistOf("this is a warning")) 91 }) 92 }) 93 }) 94 }) 95 96 Describe("UpdateSpaceFeature", func() { 97 var ( 98 warnings Warnings 99 executeErr error 100 spaceGUID = "some-space-guid" 101 enabled = false 102 ) 103 104 Context("Updating SSH", func() { 105 JustBeforeEach(func() { 106 warnings, executeErr = client.UpdateSpaceFeature(spaceGUID, enabled, "ssh") 107 }) 108 109 When("the space exists", func() { 110 BeforeEach(func() { 111 response := fmt.Sprintf(`{ 112 "name": "ssh", 113 "description": "Enable SSHing into apps in the space.", 114 "enabled": false 115 }`) 116 117 server.AppendHandlers( 118 CombineHandlers( 119 VerifyRequest(http.MethodPatch, fmt.Sprintf("/v3/spaces/%s/features/ssh", spaceGUID)), 120 VerifyBody([]byte(fmt.Sprintf(`{"enabled":%t}`, enabled))), 121 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 122 ), 123 ) 124 }) 125 126 It("updates the space feature to the desired value", func() { 127 Expect(executeErr).NotTo(HaveOccurred()) 128 Expect(warnings).To(ConsistOf("this is a warning")) 129 }) 130 }) 131 132 When("the cloud controller returns errors and warnings", func() { 133 BeforeEach(func() { 134 updateResponse := `{ 135 "errors": [ 136 { 137 "code": 10010, 138 "detail": "Org not found", 139 "title": "CF-ResourceNotFound" 140 } 141 ] 142 }` 143 server.AppendHandlers( 144 CombineHandlers( 145 VerifyRequest(http.MethodPatch, fmt.Sprintf("/v3/spaces/%s/features/ssh", spaceGUID)), 146 RespondWith(http.StatusTeapot, updateResponse, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 147 ), 148 ) 149 }) 150 151 It("returns the error and all warnings", func() { 152 Expect(executeErr).To(MatchError(ccerror.V3UnexpectedResponseError{ 153 ResponseCode: http.StatusTeapot, 154 V3ErrorResponse: ccerror.V3ErrorResponse{ 155 Errors: []ccerror.V3Error{ 156 { 157 Code: 10010, 158 Detail: "Org not found", 159 Title: "CF-ResourceNotFound", 160 }, 161 }, 162 }, 163 })) 164 Expect(warnings).To(ConsistOf("this is a warning")) 165 }) 166 }) 167 }) 168 }) 169 })