github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cps/pre_verification_warnings_test.go (about) 1 package cps 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 TestGetPreVerificationWarnings(t *testing.T) { 15 tests := map[string]struct { 16 params GetChangeRequest 17 responseStatus int 18 responseBody string 19 expectedPath string 20 expectedResponse *PreVerificationWarnings 21 withError func(*testing.T, error) 22 }{ 23 "200 OK": { 24 params: GetChangeRequest{ 25 EnrollmentID: 1, 26 ChangeID: 2, 27 }, 28 responseStatus: http.StatusOK, 29 responseBody: ` 30 { 31 "warnings": "some warning" 32 }`, 33 expectedPath: "/cps/v2/enrollments/1/changes/2/input/info/pre-verification-warnings", 34 expectedResponse: &PreVerificationWarnings{Warnings: "some warning"}, 35 }, 36 "500 internal server error": { 37 params: GetChangeRequest{ 38 EnrollmentID: 1, 39 ChangeID: 2, 40 }, 41 responseStatus: http.StatusInternalServerError, 42 responseBody: ` 43 { 44 "type": "internal_error", 45 "title": "Internal Server Error", 46 "detail": "Error making request", 47 "status": 500 48 }`, 49 expectedPath: "/cps/v2/enrollments/1/changes/2/input/info/pre-verification-warnings", 50 withError: func(t *testing.T, err error) { 51 want := &Error{ 52 Type: "internal_error", 53 Title: "Internal Server Error", 54 Detail: "Error making request", 55 StatusCode: http.StatusInternalServerError, 56 } 57 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 58 }, 59 }, 60 "validation error": { 61 params: GetChangeRequest{}, 62 withError: func(t *testing.T, err error) { 63 assert.True(t, errors.Is(err, ErrStructValidation), "want: %s; got: %s", ErrStructValidation, err) 64 }, 65 }, 66 } 67 for name, test := range tests { 68 t.Run(name, func(t *testing.T) { 69 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 70 assert.Equal(t, test.expectedPath, r.URL.String()) 71 assert.Equal(t, http.MethodGet, r.Method) 72 assert.Equal(t, "application/vnd.akamai.cps.warnings.v1+json", r.Header.Get("Accept")) 73 w.WriteHeader(test.responseStatus) 74 _, err := w.Write([]byte(test.responseBody)) 75 assert.NoError(t, err) 76 })) 77 client := mockAPIClient(t, mockServer) 78 result, err := client.GetChangePreVerificationWarnings(context.Background(), test.params) 79 if test.withError != nil { 80 test.withError(t, err) 81 return 82 } 83 require.NoError(t, err) 84 assert.Equal(t, test.expectedResponse, result) 85 }) 86 } 87 } 88 89 func TestAcknowledgePreVerificationWarnings(t *testing.T) { 90 tests := map[string]struct { 91 params AcknowledgementRequest 92 responseStatus int 93 responseBody string 94 expectedPath string 95 expectedResponse *DVArray 96 withError func(*testing.T, error) 97 }{ 98 "204 no content": { 99 params: AcknowledgementRequest{ 100 EnrollmentID: 1, 101 ChangeID: 2, 102 Acknowledgement: Acknowledgement{"acknowledge"}, 103 }, 104 responseStatus: http.StatusNoContent, 105 expectedPath: "/cps/v2/enrollments/1/changes/2/input/update/pre-verification-warnings-ack", 106 }, 107 "500 internal server error": { 108 params: AcknowledgementRequest{ 109 EnrollmentID: 1, 110 ChangeID: 2, 111 Acknowledgement: Acknowledgement{"acknowledge"}, 112 }, 113 responseStatus: http.StatusInternalServerError, 114 expectedPath: "/cps/v2/enrollments/1/changes/2/input/update/pre-verification-warnings-ack", 115 responseBody: ` 116 { 117 "type": "internal_error", 118 "title": "Internal Server Error", 119 "detail": "Error making request", 120 "status": 500 121 }`, 122 withError: func(t *testing.T, err error) { 123 want := &Error{ 124 Type: "internal_error", 125 Title: "Internal Server Error", 126 Detail: "Error making request", 127 StatusCode: http.StatusInternalServerError, 128 } 129 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 130 }, 131 }, 132 "validation error": { 133 params: AcknowledgementRequest{}, 134 withError: func(t *testing.T, err error) { 135 assert.True(t, errors.Is(err, ErrStructValidation), "want: %s; got: %s", ErrStructValidation, err) 136 }, 137 }, 138 } 139 for name, test := range tests { 140 t.Run(name, func(t *testing.T) { 141 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 142 assert.Equal(t, test.expectedPath, r.URL.String()) 143 assert.Equal(t, http.MethodPost, r.Method) 144 assert.Equal(t, "application/vnd.akamai.cps.change-id.v1+json", r.Header.Get("Accept")) 145 assert.Equal(t, "application/vnd.akamai.cps.acknowledgement.v1+json; charset=utf-8", r.Header.Get("Content-Type")) 146 w.WriteHeader(test.responseStatus) 147 _, err := w.Write([]byte(test.responseBody)) 148 require.NoError(t, err) 149 })) 150 client := mockAPIClient(t, mockServer) 151 err := client.AcknowledgePreVerificationWarnings(context.Background(), test.params) 152 if test.withError != nil { 153 test.withError(t, err) 154 return 155 } 156 require.NoError(t, err) 157 }) 158 } 159 }