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 }