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  }