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

     1  package hapi
     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 TestGetChangeRequest(t *testing.T) {
    15  	tests := map[string]struct {
    16  		request          GetChangeRequest
    17  		responseStatus   int
    18  		responseBody     string
    19  		expectedPath     string
    20  		expectedResponse *ChangeRequest
    21  		withError        error
    22  	}{
    23  		"200 OK": {
    24  			request:        GetChangeRequest{123},
    25  			responseStatus: http.StatusOK,
    26  			responseBody: `
    27  {
    28  	"action": "EDIT",
    29  	"changeId": 123,
    30  	"edgeHostnames": [
    31  		{
    32  			"chinaCdn": {
    33  				"isChinaCdn": false
    34  			},
    35  			"dnsZone": "edgekey.net",
    36  			"edgeHostnameId": 112233,
    37  			"ipVersionBehavior": "IPV6_IPV4_DUALSTACK",
    38  			"map": "a;bcd.akamaiedge.net",
    39  			"productId": "DSA",
    40  			"recordName": "test123",
    41  			"securityType": "ENHANCED-TLS",
    42  			"serialNumber": 0,
    43  			"slotNumber": 1234,
    44  			"ttl": 21600,
    45  			"useDefaultMap": true,
    46  			"useDefaultTtl": true
    47  		}
    48  	],
    49  	"status": "PENDING",
    50  	"statusMessage": "File uploaded and awaiting validation",
    51  	"statusUpdateDate": "2023-09-04T09:21:38.000+00:00",
    52  	"submitDate": "2023-09-04T09:21:38.000+00:00",
    53  	"submitter": "nobody",
    54  	"submitterEmail": "nobody@nomail-akamai.com"
    55  }
    56  `,
    57  			expectedPath: "/hapi/v1/change-requests/123",
    58  			expectedResponse: &ChangeRequest{
    59  				Action:   "EDIT",
    60  				ChangeID: 123,
    61  				EdgeHostnames: []EdgeHostname{
    62  					{
    63  						EdgeHostnameID:    112233,
    64  						RecordName:        "test123",
    65  						DNSZone:           "edgekey.net",
    66  						SecurityType:      "ENHANCED-TLS",
    67  						UseDefaultTTL:     true,
    68  						UseDefaultMap:     true,
    69  						TTL:               21600,
    70  						Map:               "a;bcd.akamaiedge.net",
    71  						SlotNumber:        1234,
    72  						IPVersionBehavior: "IPV6_IPV4_DUALSTACK",
    73  						Comments:          "",
    74  						ChinaCDN: ChinaCDN{
    75  							IsChinaCDN: false,
    76  						},
    77  						ProductId:    "DSA",
    78  						SerialNumber: 0,
    79  					},
    80  				},
    81  				Status:           "PENDING",
    82  				StatusMessage:    "File uploaded and awaiting validation",
    83  				StatusUpdateDate: "2023-09-04T09:21:38.000+00:00",
    84  				SubmitDate:       "2023-09-04T09:21:38.000+00:00",
    85  				Submitter:        "nobody",
    86  				SubmitterEmail:   "nobody@nomail-akamai.com",
    87  			},
    88  		},
    89  		"403 Access Denied to Edge Hostname": {
    90  			request:        GetChangeRequest{234},
    91  			responseStatus: http.StatusForbidden,
    92  			responseBody: `
    93  {
    94  	"type": "/hapi/problems/access-denied-to-edge-hostname",
    95  	"title": "Access Denied to Edge Hostname",
    96  	"status": 403,
    97  	"detail": "You do not have access to this edge hostname",
    98  	"instance": "/hapi/error-instances/7a2c1b84-fe90-40f2-8391-aaaaaaaaaa",
    99  	"requestInstance": "http://cloud.akamaiapis.net/hapi/open/v1/change-requests/234#aaaaaaa",
   100  	"method": "GET",
   101  	"requestTime": "2023-09-04T09:26:16.561878149Z",
   102  	"errors": []
   103  }`,
   104  			expectedPath: "/hapi/v1/change-requests/234",
   105  			withError: &Error{
   106  				Type:            "/hapi/problems/access-denied-to-edge-hostname",
   107  				Title:           "Access Denied to Edge Hostname",
   108  				Status:          403,
   109  				Detail:          "You do not have access to this edge hostname",
   110  				Instance:        "/hapi/error-instances/7a2c1b84-fe90-40f2-8391-aaaaaaaaaa",
   111  				RequestInstance: "http://cloud.akamaiapis.net/hapi/open/v1/change-requests/234#aaaaaaa",
   112  				Method:          "GET",
   113  				RequestTime:     "2023-09-04T09:26:16.561878149Z",
   114  			},
   115  		},
   116  		"500 internal server error": {
   117  			request:        GetChangeRequest{123},
   118  			responseStatus: http.StatusInternalServerError,
   119  			responseBody: `
   120  {
   121  	"type": "internal_error",
   122      "title": "Internal Server Error",
   123      "detail": "Error deleting activation",
   124      "status": 500
   125  }`,
   126  			expectedPath: "/hapi/v1/change-requests/123",
   127  			withError: &Error{
   128  				Type:   "internal_error",
   129  				Title:  "Internal Server Error",
   130  				Detail: "Error deleting activation",
   131  				Status: http.StatusInternalServerError,
   132  			},
   133  		},
   134  	}
   135  
   136  	for name, test := range tests {
   137  		t.Run(name, func(t *testing.T) {
   138  			mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
   139  				assert.Equal(t, test.expectedPath, r.URL.String())
   140  				assert.Equal(t, http.MethodGet, r.Method)
   141  				w.WriteHeader(test.responseStatus)
   142  				_, err := w.Write([]byte(test.responseBody))
   143  				assert.NoError(t, err)
   144  			}))
   145  			client := mockAPIClient(t, mockServer)
   146  			result, err := client.GetChangeRequest(context.Background(), test.request)
   147  			if test.withError != nil {
   148  				assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
   149  				return
   150  			}
   151  			require.NoError(t, err)
   152  			assert.Equal(t, test.expectedResponse, result)
   153  		})
   154  	}
   155  }