github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/networklists/activations_test.go (about)

     1  package networklists
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"errors"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"testing"
    10  
    11  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/v2/pkg/session"
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestApsec_ListActivations(t *testing.T) {
    17  	result := GetActivationsResponse{}
    18  	respData := compactJSON(loadFixtureBytes("testdata/TestActivations/Activations.json"))
    19  	json.Unmarshal([]byte(respData), &result)
    20  	tests := map[string]struct {
    21  		params           GetActivationsRequest
    22  		responseStatus   int
    23  		responseBody     string
    24  		expectedPath     string
    25  		expectedResponse *GetActivationsResponse
    26  		withError        error
    27  		headers          http.Header
    28  	}{
    29  		"200 OK": {
    30  			params: GetActivationsRequest{UniqueID: "38069_INTERNALWHITELIST", Network: "STAGING"},
    31  			headers: http.Header{
    32  				"Content-Type": []string{"application/json"},
    33  			},
    34  			responseStatus:   http.StatusOK,
    35  			responseBody:     respData,
    36  			expectedPath:     "/network-list/v2/network-lists/38069_INTERNALWHITELIST/environments/STAGING/status",
    37  			expectedResponse: &result,
    38  		},
    39  		"500 internal server error": {
    40  			params:         GetActivationsRequest{UniqueID: "38069_INTERNALWHITELIST", Network: "STAGING"},
    41  			headers:        http.Header{},
    42  			responseStatus: http.StatusInternalServerError,
    43  			responseBody: `
    44  {
    45      "type": "internal_error",
    46      "title": "Internal Server Error",
    47      "detail": "Error fetching Activations",
    48      "status": 500
    49  }`,
    50  			expectedPath: "/network-list/v2/network-lists/38069_INTERNALWHITELIST/environments/STAGING/status",
    51  			withError: &Error{
    52  				Type:       "internal_error",
    53  				Title:      "Internal Server Error",
    54  				Detail:     "Error fetching Activations",
    55  				StatusCode: http.StatusInternalServerError,
    56  			},
    57  		},
    58  	}
    59  	for name, test := range tests {
    60  		t.Run(name, func(t *testing.T) {
    61  			mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    62  				assert.Equal(t, test.expectedPath, r.URL.String())
    63  				assert.Equal(t, http.MethodGet, r.Method)
    64  				w.WriteHeader(test.responseStatus)
    65  				_, err := w.Write([]byte(test.responseBody))
    66  				assert.NoError(t, err)
    67  			}))
    68  			client := mockAPIClient(t, mockServer)
    69  			result, err := client.GetActivations(
    70  				session.ContextWithOptions(
    71  					context.Background(),
    72  					session.WithContextHeaders(test.headers),
    73  				),
    74  				test.params)
    75  			if test.withError != nil {
    76  				assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
    77  				return
    78  			}
    79  			require.NoError(t, err)
    80  			assert.Equal(t, test.expectedResponse, result)
    81  		})
    82  	}
    83  }
    84  
    85  // Test Activations
    86  func TestAppSec_GetActivations(t *testing.T) {
    87  	result := GetActivationsResponse{}
    88  	respData := compactJSON(loadFixtureBytes("testdata/TestActivations/Activations.json"))
    89  	json.Unmarshal([]byte(respData), &result)
    90  	tests := map[string]struct {
    91  		params           GetActivationsRequest
    92  		responseStatus   int
    93  		responseBody     string
    94  		expectedPath     string
    95  		expectedResponse *GetActivationsResponse
    96  		withError        error
    97  	}{
    98  		"200 OK": {
    99  			params:           GetActivationsRequest{UniqueID: "38069_INTERNALWHITELIST", Network: "STAGING"},
   100  			responseStatus:   http.StatusOK,
   101  			responseBody:     respData,
   102  			expectedPath:     "/network-list/v2/network-lists/38069_INTERNALWHITELIST/environments/STAGING/status",
   103  			expectedResponse: &result,
   104  		},
   105  		"500 internal server error": {
   106  			params:         GetActivationsRequest{UniqueID: "38069_INTERNALWHITELIST", Network: "STAGING"},
   107  			responseStatus: http.StatusInternalServerError,
   108  			responseBody: `
   109  {
   110      "type": "internal_error",
   111      "title": "Internal Server Error",
   112      "detail": "Error fetching Activations"
   113  }`,
   114  			expectedPath: "/network-list/v2/network-lists/38069_INTERNALWHITELIST/environments/STAGING/status",
   115  			withError: &Error{
   116  				Type:       "internal_error",
   117  				Title:      "Internal Server Error",
   118  				Detail:     "Error fetching Activations",
   119  				StatusCode: http.StatusInternalServerError,
   120  			},
   121  		},
   122  	}
   123  	for name, test := range tests {
   124  		t.Run(name, func(t *testing.T) {
   125  			mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
   126  				assert.Equal(t, test.expectedPath, r.URL.String())
   127  				assert.Equal(t, http.MethodGet, r.Method)
   128  				w.WriteHeader(test.responseStatus)
   129  				_, err := w.Write([]byte(test.responseBody))
   130  				assert.NoError(t, err)
   131  			}))
   132  			client := mockAPIClient(t, mockServer)
   133  			result, err := client.GetActivations(context.Background(), test.params)
   134  			if test.withError != nil {
   135  				assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
   136  				return
   137  			}
   138  			require.NoError(t, err)
   139  			assert.Equal(t, test.expectedResponse, result)
   140  		})
   141  	}
   142  }