github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_pii_learning_test.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "encoding/json" 6 "errors" 7 "net/http" 8 "net/http/httptest" 9 "strings" 10 "testing" 11 12 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/session" 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestAppsec_GetAdvancedSettingsPIILearning(t *testing.T) { 18 19 result := AdvancedSettingsPIILearningResponse{} 20 21 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsPIILearning/AdvancedSettingsPIILearning.json")) 22 err := json.Unmarshal([]byte(respData), &result) 23 require.NoError(t, err) 24 25 tests := map[string]struct { 26 params GetAdvancedSettingsPIILearningRequest 27 responseStatus int 28 responseBody string 29 expectedPath string 30 expectedResponse *AdvancedSettingsPIILearningResponse 31 withError error 32 }{ 33 "200 OK": { 34 params: GetAdvancedSettingsPIILearningRequest{ 35 ConfigVersion: ConfigVersion{ 36 ConfigID: 43253, 37 Version: 15, 38 }, 39 }, 40 responseStatus: http.StatusOK, 41 responseBody: string(respData), 42 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/pii-learning", 43 expectedResponse: &result, 44 }, 45 "500 internal server error": { 46 params: GetAdvancedSettingsPIILearningRequest{ 47 ConfigVersion: ConfigVersion{ 48 ConfigID: 43253, 49 Version: 15, 50 }, 51 }, 52 responseStatus: http.StatusInternalServerError, 53 responseBody: ` 54 { 55 "type": "internal_error", 56 "title": "Internal Server Error", 57 "detail": "Error fetching AdvancedSettingsPIILearning", 58 "status": 500 59 }`, 60 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/pii-learning", 61 withError: &Error{ 62 Type: "internal_error", 63 Title: "Internal Server Error", 64 Detail: "Error fetching AdvancedSettingsPIILearning", 65 StatusCode: http.StatusInternalServerError, 66 }, 67 }, 68 } 69 70 for name, test := range tests { 71 t.Run(name, func(t *testing.T) { 72 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 73 assert.Equal(t, test.expectedPath, r.URL.String()) 74 assert.Equal(t, http.MethodGet, r.Method) 75 w.WriteHeader(test.responseStatus) 76 _, err := w.Write([]byte(test.responseBody)) 77 assert.NoError(t, err) 78 })) 79 client := mockAPIClient(t, mockServer) 80 result, err := client.GetAdvancedSettingsPIILearning( 81 session.ContextWithOptions(context.Background()), 82 test.params) 83 if test.withError != nil { 84 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 85 return 86 } 87 require.NoError(t, err) 88 assert.Equal(t, test.expectedResponse, result) 89 }) 90 } 91 } 92 93 func TestAppSec_UpdateAdvancedSettingsPIILearning(t *testing.T) { 94 result := AdvancedSettingsPIILearningResponse{} 95 96 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsPIILearning/AdvancedSettingsPIILearning.json")) 97 err := json.Unmarshal([]byte(respData), &result) 98 require.NoError(t, err) 99 100 req := UpdateAdvancedSettingsPIILearningRequest{} 101 102 reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsPIILearning/AdvancedSettingsPIILearning.json")) 103 err = json.Unmarshal([]byte(reqData), &req) 104 require.NoError(t, err) 105 106 tests := map[string]struct { 107 params UpdateAdvancedSettingsPIILearningRequest 108 responseStatus int 109 responseBody string 110 expectedPath string 111 expectedResponse *AdvancedSettingsPIILearningResponse 112 withError error 113 expectedBody string 114 expectValidationError bool 115 }{ 116 "validation error": { 117 params: UpdateAdvancedSettingsPIILearningRequest{ 118 ConfigVersion: ConfigVersion{ 119 ConfigID: 43253, 120 }, 121 EnablePIILearning: false, 122 }, 123 expectValidationError: true, 124 }, 125 "200 Success": { 126 params: UpdateAdvancedSettingsPIILearningRequest{ 127 ConfigVersion: ConfigVersion{ 128 ConfigID: 43253, 129 Version: 15, 130 }, 131 EnablePIILearning: true, 132 }, 133 expectedBody: ` 134 { 135 "enablePiiLearning": true 136 }`, 137 responseStatus: http.StatusCreated, 138 responseBody: respData, 139 expectedResponse: &result, 140 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/pii-learning", 141 }, 142 "500 internal server error": { 143 params: UpdateAdvancedSettingsPIILearningRequest{ 144 ConfigVersion: ConfigVersion{ 145 ConfigID: 43253, 146 Version: 15, 147 }, 148 EnablePIILearning: true, 149 }, 150 responseStatus: http.StatusInternalServerError, 151 responseBody: ` 152 { 153 "type": "internal_error", 154 "title": "Internal Server Error", 155 "detail": "Error creating AdvancedSettingsPIILearning" 156 }`, 157 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/pii-learning", 158 withError: &Error{ 159 Type: "internal_error", 160 Title: "Internal Server Error", 161 Detail: "Error creating AdvancedSettingsPIILearning", 162 StatusCode: http.StatusInternalServerError, 163 }, 164 }, 165 } 166 167 for name, test := range tests { 168 t.Run(name, func(t *testing.T) { 169 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 170 assert.Equal(t, http.MethodPut, r.Method) 171 w.WriteHeader(test.responseStatus) 172 if len(test.responseBody) > 0 { 173 _, err := w.Write([]byte(test.responseBody)) 174 assert.NoError(t, err) 175 } 176 if test.withError == nil { 177 var reqBody interface{} 178 err = json.NewDecoder(r.Body).Decode(&reqBody) 179 require.NoError(t, err, "Error while decoding request body") 180 181 var expectedBody interface{} 182 err = json.Unmarshal([]byte(test.expectedBody), &expectedBody) 183 require.NoError(t, err, "Error while parsing expected body to JSON") 184 185 assert.Equal(t, expectedBody, reqBody) 186 } 187 })) 188 client := mockAPIClient(t, mockServer) 189 result, err := client.UpdateAdvancedSettingsPIILearning( 190 session.ContextWithOptions(context.Background()), 191 test.params) 192 if test.expectValidationError { 193 assert.True(t, strings.Contains(err.Error(), "struct validation")) 194 return 195 } 196 if test.withError != nil { 197 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 198 return 199 } 200 require.NoError(t, err) 201 assert.Equal(t, test.expectedResponse, result) 202 }) 203 } 204 }