@klarna/react-native-klarna-network-payment 0.0.1 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +143 -29
  2. package/android/build.gradle +95 -0
  3. package/android/src/main/AndroidManifest.xml +1 -0
  4. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentButtonViewSpec.kt +22 -0
  5. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModule.kt +46 -0
  6. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImpl.kt +163 -0
  7. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentPackage.kt +30 -0
  8. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonPressEvent.kt +19 -0
  9. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManager.kt +276 -0
  10. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapper.kt +132 -0
  11. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapper.kt +328 -0
  12. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapper.kt +145 -0
  13. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImplTest.kt +361 -0
  14. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManagerTest.kt +155 -0
  15. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapperTest.kt +447 -0
  16. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapperTest.kt +489 -0
  17. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapperTest.kt +456 -0
  18. package/ios/Sources/KlarnaNetworkPayment.h +5 -0
  19. package/ios/Sources/KlarnaNetworkPayment.mm +110 -0
  20. package/ios/Sources/KlarnaNetworkPaymentModuleImpl.swift +196 -0
  21. package/ios/Sources/KlarnaPaymentButtonComponentView.mm +147 -0
  22. package/ios/Sources/KlarnaPaymentButtonViewImpl.swift +78 -0
  23. package/ios/Sources/KlarnaPaymentPresentationMapping.swift +102 -0
  24. package/ios/Sources/KlarnaPaymentRequestDataMapping.swift +232 -0
  25. package/ios/Sources/KlarnaPaymentRequestMapping.swift +103 -0
  26. package/ios/Tests/KlarnaNetworkPaymentModuleImplTests.swift +143 -0
  27. package/ios/Tests/KlarnaPaymentButtonViewImplTests.swift +122 -0
  28. package/ios/Tests/KlarnaPaymentPresentationMappingTests.swift +335 -0
  29. package/lib/commonjs/KlarnaNetworkPayment.js +6 -0
  30. package/lib/commonjs/KlarnaNetworkPayment.js.map +1 -0
  31. package/lib/commonjs/KlarnaNetworkPaymentImpl.js +44 -0
  32. package/lib/commonjs/KlarnaNetworkPaymentImpl.js.map +1 -0
  33. package/lib/commonjs/KlarnaNetworkPaymentMapper.js +164 -0
  34. package/lib/commonjs/KlarnaNetworkPaymentMapper.js.map +1 -0
  35. package/lib/commonjs/KlarnaPaymentButton.js +43 -0
  36. package/lib/commonjs/KlarnaPaymentButton.js.map +1 -0
  37. package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js +10 -0
  38. package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
  39. package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js +13 -0
  40. package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
  41. package/lib/commonjs/index.js +51 -0
  42. package/lib/commonjs/index.js.map +1 -0
  43. package/lib/commonjs/types/KlarnaPaymentRequest.js +6 -0
  44. package/lib/commonjs/types/KlarnaPaymentRequest.js.map +1 -0
  45. package/lib/commonjs/types/KlarnaPaymentRequestState.js +2 -0
  46. package/lib/commonjs/types/KlarnaPaymentRequestState.js.map +1 -0
  47. package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js +6 -0
  48. package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js.map +1 -0
  49. package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js +2 -0
  50. package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js.map +1 -0
  51. package/lib/commonjs/types/models/KlarnaBillingPlan.js +6 -0
  52. package/lib/commonjs/types/models/KlarnaBillingPlan.js.map +1 -0
  53. package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js +2 -0
  54. package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
  55. package/lib/commonjs/types/models/KlarnaCustomer.js +6 -0
  56. package/lib/commonjs/types/models/KlarnaCustomer.js.map +1 -0
  57. package/lib/commonjs/types/models/KlarnaFreeTrial.js +2 -0
  58. package/lib/commonjs/types/models/KlarnaFreeTrial.js.map +1 -0
  59. package/lib/commonjs/types/models/KlarnaInterval.js +2 -0
  60. package/lib/commonjs/types/models/KlarnaInterval.js.map +1 -0
  61. package/lib/commonjs/types/models/KlarnaLineItem.js +2 -0
  62. package/lib/commonjs/types/models/KlarnaLineItem.js.map +1 -0
  63. package/lib/commonjs/types/models/KlarnaOndemandService.js +6 -0
  64. package/lib/commonjs/types/models/KlarnaOndemandService.js.map +1 -0
  65. package/lib/commonjs/types/models/KlarnaPartnerCustomer.js +6 -0
  66. package/lib/commonjs/types/models/KlarnaPartnerCustomer.js.map +1 -0
  67. package/lib/commonjs/types/models/KlarnaPaymentPresentation.js +6 -0
  68. package/lib/commonjs/types/models/KlarnaPaymentPresentation.js.map +1 -0
  69. package/lib/commonjs/types/models/KlarnaPaymentRequestData.js +6 -0
  70. package/lib/commonjs/types/models/KlarnaPaymentRequestData.js.map +1 -0
  71. package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js +6 -0
  72. package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js.map +1 -0
  73. package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
  74. package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
  75. package/lib/commonjs/types/models/KlarnaShipping.js +6 -0
  76. package/lib/commonjs/types/models/KlarnaShipping.js.map +1 -0
  77. package/lib/commonjs/types/models/KlarnaShippingConfig.js +6 -0
  78. package/lib/commonjs/types/models/KlarnaShippingConfig.js.map +1 -0
  79. package/lib/commonjs/types/models/KlarnaShippingConfigMode.js +2 -0
  80. package/lib/commonjs/types/models/KlarnaShippingConfigMode.js.map +1 -0
  81. package/lib/commonjs/types/models/KlarnaShippingOption.js +6 -0
  82. package/lib/commonjs/types/models/KlarnaShippingOption.js.map +1 -0
  83. package/lib/commonjs/types/models/KlarnaShippingRecipient.js +2 -0
  84. package/lib/commonjs/types/models/KlarnaShippingRecipient.js.map +1 -0
  85. package/lib/commonjs/types/models/KlarnaShippingType.js +2 -0
  86. package/lib/commonjs/types/models/KlarnaShippingType.js.map +1 -0
  87. package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js +2 -0
  88. package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
  89. package/lib/commonjs/types/models/KlarnaSubscription.js +6 -0
  90. package/lib/commonjs/types/models/KlarnaSubscription.js.map +1 -0
  91. package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js +6 -0
  92. package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
  93. package/lib/commonjs/types/models/index.js +2 -0
  94. package/lib/commonjs/types/models/index.js.map +1 -0
  95. package/lib/module/KlarnaNetworkPayment.js +2 -0
  96. package/lib/module/KlarnaNetworkPayment.js.map +1 -0
  97. package/lib/module/KlarnaNetworkPaymentImpl.js +36 -0
  98. package/lib/module/KlarnaNetworkPaymentImpl.js.map +1 -0
  99. package/lib/module/KlarnaNetworkPaymentMapper.js +146 -0
  100. package/lib/module/KlarnaNetworkPaymentMapper.js.map +1 -0
  101. package/lib/module/KlarnaPaymentButton.js +37 -0
  102. package/lib/module/KlarnaPaymentButton.js.map +1 -0
  103. package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js +3 -0
  104. package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
  105. package/lib/module/Specs/NativeKlarnaNetworkPayment.js +9 -0
  106. package/lib/module/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
  107. package/lib/module/index.js +40 -0
  108. package/lib/module/index.js.map +1 -0
  109. package/lib/module/types/KlarnaPaymentRequest.js +2 -0
  110. package/lib/module/types/KlarnaPaymentRequest.js.map +1 -0
  111. package/lib/module/types/KlarnaPaymentRequestState.js +2 -0
  112. package/lib/module/types/KlarnaPaymentRequestState.js.map +1 -0
  113. package/lib/module/types/KlarnaPaymentRequestStateContext.js +2 -0
  114. package/lib/module/types/KlarnaPaymentRequestStateContext.js.map +1 -0
  115. package/lib/module/types/KlarnaPaymentRequestStateReason.js +2 -0
  116. package/lib/module/types/KlarnaPaymentRequestStateReason.js.map +1 -0
  117. package/lib/module/types/models/KlarnaBillingPlan.js +2 -0
  118. package/lib/module/types/models/KlarnaBillingPlan.js.map +1 -0
  119. package/lib/module/types/models/KlarnaCollectCustomerProfileType.js +2 -0
  120. package/lib/module/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
  121. package/lib/module/types/models/KlarnaCustomer.js +2 -0
  122. package/lib/module/types/models/KlarnaCustomer.js.map +1 -0
  123. package/lib/module/types/models/KlarnaFreeTrial.js +2 -0
  124. package/lib/module/types/models/KlarnaFreeTrial.js.map +1 -0
  125. package/lib/module/types/models/KlarnaInterval.js +2 -0
  126. package/lib/module/types/models/KlarnaInterval.js.map +1 -0
  127. package/lib/module/types/models/KlarnaLineItem.js +2 -0
  128. package/lib/module/types/models/KlarnaLineItem.js.map +1 -0
  129. package/lib/module/types/models/KlarnaOndemandService.js +2 -0
  130. package/lib/module/types/models/KlarnaOndemandService.js.map +1 -0
  131. package/lib/module/types/models/KlarnaPartnerCustomer.js +2 -0
  132. package/lib/module/types/models/KlarnaPartnerCustomer.js.map +1 -0
  133. package/lib/module/types/models/KlarnaPaymentPresentation.js +2 -0
  134. package/lib/module/types/models/KlarnaPaymentPresentation.js.map +1 -0
  135. package/lib/module/types/models/KlarnaPaymentRequestData.js +2 -0
  136. package/lib/module/types/models/KlarnaPaymentRequestData.js.map +1 -0
  137. package/lib/module/types/models/KlarnaRequestCustomerToken.js +2 -0
  138. package/lib/module/types/models/KlarnaRequestCustomerToken.js.map +1 -0
  139. package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
  140. package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
  141. package/lib/module/types/models/KlarnaShipping.js +2 -0
  142. package/lib/module/types/models/KlarnaShipping.js.map +1 -0
  143. package/lib/module/types/models/KlarnaShippingConfig.js +2 -0
  144. package/lib/module/types/models/KlarnaShippingConfig.js.map +1 -0
  145. package/lib/module/types/models/KlarnaShippingConfigMode.js +2 -0
  146. package/lib/module/types/models/KlarnaShippingConfigMode.js.map +1 -0
  147. package/lib/module/types/models/KlarnaShippingOption.js +2 -0
  148. package/lib/module/types/models/KlarnaShippingOption.js.map +1 -0
  149. package/lib/module/types/models/KlarnaShippingRecipient.js +2 -0
  150. package/lib/module/types/models/KlarnaShippingRecipient.js.map +1 -0
  151. package/lib/module/types/models/KlarnaShippingType.js +2 -0
  152. package/lib/module/types/models/KlarnaShippingType.js.map +1 -0
  153. package/lib/module/types/models/KlarnaShippingTypeAttribute.js +2 -0
  154. package/lib/module/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
  155. package/lib/module/types/models/KlarnaSubscription.js +2 -0
  156. package/lib/module/types/models/KlarnaSubscription.js.map +1 -0
  157. package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js +2 -0
  158. package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
  159. package/lib/module/types/models/index.js +2 -0
  160. package/lib/module/types/models/index.js.map +1 -0
  161. package/lib/typescript/KlarnaNetworkPayment.d.ts +22 -0
  162. package/lib/typescript/KlarnaNetworkPayment.d.ts.map +1 -0
  163. package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts +12 -0
  164. package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts.map +1 -0
  165. package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts +273 -0
  166. package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts.map +1 -0
  167. package/lib/typescript/KlarnaPaymentButton.d.ts +51 -0
  168. package/lib/typescript/KlarnaPaymentButton.d.ts.map +1 -0
  169. package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts +16 -0
  170. package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts.map +1 -0
  171. package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts +13 -0
  172. package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts.map +1 -0
  173. package/lib/typescript/index.d.ts +14 -0
  174. package/lib/typescript/index.d.ts.map +1 -0
  175. package/lib/typescript/types/KlarnaPaymentRequest.d.ts +19 -0
  176. package/lib/typescript/types/KlarnaPaymentRequest.d.ts.map +1 -0
  177. package/lib/typescript/types/KlarnaPaymentRequestState.d.ts +15 -0
  178. package/lib/typescript/types/KlarnaPaymentRequestState.d.ts.map +1 -0
  179. package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts +12 -0
  180. package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts.map +1 -0
  181. package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts +13 -0
  182. package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts.map +1 -0
  183. package/lib/typescript/types/models/KlarnaBillingPlan.d.ts +17 -0
  184. package/lib/typescript/types/models/KlarnaBillingPlan.d.ts.map +1 -0
  185. package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts +19 -0
  186. package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts.map +1 -0
  187. package/lib/typescript/types/models/KlarnaCustomer.d.ts +11 -0
  188. package/lib/typescript/types/models/KlarnaCustomer.d.ts.map +1 -0
  189. package/lib/typescript/types/models/KlarnaFreeTrial.d.ts +7 -0
  190. package/lib/typescript/types/models/KlarnaFreeTrial.d.ts.map +1 -0
  191. package/lib/typescript/types/models/KlarnaInterval.d.ts +11 -0
  192. package/lib/typescript/types/models/KlarnaInterval.d.ts.map +1 -0
  193. package/lib/typescript/types/models/KlarnaLineItem.d.ts +28 -0
  194. package/lib/typescript/types/models/KlarnaLineItem.d.ts.map +1 -0
  195. package/lib/typescript/types/models/KlarnaOndemandService.d.ts +17 -0
  196. package/lib/typescript/types/models/KlarnaOndemandService.d.ts.map +1 -0
  197. package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts +15 -0
  198. package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts.map +1 -0
  199. package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts +119 -0
  200. package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts.map +1 -0
  201. package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts +24 -0
  202. package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts.map +1 -0
  203. package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts +9 -0
  204. package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts.map +1 -0
  205. package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts +9 -0
  206. package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts.map +1 -0
  207. package/lib/typescript/types/models/KlarnaShipping.d.ts +15 -0
  208. package/lib/typescript/types/models/KlarnaShipping.d.ts.map +1 -0
  209. package/lib/typescript/types/models/KlarnaShippingConfig.d.ts +9 -0
  210. package/lib/typescript/types/models/KlarnaShippingConfig.d.ts.map +1 -0
  211. package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts +5 -0
  212. package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts.map +1 -0
  213. package/lib/typescript/types/models/KlarnaShippingOption.d.ts +12 -0
  214. package/lib/typescript/types/models/KlarnaShippingOption.d.ts.map +1 -0
  215. package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts +14 -0
  216. package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts.map +1 -0
  217. package/lib/typescript/types/models/KlarnaShippingType.d.ts +25 -0
  218. package/lib/typescript/types/models/KlarnaShippingType.d.ts.map +1 -0
  219. package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts +21 -0
  220. package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts.map +1 -0
  221. package/lib/typescript/types/models/KlarnaSubscription.d.ts +14 -0
  222. package/lib/typescript/types/models/KlarnaSubscription.d.ts.map +1 -0
  223. package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts +21 -0
  224. package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts.map +1 -0
  225. package/lib/typescript/types/models/index.d.ts +22 -0
  226. package/lib/typescript/types/models/index.d.ts.map +1 -0
  227. package/package.json +120 -6
  228. package/react-native-klarna-network-payment.podspec +29 -0
  229. package/src/KlarnaNetworkPayment.ts +30 -0
  230. package/src/KlarnaNetworkPaymentImpl.ts +79 -0
  231. package/src/KlarnaNetworkPaymentMapper.ts +204 -0
  232. package/src/KlarnaPaymentButton.tsx +80 -0
  233. package/src/Specs/KlarnaPaymentButtonNativeComponent.ts +22 -0
  234. package/src/Specs/NativeKlarnaNetworkPayment.ts +17 -0
  235. package/src/index.tsx +63 -0
  236. package/src/types/KlarnaPaymentRequest.ts +19 -0
  237. package/src/types/KlarnaPaymentRequestState.ts +14 -0
  238. package/src/types/KlarnaPaymentRequestStateContext.ts +12 -0
  239. package/src/types/KlarnaPaymentRequestStateReason.ts +12 -0
  240. package/src/types/models/KlarnaBillingPlan.ts +17 -0
  241. package/src/types/models/KlarnaCollectCustomerProfileType.ts +18 -0
  242. package/src/types/models/KlarnaCustomer.ts +11 -0
  243. package/src/types/models/KlarnaFreeTrial.ts +6 -0
  244. package/src/types/models/KlarnaInterval.ts +10 -0
  245. package/src/types/models/KlarnaLineItem.ts +27 -0
  246. package/src/types/models/KlarnaOndemandService.ts +17 -0
  247. package/src/types/models/KlarnaPartnerCustomer.ts +15 -0
  248. package/src/types/models/KlarnaPaymentPresentation.ts +135 -0
  249. package/src/types/models/KlarnaPaymentRequestData.ts +24 -0
  250. package/src/types/models/KlarnaRequestCustomerToken.ts +9 -0
  251. package/src/types/models/KlarnaRequestCustomerTokenScope.ts +8 -0
  252. package/src/types/models/KlarnaShipping.ts +15 -0
  253. package/src/types/models/KlarnaShippingConfig.ts +9 -0
  254. package/src/types/models/KlarnaShippingConfigMode.ts +4 -0
  255. package/src/types/models/KlarnaShippingOption.ts +12 -0
  256. package/src/types/models/KlarnaShippingRecipient.ts +13 -0
  257. package/src/types/models/KlarnaShippingType.ts +24 -0
  258. package/src/types/models/KlarnaShippingTypeAttribute.ts +20 -0
  259. package/src/types/models/KlarnaSubscription.ts +14 -0
  260. package/src/types/models/KlarnaSupplementaryPurchaseData.ts +21 -0
  261. package/src/types/models/index.ts +35 -0
@@ -0,0 +1,489 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import com.facebook.react.bridge.ReadableMap
5
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaCollectCustomerProfileType
6
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaInterval
7
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaRequestCustomerTokenScope
8
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingConfigMode
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingType
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationIntent
11
+ import io.mockk.every
12
+ import io.mockk.mockk
13
+ import io.mockk.unmockkAll
14
+ import org.junit.After
15
+ import org.junit.Test
16
+ import kotlin.test.assertEquals
17
+ import kotlin.test.assertFailsWith
18
+ import kotlin.test.assertNull
19
+
20
+ class KlarnaPaymentRequestMapperTest {
21
+
22
+ @After
23
+ fun tearDown() {
24
+ unmockkAll()
25
+ }
26
+
27
+ // region Helpers
28
+
29
+ private fun givenMinimalPaymentRequestMap(
30
+ amount: Double = 1000.0,
31
+ currency: String? = "SEK",
32
+ ): ReadableMap = mockk {
33
+ every { hasKey("amount") } returns true
34
+ every { getDouble("amount") } returns amount
35
+ every { getString("currency") } returns currency
36
+ every { getString("paymentOptionId") } returns null
37
+ every { getString("paymentRequestReference") } returns null
38
+ every { getMap("requestCustomerToken") } returns null
39
+ every { getMap("shippingConfig") } returns null
40
+ every { getArray("collectCustomerProfile") } returns null
41
+ every { getMap("supplementaryPurchaseData") } returns null
42
+ }
43
+
44
+ private fun givenPresentationDataMap(
45
+ amount: Double = 500.0,
46
+ currency: String = "USD",
47
+ intent: String? = null,
48
+ paymentProgramEnablementCodes: ReadableArray? = null,
49
+ subscriptionBillingInterval: String? = null,
50
+ hasBillingIntervalFrequency: Boolean = false,
51
+ billingIntervalFrequencyIsNull: Boolean = false,
52
+ billingIntervalFrequency: Int = 0,
53
+ ): ReadableMap = mockk {
54
+ every { getDouble("amount") } returns amount
55
+ every { getString("currency") } returns currency
56
+ every { getString("intent") } returns intent
57
+ every { getArray("paymentProgramEnablementCodes") } returns paymentProgramEnablementCodes
58
+ every { getString("subscriptionBillingInterval") } returns subscriptionBillingInterval
59
+ every { hasKey("subscriptionBillingIntervalFrequency") } returns hasBillingIntervalFrequency
60
+ every { isNull("subscriptionBillingIntervalFrequency") } returns billingIntervalFrequencyIsNull
61
+ every { getInt("subscriptionBillingIntervalFrequency") } returns billingIntervalFrequency
62
+ }
63
+
64
+ // endregion
65
+
66
+ // region buildPaymentRequestData tests
67
+
68
+ @Test
69
+ fun `buildPaymentRequestData - throws when amount key is missing`() {
70
+ val map = mockk<ReadableMap> {
71
+ every { hasKey("amount") } returns false
72
+ }
73
+
74
+ assertFailsWith<IllegalArgumentException> {
75
+ KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
76
+ }
77
+ }
78
+
79
+ @Test
80
+ fun `buildPaymentRequestData - throws when currency is null`() {
81
+ val map = givenMinimalPaymentRequestMap(currency = null)
82
+
83
+ assertFailsWith<IllegalArgumentException> {
84
+ KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
85
+ }
86
+ }
87
+
88
+ @Test
89
+ fun `buildPaymentRequestData - throws when currency is empty`() {
90
+ val map = givenMinimalPaymentRequestMap(currency = "")
91
+
92
+ assertFailsWith<IllegalArgumentException> {
93
+ KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
94
+ }
95
+ }
96
+
97
+ @Test
98
+ fun `buildPaymentRequestData - maps amount and currency correctly`() {
99
+ val map = givenMinimalPaymentRequestMap(amount = 2500.0, currency = "EUR")
100
+
101
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
102
+
103
+ assertEquals(2500L, result.amount)
104
+ assertEquals("EUR", result.currency)
105
+ }
106
+
107
+ @Test
108
+ fun `buildPaymentRequestData - maps optional top-level string fields`() {
109
+ val map = mockk<ReadableMap> {
110
+ every { hasKey("amount") } returns true
111
+ every { getDouble("amount") } returns 100.0
112
+ every { getString("currency") } returns "SEK"
113
+ every { getString("paymentOptionId") } returns "pay_opt_123"
114
+ every { getString("paymentRequestReference") } returns "ref_abc"
115
+ every { getMap("requestCustomerToken") } returns null
116
+ every { getMap("shippingConfig") } returns null
117
+ every { getArray("collectCustomerProfile") } returns null
118
+ every { getMap("supplementaryPurchaseData") } returns null
119
+ }
120
+
121
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
122
+
123
+ assertEquals("pay_opt_123", result.paymentOptionId)
124
+ assertEquals("ref_abc", result.paymentRequestReference)
125
+ }
126
+
127
+ @Test
128
+ fun `buildPaymentRequestData - passes null for optional maps and arrays when absent`() {
129
+ val map = givenMinimalPaymentRequestMap()
130
+
131
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
132
+
133
+ assertNull(result.requestCustomerToken)
134
+ assertNull(result.shippingConfig)
135
+ assertNull(result.collectCustomerProfile)
136
+ assertNull(result.supplementaryPurchaseData)
137
+ }
138
+
139
+ @Test
140
+ fun `buildPaymentRequestData - maps requestCustomerToken scopes correctly`() {
141
+ val scopesArray = mockk<ReadableArray> {
142
+ every { size() } returns 2
143
+ every { getString(0) } returns KlarnaRequestCustomerTokenScope.CUSTOMER_LOGIN.toString()
144
+ every { getString(1) } returns KlarnaRequestCustomerTokenScope.PAYMENT_CUSTOMER_PRESENT.toString()
145
+ }
146
+ val tokenMap = mockk<ReadableMap> {
147
+ every { getArray("scopes") } returns scopesArray
148
+ every { getString("customerTokenReference") } returns "tok_ref_1"
149
+ }
150
+ val map = mockk<ReadableMap> {
151
+ every { hasKey("amount") } returns true
152
+ every { getDouble("amount") } returns 100.0
153
+ every { getString("currency") } returns "SEK"
154
+ every { getString("paymentOptionId") } returns null
155
+ every { getString("paymentRequestReference") } returns null
156
+ every { getMap("requestCustomerToken") } returns tokenMap
157
+ every { getMap("shippingConfig") } returns null
158
+ every { getArray("collectCustomerProfile") } returns null
159
+ every { getMap("supplementaryPurchaseData") } returns null
160
+ }
161
+
162
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
163
+
164
+ val token = result.requestCustomerToken
165
+ assertEquals(2, token?.scopes?.size)
166
+ assertEquals(KlarnaRequestCustomerTokenScope.CUSTOMER_LOGIN, token?.scopes?.get(0))
167
+ assertEquals(KlarnaRequestCustomerTokenScope.PAYMENT_CUSTOMER_PRESENT, token?.scopes?.get(1))
168
+ assertEquals("tok_ref_1", token?.customerTokenReference)
169
+ }
170
+
171
+ @Test
172
+ fun `buildPaymentRequestData - maps shippingConfig mode correctly`() {
173
+ val shippingConfigMap = mockk<ReadableMap> {
174
+ every { getString("mode") } returns KlarnaShippingConfigMode.EDITABLE.toString()
175
+ every { getArray("supportedCountries") } returns null
176
+ }
177
+ val map = mockk<ReadableMap> {
178
+ every { hasKey("amount") } returns true
179
+ every { getDouble("amount") } returns 100.0
180
+ every { getString("currency") } returns "SEK"
181
+ every { getString("paymentOptionId") } returns null
182
+ every { getString("paymentRequestReference") } returns null
183
+ every { getMap("requestCustomerToken") } returns null
184
+ every { getMap("shippingConfig") } returns shippingConfigMap
185
+ every { getArray("collectCustomerProfile") } returns null
186
+ every { getMap("supplementaryPurchaseData") } returns null
187
+ }
188
+
189
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
190
+
191
+ assertEquals(KlarnaShippingConfigMode.EDITABLE, result.shippingConfig?.mode)
192
+ assertNull(result.shippingConfig?.supportedCountries)
193
+ }
194
+
195
+ @Test
196
+ fun `buildPaymentRequestData - defaults shippingConfig mode to EDITABLE for unknown string`() {
197
+ val shippingConfigMap = mockk<ReadableMap> {
198
+ every { getString("mode") } returns "UNKNOWN_MODE"
199
+ every { getArray("supportedCountries") } returns null
200
+ }
201
+ val map = mockk<ReadableMap> {
202
+ every { hasKey("amount") } returns true
203
+ every { getDouble("amount") } returns 100.0
204
+ every { getString("currency") } returns "SEK"
205
+ every { getString("paymentOptionId") } returns null
206
+ every { getString("paymentRequestReference") } returns null
207
+ every { getMap("requestCustomerToken") } returns null
208
+ every { getMap("shippingConfig") } returns shippingConfigMap
209
+ every { getArray("collectCustomerProfile") } returns null
210
+ every { getMap("supplementaryPurchaseData") } returns null
211
+ }
212
+
213
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
214
+
215
+ assertEquals(KlarnaShippingConfigMode.EDITABLE, result.shippingConfig?.mode)
216
+ }
217
+
218
+ @Test
219
+ fun `buildPaymentRequestData - maps collectCustomerProfile array`() {
220
+ val profileArray = mockk<ReadableArray> {
221
+ every { size() } returns 2
222
+ every { getString(0) } returns KlarnaCollectCustomerProfileType.EMAIL.toString()
223
+ every { getString(1) } returns KlarnaCollectCustomerProfileType.PHONE.toString()
224
+ }
225
+ val map = mockk<ReadableMap> {
226
+ every { hasKey("amount") } returns true
227
+ every { getDouble("amount") } returns 100.0
228
+ every { getString("currency") } returns "SEK"
229
+ every { getString("paymentOptionId") } returns null
230
+ every { getString("paymentRequestReference") } returns null
231
+ every { getMap("requestCustomerToken") } returns null
232
+ every { getMap("shippingConfig") } returns null
233
+ every { getArray("collectCustomerProfile") } returns profileArray
234
+ every { getMap("supplementaryPurchaseData") } returns null
235
+ }
236
+
237
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
238
+
239
+ val profiles = result.collectCustomerProfile
240
+ assertEquals(2, profiles?.size)
241
+ assertEquals(KlarnaCollectCustomerProfileType.EMAIL, profiles?.get(0))
242
+ assertEquals(KlarnaCollectCustomerProfileType.PHONE, profiles?.get(1))
243
+ }
244
+
245
+ // endregion
246
+
247
+ // region buildPresentationData tests
248
+
249
+ @Test
250
+ fun `buildPresentationData - maps amount and currency`() {
251
+ val map = givenPresentationDataMap(amount = 750.0, currency = "GBP")
252
+
253
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
254
+
255
+ assertEquals(750L, result.amount)
256
+ assertEquals("GBP", result.currency)
257
+ }
258
+
259
+ @Test
260
+ fun `buildPresentationData - maps known intent string to enum`() {
261
+ val map = givenPresentationDataMap(intent = KlarnaPaymentPresentationIntent.PAY.toString())
262
+
263
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
264
+
265
+ assertEquals(KlarnaPaymentPresentationIntent.PAY, result.intent)
266
+ }
267
+
268
+ @Test
269
+ fun `buildPresentationData - maps unknown intent string to null`() {
270
+ val map = givenPresentationDataMap(intent = "COMPLETELY_UNKNOWN")
271
+
272
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
273
+
274
+ assertNull(result.intent)
275
+ }
276
+
277
+ @Test
278
+ fun `buildPresentationData - maps null intent to null`() {
279
+ val map = givenPresentationDataMap(intent = null)
280
+
281
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
282
+
283
+ assertNull(result.intent)
284
+ }
285
+
286
+ @Test
287
+ fun `buildPresentationData - maps paymentProgramEnablementCodes array`() {
288
+ val codesArray = mockk<ReadableArray> {
289
+ every { size() } returns 2
290
+ every { getString(0) } returns "CODE_A"
291
+ every { getString(1) } returns "CODE_B"
292
+ }
293
+ val map = givenPresentationDataMap(paymentProgramEnablementCodes = codesArray)
294
+
295
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
296
+
297
+ assertEquals(listOf("CODE_A", "CODE_B"), result.paymentProgramEnablementCodes)
298
+ }
299
+
300
+ @Test
301
+ fun `buildPresentationData - maps null paymentProgramEnablementCodes to null`() {
302
+ val map = givenPresentationDataMap(paymentProgramEnablementCodes = null)
303
+
304
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
305
+
306
+ assertNull(result.paymentProgramEnablementCodes)
307
+ }
308
+
309
+ @Test
310
+ fun `buildPresentationData - maps known subscriptionBillingInterval string to enum`() {
311
+ val map = givenPresentationDataMap(subscriptionBillingInterval = KlarnaInterval.MONTH.toString())
312
+
313
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
314
+
315
+ assertEquals(KlarnaInterval.MONTH, result.subscriptionBillingInterval)
316
+ }
317
+
318
+ @Test
319
+ fun `buildPresentationData - maps unknown subscriptionBillingInterval string to null`() {
320
+ val map = givenPresentationDataMap(subscriptionBillingInterval = "DECADE")
321
+
322
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
323
+
324
+ assertNull(result.subscriptionBillingInterval)
325
+ }
326
+
327
+ @Test
328
+ fun `buildPresentationData - maps subscriptionBillingIntervalFrequency when present and non-null`() {
329
+ val map = givenPresentationDataMap(
330
+ hasBillingIntervalFrequency = true,
331
+ billingIntervalFrequencyIsNull = false,
332
+ billingIntervalFrequency = 3,
333
+ )
334
+
335
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
336
+
337
+ assertEquals(3, result.subscriptionBillingIntervalFrequency)
338
+ }
339
+
340
+ @Test
341
+ fun `buildPresentationData - maps subscriptionBillingIntervalFrequency to null when key absent`() {
342
+ val map = givenPresentationDataMap(hasBillingIntervalFrequency = false)
343
+
344
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
345
+
346
+ assertNull(result.subscriptionBillingIntervalFrequency)
347
+ }
348
+
349
+ @Test
350
+ fun `buildPresentationData - maps subscriptionBillingIntervalFrequency to null when value is null`() {
351
+ val map = givenPresentationDataMap(
352
+ hasBillingIntervalFrequency = true,
353
+ billingIntervalFrequencyIsNull = true,
354
+ )
355
+
356
+ val result = KlarnaPaymentRequestMapper.buildPresentationData(map)
357
+
358
+ assertNull(result.subscriptionBillingIntervalFrequency)
359
+ }
360
+
361
+ // endregion
362
+
363
+ // region buildShippingConfig (via buildPaymentRequestData) tests
364
+
365
+ @Test
366
+ fun `buildPaymentRequestData - maps shippingConfig supportedCountries`() {
367
+ val countriesArray = mockk<ReadableArray> {
368
+ every { size() } returns 2
369
+ every { getString(0) } returns "SE"
370
+ every { getString(1) } returns "NO"
371
+ }
372
+ val shippingConfigMap = mockk<ReadableMap> {
373
+ every { getString("mode") } returns KlarnaShippingConfigMode.EDITABLE.toString()
374
+ every { getArray("supportedCountries") } returns countriesArray
375
+ }
376
+ val map = mockk<ReadableMap> {
377
+ every { hasKey("amount") } returns true
378
+ every { getDouble("amount") } returns 100.0
379
+ every { getString("currency") } returns "SEK"
380
+ every { getString("paymentOptionId") } returns null
381
+ every { getString("paymentRequestReference") } returns null
382
+ every { getMap("requestCustomerToken") } returns null
383
+ every { getMap("shippingConfig") } returns shippingConfigMap
384
+ every { getArray("collectCustomerProfile") } returns null
385
+ every { getMap("supplementaryPurchaseData") } returns null
386
+ }
387
+
388
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
389
+
390
+ assertEquals(listOf("SE", "NO"), result.shippingConfig?.supportedCountries)
391
+ }
392
+
393
+ // endregion
394
+
395
+ // region buildShippingOption (via buildSupplementaryPurchaseData) tests
396
+
397
+ @Test
398
+ fun `buildPaymentRequestData - maps shippingOption with known type and attributes`() {
399
+ val attrsArray = mockk<ReadableArray> {
400
+ every { size() } returns 1
401
+ every { getString(0) } returns KlarnaShippingType.TO_DOOR.toString()
402
+ }
403
+ val shippingOptionMap = mockk<ReadableMap> {
404
+ every { getString("shippingCarrier") } returns "DHL"
405
+ every { getString("shippingType") } returns KlarnaShippingType.TO_DOOR.toString()
406
+ every { getArray("shippingTypeAttributes") } returns attrsArray
407
+ }
408
+ val shippingMap = mockk<ReadableMap> {
409
+ every { getMap("address") } returns null
410
+ every { getMap("recipient") } returns null
411
+ every { getMap("shippingOption") } returns shippingOptionMap
412
+ every { getString("shippingReference") } returns "ship_ref_1"
413
+ }
414
+ val shippingArray = mockk<ReadableArray> {
415
+ every { size() } returns 1
416
+ every { getMap(0) } returns shippingMap
417
+ }
418
+ val supplementaryMap = mockk<ReadableMap> {
419
+ every { getMap("customer") } returns null
420
+ every { getArray("lineItems") } returns null
421
+ every { getString("purchaseReference") } returns null
422
+ every { getArray("shipping") } returns shippingArray
423
+ every { getMap("ondemandService") } returns null
424
+ every { getArray("subscriptions") } returns null
425
+ }
426
+ val map = mockk<ReadableMap> {
427
+ every { hasKey("amount") } returns true
428
+ every { getDouble("amount") } returns 100.0
429
+ every { getString("currency") } returns "SEK"
430
+ every { getString("paymentOptionId") } returns null
431
+ every { getString("paymentRequestReference") } returns null
432
+ every { getMap("requestCustomerToken") } returns null
433
+ every { getMap("shippingConfig") } returns null
434
+ every { getArray("collectCustomerProfile") } returns null
435
+ every { getMap("supplementaryPurchaseData") } returns supplementaryMap
436
+ }
437
+
438
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
439
+
440
+ val shippingOption = result.supplementaryPurchaseData?.shipping?.first()?.shippingOption
441
+ assertEquals("DHL", shippingOption?.shippingCarrier)
442
+ assertEquals(KlarnaShippingType.TO_DOOR, shippingOption?.shippingType)
443
+ }
444
+
445
+ @Test
446
+ fun `buildPaymentRequestData - defaults shippingOption type to TO_DOOR for unknown string`() {
447
+ val shippingOptionMap = mockk<ReadableMap> {
448
+ every { getString("shippingCarrier") } returns null
449
+ every { getString("shippingType") } returns "TELEPORT"
450
+ every { getArray("shippingTypeAttributes") } returns null
451
+ }
452
+ val shippingMap = mockk<ReadableMap> {
453
+ every { getMap("address") } returns null
454
+ every { getMap("recipient") } returns null
455
+ every { getMap("shippingOption") } returns shippingOptionMap
456
+ every { getString("shippingReference") } returns null
457
+ }
458
+ val shippingArray = mockk<ReadableArray> {
459
+ every { size() } returns 1
460
+ every { getMap(0) } returns shippingMap
461
+ }
462
+ val supplementaryMap = mockk<ReadableMap> {
463
+ every { getMap("customer") } returns null
464
+ every { getArray("lineItems") } returns null
465
+ every { getString("purchaseReference") } returns null
466
+ every { getArray("shipping") } returns shippingArray
467
+ every { getMap("ondemandService") } returns null
468
+ every { getArray("subscriptions") } returns null
469
+ }
470
+ val map = mockk<ReadableMap> {
471
+ every { hasKey("amount") } returns true
472
+ every { getDouble("amount") } returns 100.0
473
+ every { getString("currency") } returns "SEK"
474
+ every { getString("paymentOptionId") } returns null
475
+ every { getString("paymentRequestReference") } returns null
476
+ every { getMap("requestCustomerToken") } returns null
477
+ every { getMap("shippingConfig") } returns null
478
+ every { getArray("collectCustomerProfile") } returns null
479
+ every { getMap("supplementaryPurchaseData") } returns supplementaryMap
480
+ }
481
+
482
+ val result = KlarnaPaymentRequestMapper.buildPaymentRequestData(map)
483
+
484
+ val shippingOption = result.supplementaryPurchaseData?.shipping?.first()?.shippingOption
485
+ assertEquals(KlarnaShippingType.TO_DOOR, shippingOption?.shippingType)
486
+ }
487
+
488
+ // endregion
489
+ }