github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/networklists/network_list_description_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_ListNetworkListDescription(t *testing.T) { 17 18 result := GetNetworkListDescriptionResponse{} 19 20 respData := compactJSON(loadFixtureBytes("testdata/TestNetworkListDescription/NetworkListDescription.json")) 21 err := json.Unmarshal([]byte(respData), &result) 22 require.NoError(t, err) 23 24 tests := map[string]struct { 25 params GetNetworkListDescriptionRequest 26 responseStatus int 27 responseBody string 28 expectedPath string 29 expectedResponse *GetNetworkListDescriptionResponse 30 withError error 31 headers http.Header 32 }{ 33 "200 OK": { 34 params: GetNetworkListDescriptionRequest{UniqueID: "Test"}, 35 headers: http.Header{ 36 "Content-Type": []string{"application/json"}, 37 }, 38 responseStatus: http.StatusOK, 39 responseBody: respData, 40 expectedPath: "/network-list/v2/network-lists/Test", 41 expectedResponse: &result, 42 }, 43 "500 internal server error": { 44 params: GetNetworkListDescriptionRequest{UniqueID: "Test"}, 45 headers: http.Header{}, 46 responseStatus: http.StatusInternalServerError, 47 responseBody: ` 48 { 49 "type": "internal_error", 50 "title": "Internal Server Error", 51 "detail": "Error fetching NetworkListDescription", 52 "status": 500 53 }`, 54 expectedPath: "/network-list/v2/network-lists/Test", 55 withError: &Error{ 56 Type: "internal_error", 57 Title: "Internal Server Error", 58 Detail: "Error fetching NetworkListDescription", 59 StatusCode: http.StatusInternalServerError, 60 }, 61 }, 62 } 63 64 for name, test := range tests { 65 t.Run(name, func(t *testing.T) { 66 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 67 assert.Equal(t, test.expectedPath, r.URL.String()) 68 assert.Equal(t, http.MethodGet, r.Method) 69 w.WriteHeader(test.responseStatus) 70 _, err := w.Write([]byte(test.responseBody)) 71 assert.NoError(t, err) 72 })) 73 client := mockAPIClient(t, mockServer) 74 result, err := client.GetNetworkListDescription( 75 session.ContextWithOptions( 76 context.Background(), 77 session.WithContextHeaders(test.headers), 78 ), 79 test.params) 80 if test.withError != nil { 81 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 82 return 83 } 84 require.NoError(t, err) 85 assert.Equal(t, test.expectedResponse, result) 86 }) 87 } 88 } 89 90 // Test NetworkListDescription 91 func TestAppSec_GetNetworkListDescription(t *testing.T) { 92 93 result := GetNetworkListDescriptionResponse{} 94 95 respData := compactJSON(loadFixtureBytes("testdata/TestNetworkListDescription/NetworkListDescription.json")) 96 err := json.Unmarshal([]byte(respData), &result) 97 require.NoError(t, err) 98 99 tests := map[string]struct { 100 params GetNetworkListDescriptionRequest 101 responseStatus int 102 responseBody string 103 expectedPath string 104 expectedResponse *GetNetworkListDescriptionResponse 105 withError error 106 }{ 107 "200 OK": { 108 params: GetNetworkListDescriptionRequest{UniqueID: "Test"}, 109 responseStatus: http.StatusOK, 110 responseBody: respData, 111 expectedPath: "/network-list/v2/network-lists/Test", 112 expectedResponse: &result, 113 }, 114 "500 internal server error": { 115 params: GetNetworkListDescriptionRequest{UniqueID: "Test"}, 116 responseStatus: http.StatusInternalServerError, 117 responseBody: ` 118 { 119 "type": "internal_error", 120 "title": "Internal Server Error", 121 "detail": "Error fetching NetworkListDescription" 122 }`, 123 expectedPath: "/network-list/v2/network-lists/Test", 124 withError: &Error{ 125 Type: "internal_error", 126 Title: "Internal Server Error", 127 Detail: "Error fetching NetworkListDescription", 128 StatusCode: http.StatusInternalServerError, 129 }, 130 }, 131 } 132 133 for name, test := range tests { 134 t.Run(name, func(t *testing.T) { 135 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 136 assert.Equal(t, test.expectedPath, r.URL.String()) 137 assert.Equal(t, http.MethodGet, r.Method) 138 w.WriteHeader(test.responseStatus) 139 _, err := w.Write([]byte(test.responseBody)) 140 assert.NoError(t, err) 141 })) 142 client := mockAPIClient(t, mockServer) 143 result, err := client.GetNetworkListDescription(context.Background(), test.params) 144 if test.withError != nil { 145 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 146 return 147 } 148 require.NoError(t, err) 149 assert.Equal(t, test.expectedResponse, result) 150 }) 151 } 152 } 153 154 // Test Update NetworkListDescription. 155 func TestAppSec_UpdateNetworkListDescription(t *testing.T) { 156 result := UpdateNetworkListDescriptionResponse{} 157 158 respData := compactJSON(loadFixtureBytes("testdata/TestNetworkListDescription/NetworkListDescription.json")) 159 err := json.Unmarshal([]byte(respData), &result) 160 require.NoError(t, err) 161 162 req := UpdateNetworkListDescriptionRequest{} 163 164 reqData := compactJSON(loadFixtureBytes("testdata/TestNetworkListDescription/NetworkListDescription.json")) 165 err = json.Unmarshal([]byte(reqData), &req) 166 require.NoError(t, err) 167 168 tests := map[string]struct { 169 params UpdateNetworkListDescriptionRequest 170 responseStatus int 171 responseBody string 172 expectedPath string 173 expectedResponse *UpdateNetworkListDescriptionResponse 174 withError error 175 headers http.Header 176 }{ 177 "200 Success": { 178 params: UpdateNetworkListDescriptionRequest{UniqueID: "Test"}, 179 headers: http.Header{ 180 "Content-Type": []string{"application/json;charset=UTF-8"}, 181 }, 182 responseStatus: http.StatusCreated, 183 responseBody: respData, 184 expectedResponse: &result, 185 expectedPath: "/network-list/v2/network-lists/Test/details", 186 }, 187 "500 internal server error": { 188 params: UpdateNetworkListDescriptionRequest{UniqueID: "Test"}, 189 responseStatus: http.StatusInternalServerError, 190 responseBody: ` 191 { 192 "type": "internal_error", 193 "title": "Internal Server Error", 194 "detail": "Error creating NetworkListDescription" 195 }`, 196 expectedPath: "/network-list/v2/network-lists/Test/details", 197 withError: &Error{ 198 Type: "internal_error", 199 Title: "Internal Server Error", 200 Detail: "Error creating NetworkListDescription", 201 StatusCode: http.StatusInternalServerError, 202 }, 203 }, 204 } 205 206 for name, test := range tests { 207 t.Run(name, func(t *testing.T) { 208 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 209 assert.Equal(t, http.MethodPut, r.Method) 210 assert.Equal(t, test.expectedPath, r.URL.String()) 211 w.WriteHeader(test.responseStatus) 212 if len(test.responseBody) > 0 { 213 _, err := w.Write([]byte(test.responseBody)) 214 assert.NoError(t, err) 215 } 216 })) 217 client := mockAPIClient(t, mockServer) 218 result, err := client.UpdateNetworkListDescription( 219 session.ContextWithOptions( 220 context.Background(), 221 session.WithContextHeaders(test.headers)), test.params) 222 if test.withError != nil { 223 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 224 return 225 } 226 require.NoError(t, err) 227 assert.Equal(t, test.expectedResponse, result) 228 }) 229 } 230 }