github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/cloudlets/policy_version_activation_test.go (about) 1 package cloudlets 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestListPolicyActivations(t *testing.T) { 15 tests := map[string]struct { 16 parameters ListPolicyActivationsRequest 17 uri string 18 responseStatus int 19 responseBody string 20 expectedResponse []PolicyActivation 21 withError error 22 }{ 23 "200 staging ok": { 24 parameters: ListPolicyActivationsRequest{ 25 PropertyName: "www.rc-cloudlet.com", 26 Network: "staging", 27 PolicyID: 1234, 28 }, 29 uri: "/cloudlets/api/v2/policies/1234/activations?network=staging&propertyName=www.rc-cloudlet.com", 30 responseStatus: http.StatusOK, 31 responseBody: `[ 32 { 33 "serviceVersion": null, 34 "apiVersion": "2.0", 35 "network": "staging", 36 "policyInfo": { 37 "policyId": 2962, 38 "name": "RequestControlPolicy", 39 "version": 1, 40 "status": "active", 41 "statusDetail": "File successfully deployed to Akamai's network", 42 "activationDate": 1427428800000, 43 "activatedBy": "jsmith" 44 }, 45 "propertyInfo": { 46 "name": "www.rc-cloudlet.com", 47 "version": 0, 48 "groupId": 40498, 49 "status": "inactive", 50 "activatedBy": null, 51 "activationDate": 0 52 } 53 } 54 ]`, 55 expectedResponse: []PolicyActivation{{ 56 APIVersion: "2.0", 57 Network: PolicyActivationNetworkStaging, 58 PropertyInfo: PropertyInfo{ 59 Name: "www.rc-cloudlet.com", 60 Version: 0, 61 GroupID: 40498, 62 Status: PolicyActivationStatusInactive, 63 ActivatedBy: "", 64 ActivationDate: 0, 65 }, 66 PolicyInfo: PolicyInfo{ 67 PolicyID: 2962, 68 Name: "RequestControlPolicy", 69 Version: 1, 70 Status: PolicyActivationStatusActive, 71 StatusDetail: "File successfully deployed to Akamai's network", 72 ActivatedBy: "jsmith", 73 ActivationDate: 1427428800000, 74 }, 75 }}, 76 }, 77 "empty Network should not appear in uri query": { 78 parameters: ListPolicyActivationsRequest{ 79 PropertyName: "www.rc-cloudlet.com", 80 Network: "", 81 PolicyID: 1234, 82 }, 83 responseBody: `[]`, 84 expectedResponse: []PolicyActivation{}, 85 responseStatus: http.StatusOK, 86 uri: "/cloudlets/api/v2/policies/1234/activations?propertyName=www.rc-cloudlet.com", 87 }, 88 "empty PropertyName should not appear in uri query": { 89 parameters: ListPolicyActivationsRequest{ 90 PropertyName: "", 91 Network: "staging", 92 PolicyID: 1234, 93 }, 94 responseBody: `[]`, 95 expectedResponse: []PolicyActivation{}, 96 responseStatus: http.StatusOK, 97 uri: "/cloudlets/api/v2/policies/1234/activations?network=staging", 98 }, 99 "not valid network": { 100 parameters: ListPolicyActivationsRequest{ 101 PropertyName: "www.rc-cloudlet.com", 102 Network: "not valid", 103 PolicyID: 1234, 104 }, 105 withError: ErrStructValidation, 106 }, 107 "404 not found": { 108 parameters: ListPolicyActivationsRequest{ 109 PropertyName: "www.rc-cloudlet.com", 110 Network: "staging", 111 PolicyID: 1234, 112 }, 113 responseStatus: http.StatusNotFound, 114 uri: "/cloudlets/api/v2/policies/1234/activations?network=staging&propertyName=www.rc-cloudlet.com", 115 withError: &Error{StatusCode: 404}, 116 }, 117 "500 server error": { 118 parameters: ListPolicyActivationsRequest{ 119 PropertyName: "www.rc-cloudlet.com", 120 Network: "staging", 121 PolicyID: 1234, 122 }, 123 responseStatus: http.StatusInternalServerError, 124 uri: "/cloudlets/api/v2/policies/1234/activations?network=staging&propertyName=www.rc-cloudlet.com", 125 withError: &Error{StatusCode: 500}, 126 }, 127 } 128 for name, test := range tests { 129 t.Run(name, func(t *testing.T) { 130 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 131 assert.Equal(t, test.uri, r.URL.String()) 132 assert.Equal(t, http.MethodGet, r.Method) 133 w.WriteHeader(test.responseStatus) 134 _, err := w.Write([]byte(test.responseBody)) 135 assert.NoError(t, err) 136 })) 137 client := mockAPIClient(t, mockServer) 138 result, err := client.ListPolicyActivations(context.Background(), test.parameters) 139 if test.withError != nil { 140 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 141 return 142 } 143 require.NoError(t, err) 144 assert.Equal(t, test.expectedResponse, result) 145 }) 146 } 147 } 148 149 func TestActivatePolicyVersion(t *testing.T) { 150 tests := map[string]struct { 151 parameters ActivatePolicyVersionRequest 152 responseStatus int 153 uri string 154 responseBody string 155 expectedActivation PolicyVersionActivation 156 withError func(*testing.T, error) 157 }{ 158 "200 Policy version activation": { 159 responseStatus: http.StatusOK, 160 parameters: ActivatePolicyVersionRequest{ 161 PolicyID: 1234, 162 Version: 1, 163 PolicyVersionActivation: PolicyVersionActivation{ 164 Network: PolicyActivationNetworkStaging, 165 AdditionalPropertyNames: []string{"www.rc-cloudlet.com"}, 166 }, 167 }, 168 responseBody: `{ 169 "revisionId": 11870, 170 "policyId": 1001, 171 "version": 2, 172 "description": "v2", 173 "createdBy": "jsmith", 174 "createDate": 1427133784903, 175 "lastModifiedBy": "sjones", 176 "lastModifiedDate": 1427133805767, 177 "activations": [], 178 "matchRules": [], 179 "rulesLocked": false 180 }`, 181 }, 182 "any request validation error": { 183 parameters: ActivatePolicyVersionRequest{}, 184 withError: func(t *testing.T, err error) { 185 assert.True(t, errors.Is(err, ErrStructValidation), "want: %s; got: %s", ErrStructValidation, err) 186 }, 187 }, 188 "any kind of server error": { 189 responseStatus: http.StatusInternalServerError, 190 parameters: ActivatePolicyVersionRequest{ 191 PolicyID: 1234, 192 Version: 1, 193 PolicyVersionActivation: PolicyVersionActivation{ 194 Network: PolicyActivationNetworkStaging, 195 AdditionalPropertyNames: []string{"www.rc-cloudlet.com"}, 196 }, 197 }, 198 withError: func(t *testing.T, err error) { 199 assert.True(t, errors.Is(err, ErrActivatePolicyVersion), "want: %s; got: %s", ErrActivatePolicyVersion, err) 200 }, 201 }, 202 "property name not existing": { 203 responseStatus: http.StatusBadRequest, 204 parameters: ActivatePolicyVersionRequest{ 205 PolicyID: 1234, 206 Version: 1, 207 PolicyVersionActivation: PolicyVersionActivation{ 208 Network: PolicyActivationNetworkStaging, 209 AdditionalPropertyNames: []string{"www.rc-cloudlet.com"}, 210 }, 211 }, 212 withError: func(t *testing.T, err error) { 213 assert.Containsf(t, err.Error(), "Requested propertyName \\\"XYZ\\\" does not exist", "want: %s; got: %s", ErrActivatePolicyVersion, err) 214 assert.True(t, errors.Is(err, ErrActivatePolicyVersion), "want: %s; got: %s", ErrActivatePolicyVersion, err) 215 }, 216 responseBody: ` 217 { 218 "detail": "Requested propertyName \"XYZ\" does not exist", 219 "errorCode": -1, 220 "errorMessage": "Requested property Name \"XYZ\" does not exist", 221 "instance": "s8dsf8sf8df8", 222 "stackTrace": "java.lang.IllegalArgumentException: Requested property Name \"XYZ\" does not exist\n\tat com.akamai..." 223 } 224 `, 225 }, 226 "validation errors": { 227 responseStatus: http.StatusBadRequest, 228 parameters: ActivatePolicyVersionRequest{ 229 PolicyID: 1234, 230 Version: 1, 231 PolicyVersionActivation: PolicyVersionActivation{ 232 Network: "", 233 AdditionalPropertyNames: []string{}, 234 }, 235 }, 236 withError: func(t *testing.T, err error) { 237 assert.Containsf(t, err.Error(), "RequestBody.Network: cannot be blank", "want: %s; got: %s", ErrStructValidation, err) 238 assert.Containsf(t, err.Error(), "RequestBody.AdditionalPropertyNames: cannot be blank", "want: %s; got: %s", ErrStructValidation, err) 239 assert.True(t, errors.Is(err, ErrStructValidation), "want: %s; got: %s", ErrStructValidation, err) 240 }, 241 }, 242 } 243 244 for name, test := range tests { 245 t.Run(name, func(t *testing.T) { 246 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 247 assert.Equal(t, http.MethodPost, r.Method) 248 w.WriteHeader(test.responseStatus) 249 _, err := w.Write([]byte(test.responseBody)) 250 assert.NoError(t, err) 251 })) 252 client := mockAPIClient(t, mockServer) 253 err := client.ActivatePolicyVersion(context.Background(), test.parameters) 254 if test.withError != nil { 255 test.withError(t, err) 256 return 257 } 258 require.NoError(t, err) 259 }) 260 } 261 }