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 }