github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cloudlets/v3/list_cloudlets_test.go (about) 1 package v3 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestListCloudlets(t *testing.T) { 15 tests := map[string]struct { 16 responseStatus int 17 responseBody string 18 expectedPath string 19 expectedResponse []ListCloudletsItem 20 withError func(*testing.T, error) 21 }{ 22 "200 OK": { 23 responseStatus: http.StatusOK, 24 responseBody: ` 25 [ 26 { 27 "cloudletName": "API_PRIORITIZATION", 28 "cloudletType": "AP" 29 }, 30 { 31 "cloudletName": "AUDIENCE_SEGMENTATION", 32 "cloudletType": "AS" 33 }, 34 { 35 "cloudletName": "EDGE_REDIRECTOR", 36 "cloudletType": "ER" 37 }, 38 { 39 "cloudletName": "FORWARD_REWRITE", 40 "cloudletType": "FR" 41 }, 42 { 43 "cloudletName": "PHASED_RELEASE", 44 "cloudletType": "CD" 45 }, 46 { 47 "cloudletName": "REQUEST_CONTROL", 48 "cloudletType": "IG" 49 } 50 ]`, 51 expectedPath: "/cloudlets/v3/cloudlet-info", 52 expectedResponse: []ListCloudletsItem{ 53 { 54 CloudletName: "API_PRIORITIZATION", 55 CloudletType: "AP", 56 }, 57 { 58 CloudletName: "AUDIENCE_SEGMENTATION", 59 CloudletType: "AS", 60 }, 61 { 62 CloudletName: "EDGE_REDIRECTOR", 63 CloudletType: "ER", 64 }, 65 { 66 CloudletName: "FORWARD_REWRITE", 67 CloudletType: "FR", 68 }, 69 { 70 CloudletName: "PHASED_RELEASE", 71 CloudletType: "CD", 72 }, 73 { 74 CloudletName: "REQUEST_CONTROL", 75 CloudletType: "IG", 76 }, 77 }, 78 }, 79 "500 Internal Server Error": { 80 responseStatus: http.StatusInternalServerError, 81 responseBody: ` 82 { 83 "type": "internal_error", 84 "title": "Internal Server Error", 85 "status": 500, 86 "requestId": "1", 87 "requestTime": "12:00", 88 "clientIp": "1.1.1.1", 89 "serverIp": "2.2.2.2", 90 "method": "GET" 91 }`, 92 expectedPath: "/cloudlets/v3/cloudlet-info", 93 withError: func(t *testing.T, err error) { 94 want := &Error{ 95 Type: "internal_error", 96 Title: "Internal Server Error", 97 Status: http.StatusInternalServerError, 98 RequestID: "1", 99 RequestTime: "12:00", 100 ClientIP: "1.1.1.1", 101 ServerIP: "2.2.2.2", 102 Method: "GET", 103 } 104 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 105 }, 106 }, 107 } 108 109 for name, test := range tests { 110 t.Run(name, func(t *testing.T) { 111 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 112 assert.Equal(t, test.expectedPath, r.URL.String()) 113 assert.Equal(t, http.MethodGet, r.Method) 114 w.WriteHeader(test.responseStatus) 115 _, err := w.Write([]byte(test.responseBody)) 116 assert.NoError(t, err) 117 })) 118 client := mockAPIClient(t, mockServer) 119 result, err := client.ListCloudlets(context.Background()) 120 if test.withError != nil { 121 test.withError(t, err) 122 return 123 } 124 require.NoError(t, err) 125 assert.Equal(t, test.expectedResponse, result) 126 }) 127 } 128 }