github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cps/post_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 TestGetChangePostVerificationWarnings(t *testing.T) { 15 tests := map[string]struct { 16 params GetChangeRequest 17 responseStatus int 18 responseBody string 19 expectedPath string 20 expectedResponse *PostVerificationWarnings 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/post-verification-warnings", 34 expectedResponse: &PostVerificationWarnings{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/post-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.GetChangePostVerificationWarnings(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 func TestAcknowledgePostVerificationWarnings(t *testing.T) { 89 tests := map[string]struct { 90 params AcknowledgementRequest 91 responseStatus int 92 responseBody string 93 expectedPath string 94 withError func(*testing.T, error) 95 }{ 96 "200 OK": { 97 params: AcknowledgementRequest{ 98 EnrollmentID: 1, 99 ChangeID: 2, 100 Acknowledgement: Acknowledgement{ 101 Acknowledgement: AcknowledgementAcknowledge, 102 }, 103 }, 104 responseStatus: http.StatusOK, 105 responseBody: "", 106 expectedPath: "/cps/v2/enrollments/1/changes/2/input/update/post-verification-warnings-ack", 107 }, 108 "500 internal server error": { 109 params: AcknowledgementRequest{ 110 EnrollmentID: 1, 111 ChangeID: 2, 112 Acknowledgement: Acknowledgement{ 113 Acknowledgement: AcknowledgementAcknowledge, 114 }, 115 }, 116 responseStatus: http.StatusInternalServerError, 117 responseBody: ` 118 { 119 "type": "internal_error", 120 "title": "Internal Server Error", 121 "detail": "Error making request", 122 "status": 500 123 }`, 124 expectedPath: "/cps/v2/enrollments/1/changes/2/input/update/post-verification-warnings-ack", 125 withError: func(t *testing.T, err error) { 126 want := &Error{ 127 Type: "internal_error", 128 Title: "Internal Server Error", 129 Detail: "Error making request", 130 StatusCode: http.StatusInternalServerError, 131 } 132 assert.True(t, errors.Is(err, want), "want: %s; got: %s", want, err) 133 }, 134 }, 135 "validation error": { 136 params: AcknowledgementRequest{}, 137 withError: func(t *testing.T, err error) { 138 assert.True(t, errors.Is(err, ErrStructValidation), "want: %s; got: %s", ErrStructValidation, err) 139 }, 140 }, 141 } 142 for name, test := range tests { 143 t.Run(name, func(t *testing.T) { 144 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 145 assert.Equal(t, test.expectedPath, r.URL.String()) 146 assert.Equal(t, http.MethodPost, r.Method) 147 assert.Equal(t, "application/vnd.akamai.cps.change-id.v1+json", r.Header.Get("Accept")) 148 assert.Equal(t, "application/vnd.akamai.cps.acknowledgement.v1+json; charset=utf-8", r.Header.Get("Content-Type")) 149 w.WriteHeader(test.responseStatus) 150 _, err := w.Write([]byte(test.responseBody)) 151 assert.NoError(t, err) 152 })) 153 client := mockAPIClient(t, mockServer) 154 err := client.AcknowledgePostVerificationWarnings(context.Background(), test.params) 155 if test.withError != nil { 156 test.withError(t, err) 157 return 158 } 159 require.NoError(t, err) 160 }) 161 } 162 }