github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/contracts_test.go (about)

     1  package edgeworkers
     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 TestListContracts(t *testing.T) {
    15  	tests := map[string]struct {
    16  		responseStatus   int
    17  		responseBody     string
    18  		expectedPath     string
    19  		expectedResponse *ListContractsResponse
    20  		withError        error
    21  	}{
    22  		"200 OK": {
    23  			responseStatus: 200,
    24  			responseBody: `
    25  {
    26  	"contractIds": [
    27  		"1-599K",
    28  		"B-M-28QYF3M"
    29  	]
    30  }`,
    31  			expectedPath: "/edgeworkers/v1/contracts",
    32  			expectedResponse: &ListContractsResponse{
    33  				[]string{
    34  					"1-599K",
    35  					"B-M-28QYF3M",
    36  				},
    37  			},
    38  		},
    39  		"500 internal server error": {
    40  			responseStatus: http.StatusInternalServerError,
    41  			responseBody: `
    42  {
    43      "type": "/edgeworkers/error-types/edgeworkers-server-error",
    44      "title": "An unexpected error has occurred.",
    45      "detail": "Error processing request",
    46      "instance": "/edgeworkers/error-instances/abc",
    47      "status": 500,
    48      "errorCode": "EW4303"
    49  }`,
    50  			expectedPath: "/edgeworkers/v1/contracts",
    51  			withError: &Error{
    52  				Type:      "/edgeworkers/error-types/edgeworkers-server-error",
    53  				Title:     "An unexpected error has occurred.",
    54  				Detail:    "Error processing request",
    55  				Instance:  "/edgeworkers/error-instances/abc",
    56  				Status:    500,
    57  				ErrorCode: "EW4303",
    58  			},
    59  		},
    60  	}
    61  
    62  	for name, test := range tests {
    63  		t.Run(name, func(t *testing.T) {
    64  			mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    65  				assert.Equal(t, test.expectedPath, r.URL.String())
    66  				assert.Equal(t, http.MethodGet, r.Method)
    67  				w.WriteHeader(test.responseStatus)
    68  				_, err := w.Write([]byte(test.responseBody))
    69  				assert.NoError(t, err)
    70  			}))
    71  			client := mockAPIClient(t, mockServer)
    72  			result, err := client.ListContracts(context.Background())
    73  			if test.withError != nil {
    74  				assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
    75  				return
    76  			}
    77  			require.NoError(t, err)
    78  			assert.Equal(t, test.expectedResponse, result)
    79  		})
    80  	}
    81  }