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  }