github.com/Ingenico-ePayments/connect-sdk-go@v0.0.0-20240318153750-1f8cd329b9c9/communicator/MetaDataProvider_test.go (about)

     1  package communicator
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/json"
     6  	"testing"
     7  
     8  	"github.com/Ingenico-ePayments/connect-sdk-go/communicator/communication"
     9  	"github.com/Ingenico-ePayments/connect-sdk-go/domain/metadata"
    10  )
    11  
    12  func TestGetServerMetaDataHeadersNoAdditionalHeaders(t *testing.T) {
    13  
    14  	metaDataProvider, err := NewMetaDataProviderWithIntegrator("Ingenico")
    15  	if err != nil {
    16  		t.Fatalf("TestGetServerMetaDataHeadersNoAdditionalHeaders : %v", err)
    17  	}
    18  
    19  	requestHeaders := metaDataProvider.MetaDataHeaders()
    20  	if requestHeaders == nil {
    21  		t.Fatal("TestGetServerMetaDataHeadersNoAdditionalHeaders : nil headers")
    22  	}
    23  	if len(requestHeaders) != 1 {
    24  		t.Fatal("TestGetServerMetaDataHeadersNoAdditionalHeaders : len != 1")
    25  	}
    26  
    27  	AssertServerMetaInfo("TestGetServerMetaDataHeadersNoAdditionalHeaders",
    28  		t, metaDataProvider, "Ingenico", requestHeaders[0])
    29  }
    30  
    31  func TestServerMetaDataHeadersFull(t *testing.T) {
    32  	shoppingCartExtension, err := metadata.NewShoppingCartExtensionWithExtensionID("Ingenico.creator", "Extension", "1.0", "ExtensionID")
    33  	if err != nil {
    34  		t.Fatalf("TestServerMetaDataHeadersFull : %v", err)
    35  	}
    36  
    37  	integrator := "Ingenico"
    38  	metaDataProviderBuilder := NewMetaDataProviderBuilder(integrator)
    39  	metaDataProviderBuilder.ShoppingCartExtension = shoppingCartExtension
    40  	metaDataProvider, err := metaDataProviderBuilder.Build()
    41  	if err != nil {
    42  		t.Fatalf("TestServerMetaDataHeadersFull : %v", err)
    43  	}
    44  
    45  	requestHeaders := metaDataProvider.MetaDataHeaders()
    46  	if len(requestHeaders) != 1 {
    47  		t.Fatal("TestServerMetaDataHeadersFull : len != 1")
    48  	}
    49  
    50  	AssertServerMetaInfo("TestServerMetaDataHeadersFull",
    51  		t, metaDataProvider, integrator, requestHeaders[0])
    52  	AssertShoppingCard("TestServerMetaDataHeadersFull",
    53  		t, metaDataProvider, shoppingCartExtension)
    54  }
    55  
    56  func TestServerMetaDataHeadersFullNewShoppingCartExtensionWithExtensionID(t *testing.T) {
    57  	shoppingCartExtension, err := metadata.NewShoppingCartExtension("Ingenico.creator", "Extension", "1.0")
    58  	if err != nil {
    59  		t.Fatalf("TestServerMetaDataHeadersFullNewShoppingCartExtensionWithExtensionID : %v", err)
    60  	}
    61  
    62  	integrator := "Ingenico"
    63  	metaDataProviderBuilder := NewMetaDataProviderBuilder(integrator)
    64  	metaDataProviderBuilder.ShoppingCartExtension = shoppingCartExtension
    65  	metaDataProvider, err := metaDataProviderBuilder.Build()
    66  	if err != nil {
    67  		t.Fatalf("TestServerMetaDataHeadersFull : %v", err)
    68  	}
    69  
    70  	requestHeaders := metaDataProvider.MetaDataHeaders()
    71  	if len(requestHeaders) != 1 {
    72  		t.Fatal("TestServerMetaDataHeadersFull : len != 1")
    73  	}
    74  
    75  	AssertServerMetaInfo("TestServerMetaDataHeadersFull",
    76  		t, metaDataProvider, integrator, requestHeaders[0])
    77  	AssertShoppingCard("TestServerMetaDataHeadersFull",
    78  		t, metaDataProvider, shoppingCartExtension)
    79  }
    80  
    81  func TestServerMetaDataHeadersAdditionalHeaders(t *testing.T) {
    82  	header1, err1 := communication.NewHeader("Header1", "&=$%")
    83  	header2, err2 := communication.NewHeader("Header2", "blah blah")
    84  	header3, err3 := communication.NewHeader("Header3", "foo")
    85  	if err1 != nil {
    86  		t.Fatalf("TestServerMetaDataHeadersAdditionalHeaders : %v", err1)
    87  	}
    88  	if err2 != nil {
    89  		t.Fatalf("TestServerMetaDataHeadersAdditionalHeaders : %v", err2)
    90  	}
    91  	if err3 != nil {
    92  		t.Fatalf("TestServerMetaDataHeadersAdditionalHeaders : %v", err3)
    93  	}
    94  
    95  	additionalHeaders := []communication.Header{*header1, *header2, *header3}
    96  	metaDataProviderBuilder := NewMetaDataProviderBuilder("Ingenico")
    97  	metaDataProviderBuilder.AdditionalRequestHeaders = additionalHeaders
    98  	metaDataProvider, err := metaDataProviderBuilder.Build()
    99  	if err != nil {
   100  		t.Fatalf("TestServerMetaDataHeadersAdditionalHeaders : %v", err)
   101  	}
   102  
   103  	requestHeaders := metaDataProvider.MetaDataHeaders()
   104  	if len(requestHeaders) != 4 {
   105  		t.Fatal("TestServerMetaDataHeadersAdditionalHeaders : len != 4")
   106  	}
   107  
   108  	for i := 1; i < len(requestHeaders); i++ {
   109  		if additionalHeaders[i-1] != requestHeaders[i] {
   110  			t.Fatalf("TestServerMetaDataHeadersAdditionalHeaders : [%d]%v != [%d]%v",
   111  				i-1, additionalHeaders[i-1],
   112  				i, requestHeaders[i])
   113  		}
   114  	}
   115  }
   116  
   117  func TestConstructorWithProhibitedHeaders(t *testing.T) {
   118  	header1, err1 := communication.NewHeader("Header1", "&=$%")
   119  	header2, err2 := communication.NewHeader("Header2", "blah blah")
   120  	if err1 != nil {
   121  		t.Fatalf("TestConstructorWithProhibitedHeaders : %v", err1)
   122  	}
   123  	if err2 != nil {
   124  		t.Fatalf("TestConstructorWithProhibitedHeaders : %v", err2)
   125  	}
   126  
   127  	for _, v := range ProhibitedHeaders {
   128  		header3, err3 := communication.NewHeader(v, "prohibited header")
   129  		if err3 != nil {
   130  			t.Fatalf("TestConstructorWithProhibitedHeaders : %v", err3)
   131  		}
   132  
   133  		additionalHeaders := []communication.Header{*header1, *header2, *header3}
   134  		builder := NewMetaDataProviderBuilder("builder")
   135  		builder.AdditionalRequestHeaders = additionalHeaders
   136  		metadataProvider, err := builder.Build()
   137  		if err == nil {
   138  			t.Fatal("TestConstructorWithProhibitedHeaders : err == nil")
   139  		}
   140  
   141  		if metadataProvider != nil {
   142  			t.Fatal("TestConstructorWithProhibitedHeaders : metadataProvider != nil")
   143  		}
   144  	}
   145  }
   146  
   147  func AssertServerMetaInfo(prefix string, t *testing.T, metaDataProvider *MetaDataProvider,
   148  	integrator string, requestHeader communication.Header) {
   149  
   150  	if requestHeader.Name() != "X-GCS-ServerMetaInfo" {
   151  		t.Fatalf("[%s]AssertServerMetaInfo : %s != %s", prefix, requestHeader.Name(), "X-GCS-ServerMetaInfo")
   152  	}
   153  	if len(requestHeader.Value()) < 1 {
   154  		t.Fatalf("[%s]AssertServerMetaInfo : requestHeader value is empty", prefix)
   155  	}
   156  
   157  	serverMetaInfo := metaDataProvider.serverMetaInfo
   158  	reqHeaderBytes, err := base64.StdEncoding.DecodeString(requestHeader.Value())
   159  	if err != nil {
   160  		t.Fatalf("[%s]AssertServerMetaInfo : %v", prefix, err)
   161  	}
   162  
   163  	err = json.Unmarshal(reqHeaderBytes, &serverMetaInfo)
   164  	if err != nil {
   165  		t.Fatalf("[%s]AssertServerMetaInfo : %v", prefix, err)
   166  	}
   167  
   168  	if serverMetaInfo.PlatformIdentifier != metaDataProvider.serverMetaInfo.PlatformIdentifier {
   169  		t.Fatalf("[%s]AssertServerMetaInfo : platformIdentifier '%s' != '%s'", prefix,
   170  			serverMetaInfo.PlatformIdentifier, metaDataProvider.serverMetaInfo.PlatformIdentifier)
   171  	}
   172  	if serverMetaInfo.SDKIdentifier != metaDataProvider.serverMetaInfo.SDKIdentifier {
   173  		t.Fatalf("[%s]AssertServerMetaInfo : SDKIdentifier '%s' != '%s'", prefix,
   174  			serverMetaInfo.SDKIdentifier, metaDataProvider.serverMetaInfo.SDKIdentifier)
   175  	}
   176  	if serverMetaInfo.Integrator != integrator {
   177  		t.Fatalf("[%s]AssertServerMetaInfo : Integrator '%s' != '%s'", prefix,
   178  			serverMetaInfo.Integrator, integrator)
   179  	}
   180  	if serverMetaInfo.SDKCreator != "Ingenico" {
   181  		t.Fatalf("[%s]AssertServerMetaInfo : SDKCreator '%s' != '%s'", prefix,
   182  			serverMetaInfo.SDKCreator, "Ingenico")
   183  	}
   184  }
   185  
   186  func AssertShoppingCard(prefix string, t *testing.T, metaDataProvider *MetaDataProvider,
   187  	shoppingCard *metadata.ShoppingCartExtension) {
   188  	serverMetaInfo := metaDataProvider.serverMetaInfo
   189  
   190  	if serverMetaInfo.ShoppingCartExtension.Creator != shoppingCard.Creator {
   191  		t.Fatalf("[%s]AssertShoppingCard : Creator '%s' != '%s'", prefix,
   192  			serverMetaInfo.ShoppingCartExtension.Creator, shoppingCard.Creator)
   193  	}
   194  	if serverMetaInfo.ShoppingCartExtension.Name != shoppingCard.Name {
   195  		t.Fatalf("[%s]AssertShoppingCard : Name '%s' != '%s'", prefix,
   196  			serverMetaInfo.ShoppingCartExtension.Name, shoppingCard.Name)
   197  	}
   198  	if serverMetaInfo.ShoppingCartExtension.Version != shoppingCard.Version {
   199  		t.Fatalf("[%s]AssertShoppingCard : Version '%s' != '%s'", prefix,
   200  			serverMetaInfo.ShoppingCartExtension.Version, shoppingCard.Version)
   201  	}
   202  	if serverMetaInfo.ShoppingCartExtension.ExtensionID != shoppingCard.ExtensionID {
   203  		t.Fatalf("[%s]AssertShoppingCard : ExtensionID '%s' != '%s'", prefix,
   204  			serverMetaInfo.ShoppingCartExtension.ExtensionID, shoppingCard.ExtensionID)
   205  	}
   206  }