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