github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/botman/custom_bot_category_sequence_test.go (about) 1 package botman 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/session" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 // Test Get CustomBotCategorySequence 16 func TestBotman_GetCustomBotCategorySequence(t *testing.T) { 17 tests := map[string]struct { 18 params GetCustomBotCategorySequenceRequest 19 responseStatus int 20 responseBody string 21 expectedPath string 22 expectedResponse *CustomBotCategorySequenceResponse 23 withError func(*testing.T, error) 24 }{ 25 "200 OK": { 26 params: GetCustomBotCategorySequenceRequest{ 27 ConfigID: 43253, 28 Version: 15, 29 }, 30 responseStatus: http.StatusOK, 31 responseBody: `{"sequence":["cc9c3f89-e179-4892-89cf-d5e623ba9dc7","d79285df-e399-43e8-bb0f-c0d980a88e4f","afa309b8-4fd5-430e-a061-1c61df1d2ac2"]}`, 32 expectedPath: "/appsec/v1/configs/43253/versions/15/custom-bot-category-sequence", 33 expectedResponse: &CustomBotCategorySequenceResponse{ 34 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 35 }, 36 }, 37 "500 internal server error": { 38 params: GetCustomBotCategorySequenceRequest{ 39 ConfigID: 43253, 40 Version: 15, 41 }, 42 responseStatus: http.StatusInternalServerError, 43 responseBody: ` 44 { 45 "type": "internal_error", 46 "title": "Internal Server Error", 47 "detail": "Error fetching data" 48 }`, 49 expectedPath: "/appsec/v1/configs/43253/versions/15/custom-bot-category-sequence", 50 withError: func(t *testing.T, err error) { 51 want := &Error{ 52 Type: "internal_error", 53 Title: "Internal Server Error", 54 Detail: "Error fetching data", 55 StatusCode: http.StatusInternalServerError, 56 } 57 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 58 }, 59 }, 60 "Missing ConfigID": { 61 params: GetCustomBotCategorySequenceRequest{ 62 Version: 15, 63 }, 64 withError: func(t *testing.T, err error) { 65 want := ErrStructValidation 66 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 67 assert.Contains(t, err.Error(), "ConfigID") 68 }, 69 }, 70 "Missing Version": { 71 params: GetCustomBotCategorySequenceRequest{ 72 ConfigID: 43253, 73 }, 74 withError: func(t *testing.T, err error) { 75 want := ErrStructValidation 76 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 77 assert.Contains(t, err.Error(), "Version") 78 }, 79 }, 80 } 81 82 for name, test := range tests { 83 t.Run(name, func(t *testing.T) { 84 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 85 assert.Equal(t, test.expectedPath, r.URL.String()) 86 assert.Equal(t, http.MethodGet, r.Method) 87 w.WriteHeader(test.responseStatus) 88 _, err := w.Write([]byte(test.responseBody)) 89 assert.NoError(t, err) 90 })) 91 client := mockAPIClient(t, mockServer) 92 result, err := client.GetCustomBotCategorySequence(context.Background(), test.params) 93 if test.withError != nil { 94 test.withError(t, err) 95 return 96 } 97 require.NoError(t, err) 98 assert.Equal(t, test.expectedResponse, result) 99 }) 100 } 101 } 102 103 // Test Update CustomBotCategorySequence. 104 func TestBotman_UpdateCustomBotCategorySequence(t *testing.T) { 105 tests := map[string]struct { 106 params UpdateCustomBotCategorySequenceRequest 107 responseStatus int 108 responseBody string 109 expectedPath string 110 expectedResponse *CustomBotCategorySequenceResponse 111 withError func(*testing.T, error) 112 }{ 113 "200 Success": { 114 params: UpdateCustomBotCategorySequenceRequest{ 115 ConfigID: 43253, 116 Version: 15, 117 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 118 }, 119 responseStatus: http.StatusOK, 120 responseBody: `{"sequence":["cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"]}`, 121 expectedResponse: &CustomBotCategorySequenceResponse{ 122 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 123 }, 124 expectedPath: "/appsec/v1/configs/43253/versions/15/custom-bot-category-sequence", 125 }, 126 "500 internal server error": { 127 params: UpdateCustomBotCategorySequenceRequest{ 128 ConfigID: 43253, 129 Version: 15, 130 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 131 }, 132 responseStatus: http.StatusInternalServerError, 133 responseBody: ` 134 { 135 "type": "internal_error", 136 "title": "Internal Server Error", 137 "detail": "Error updating data" 138 }`, 139 expectedPath: "/appsec/v1/configs/43253/versions/15/custom-bot-category-sequence", 140 withError: func(t *testing.T, err error) { 141 want := &Error{ 142 Type: "internal_error", 143 Title: "Internal Server Error", 144 Detail: "Error updating data", 145 StatusCode: http.StatusInternalServerError, 146 } 147 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 148 }, 149 }, 150 "Missing ConfigID": { 151 params: UpdateCustomBotCategorySequenceRequest{ 152 Version: 15, 153 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 154 }, 155 withError: func(t *testing.T, err error) { 156 want := ErrStructValidation 157 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 158 assert.Contains(t, err.Error(), "ConfigID") 159 }, 160 }, 161 "Missing Version": { 162 params: UpdateCustomBotCategorySequenceRequest{ 163 ConfigID: 43253, 164 Sequence: []string{"cc9c3f89-e179-4892-89cf-d5e623ba9dc7", "d79285df-e399-43e8-bb0f-c0d980a88e4f", "afa309b8-4fd5-430e-a061-1c61df1d2ac2"}, 165 }, 166 withError: func(t *testing.T, err error) { 167 want := ErrStructValidation 168 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 169 assert.Contains(t, err.Error(), "Version") 170 }, 171 }, 172 "Missing Sequence": { 173 params: UpdateCustomBotCategorySequenceRequest{ 174 ConfigID: 43253, 175 Version: 15, 176 }, 177 withError: func(t *testing.T, err error) { 178 want := ErrStructValidation 179 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 180 assert.Contains(t, err.Error(), "Sequence") 181 }, 182 }, 183 } 184 185 for name, test := range tests { 186 t.Run(name, func(t *testing.T) { 187 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 188 assert.Equal(t, test.expectedPath, r.URL.String()) 189 assert.Equal(t, http.MethodPut, r.Method) 190 w.WriteHeader(test.responseStatus) 191 if len(test.responseBody) > 0 { 192 _, err := w.Write([]byte(test.responseBody)) 193 assert.NoError(t, err) 194 } 195 })) 196 client := mockAPIClient(t, mockServer) 197 result, err := client.UpdateCustomBotCategorySequence( 198 session.ContextWithOptions( 199 context.Background()), test.params) 200 if test.withError != nil { 201 test.withError(t, err) 202 return 203 } 204 require.NoError(t, err) 205 assert.Equal(t, test.expectedResponse, result) 206 }) 207 } 208 }