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  }