@klarna/react-native-klarna-network-payment 0.0.1 → 2.7.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 +77 -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 +28 -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,456 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.WritableArray
5
+ import com.facebook.react.bridge.WritableMap
6
+ import com.klarna.mobile.sdk.klarna.network.core.api.models.KlarnaAddress
7
+ import com.klarna.mobile.sdk.klarna.network.core.api.models.KlarnaCustomerProfile
8
+ import com.klarna.mobile.sdk.klarna.network.payment.api.KlarnaPaymentRequest
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaCustomer
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPaymentRequestState
11
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPaymentRequestStateContext
12
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShipping
13
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingOption
14
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingRecipient
15
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingType
16
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingTypeAttribute
17
+ import io.mockk.every
18
+ import io.mockk.mockk
19
+ import io.mockk.mockkStatic
20
+ import io.mockk.unmockkAll
21
+ import io.mockk.verify
22
+ import org.junit.After
23
+ import org.junit.Before
24
+ import org.junit.Test
25
+
26
+ class KlarnaPaymentResponseMapperTest {
27
+
28
+ private lateinit var writableMap: WritableMap
29
+ private lateinit var writableArray: WritableArray
30
+
31
+ @Before
32
+ fun setUp() {
33
+ mockkStatic(Arguments::class)
34
+ writableMap = mockk(relaxed = true)
35
+ writableArray = mockk(relaxed = true)
36
+ every { Arguments.createMap() } returns writableMap
37
+ every { Arguments.createArray() } returns writableArray
38
+ }
39
+
40
+ @After
41
+ fun tearDown() {
42
+ unmockkAll()
43
+ }
44
+
45
+ // region Helpers
46
+
47
+ /**
48
+ * Stubs Arguments.createMap() to return [maps] in order: first call returns maps[0],
49
+ * second returns maps[1], etc. After all maps are consumed the last one is reused.
50
+ * Use this when the SUT calls createMap() multiple times in a single toWritableMap() call.
51
+ */
52
+ private fun givenCreateMapReturnsInOrder(vararg maps: WritableMap) {
53
+ every { Arguments.createMap() } returnsMany maps.toList()
54
+ }
55
+
56
+ // endregion
57
+
58
+ // region KlarnaPaymentRequest.toWritableMap tests
59
+
60
+ @Test
61
+ fun `KlarnaPaymentRequest toWritableMap - puts paymentRequestId and state`() {
62
+ // Given
63
+ val request = mockk<KlarnaPaymentRequest> {
64
+ every { paymentRequestId } returns "pr_abc"
65
+ every { state } returns KlarnaPaymentRequestState.SUBMITTED
66
+ every { previousState } returns null
67
+ every { stateReason } returns null
68
+ every { paymentRequestReference } returns "ref_123"
69
+ every { stateContext } returns null
70
+ }
71
+
72
+ // When
73
+ request.toWritableMap()
74
+
75
+ // Then
76
+ verify(exactly = 1) { writableMap.putString("paymentRequestId", "pr_abc") }
77
+ verify(exactly = 1) { writableMap.putString("state", KlarnaPaymentRequestState.SUBMITTED.toString()) }
78
+ verify(exactly = 1) { writableMap.putString("paymentRequestReference", "ref_123") }
79
+ }
80
+
81
+ @Test
82
+ fun `KlarnaPaymentRequest toWritableMap - puts null stateContext when absent`() {
83
+ // Given
84
+ val request = mockk<KlarnaPaymentRequest> {
85
+ every { paymentRequestId } returns "pr_abc"
86
+ every { state } returns KlarnaPaymentRequestState.SUBMITTED
87
+ every { previousState } returns null
88
+ every { stateReason } returns null
89
+ every { paymentRequestReference } returns null
90
+ every { stateContext } returns null
91
+ }
92
+
93
+ // When
94
+ request.toWritableMap()
95
+
96
+ // Then
97
+ verify(exactly = 1) { writableMap.putNull("stateContext") }
98
+ verify(exactly = 0) { writableMap.putMap(eq("stateContext"), any()) }
99
+ }
100
+
101
+ @Test
102
+ fun `KlarnaPaymentRequest toWritableMap - puts stateContext map when present`() {
103
+ // Given
104
+ val outerMap = mockk<WritableMap>(relaxed = true)
105
+ val contextMap = mockk<WritableMap>(relaxed = true)
106
+ givenCreateMapReturnsInOrder(outerMap, contextMap)
107
+
108
+ val mockStateContext = mockk<KlarnaPaymentRequestStateContext> {
109
+ every { klarnaNetworkSessionToken } returns "session_tok"
110
+ every { klarnaCustomer } returns null
111
+ every { shipping } returns null
112
+ }
113
+ val request = mockk<KlarnaPaymentRequest> {
114
+ every { paymentRequestId } returns "pr_abc"
115
+ every { state } returns KlarnaPaymentRequestState.IN_PROGRESS
116
+ every { previousState } returns null
117
+ every { stateReason } returns null
118
+ every { paymentRequestReference } returns null
119
+ every { stateContext } returns mockStateContext
120
+ }
121
+
122
+ // When
123
+ request.toWritableMap()
124
+
125
+ // Then
126
+ verify(exactly = 1) { outerMap.putMap("stateContext", contextMap) }
127
+ }
128
+
129
+ // endregion
130
+
131
+ // region KlarnaCustomerProfile.toWritableMap tests
132
+
133
+ @Test
134
+ fun `KlarnaCustomerProfile toWritableMap - puts emailVerified boolean when non-null`() {
135
+ // Given
136
+ val profile = mockk<KlarnaCustomerProfile> {
137
+ every { address } returns null
138
+ every { customerId } returns "cust_1"
139
+ every { country } returns "SE"
140
+ every { email } returns "user@example.com"
141
+ every { emailVerified } returns true
142
+ every { familyName } returns "Doe"
143
+ every { givenName } returns "Jane"
144
+ every { locale } returns "en-SE"
145
+ every { phone } returns null
146
+ every { phoneVerified } returns null
147
+ }
148
+
149
+ // When
150
+ profile.toWritableMap()
151
+
152
+ // Then
153
+ verify(exactly = 1) { writableMap.putBoolean("emailVerified", true) }
154
+ verify(exactly = 0) { writableMap.putNull("emailVerified") }
155
+ }
156
+
157
+ @Test
158
+ fun `KlarnaCustomerProfile toWritableMap - puts null emailVerified when absent`() {
159
+ // Given
160
+ val profile = mockk<KlarnaCustomerProfile> {
161
+ every { address } returns null
162
+ every { customerId } returns null
163
+ every { country } returns null
164
+ every { email } returns null
165
+ every { emailVerified } returns null
166
+ every { familyName } returns null
167
+ every { givenName } returns null
168
+ every { locale } returns null
169
+ every { phone } returns null
170
+ every { phoneVerified } returns null
171
+ }
172
+
173
+ // When
174
+ profile.toWritableMap()
175
+
176
+ // Then
177
+ verify(exactly = 1) { writableMap.putNull("emailVerified") }
178
+ verify(exactly = 0) { writableMap.putBoolean(eq("emailVerified"), any()) }
179
+ }
180
+
181
+ @Test
182
+ fun `KlarnaCustomerProfile toWritableMap - puts phoneVerified boolean when non-null`() {
183
+ // Given
184
+ val profile = mockk<KlarnaCustomerProfile> {
185
+ every { address } returns null
186
+ every { customerId } returns null
187
+ every { country } returns null
188
+ every { email } returns null
189
+ every { emailVerified } returns null
190
+ every { familyName } returns null
191
+ every { givenName } returns null
192
+ every { locale } returns null
193
+ every { phone } returns null
194
+ every { phoneVerified } returns false
195
+ }
196
+
197
+ // When
198
+ profile.toWritableMap()
199
+
200
+ // Then
201
+ verify(exactly = 1) { writableMap.putBoolean("phoneVerified", false) }
202
+ verify(exactly = 0) { writableMap.putNull("phoneVerified") }
203
+ }
204
+
205
+ @Test
206
+ fun `KlarnaCustomerProfile toWritableMap - puts address map when present`() {
207
+ // Given
208
+ val profileMap = mockk<WritableMap>(relaxed = true)
209
+ val addressMap = mockk<WritableMap>(relaxed = true)
210
+ givenCreateMapReturnsInOrder(profileMap, addressMap)
211
+
212
+ val address = mockk<KlarnaAddress> {
213
+ every { city } returns "Stockholm"
214
+ every { country } returns "SE"
215
+ every { postalCode } returns "11122"
216
+ every { region } returns null
217
+ every { streetAddress } returns "Sveavägen 1"
218
+ every { streetAddress2 } returns null
219
+ }
220
+ val profile = mockk<KlarnaCustomerProfile> {
221
+ every { this@mockk.address } returns address
222
+ every { customerId } returns null
223
+ every { country } returns null
224
+ every { email } returns null
225
+ every { emailVerified } returns null
226
+ every { familyName } returns null
227
+ every { givenName } returns null
228
+ every { locale } returns null
229
+ every { phone } returns null
230
+ every { phoneVerified } returns null
231
+ }
232
+
233
+ // When
234
+ profile.toWritableMap()
235
+
236
+ // Then
237
+ verify(exactly = 1) { profileMap.putMap("address", addressMap) }
238
+ }
239
+
240
+ // endregion
241
+
242
+ // region KlarnaShippingOption.toWritableMap tests
243
+
244
+ @Test
245
+ fun `KlarnaShippingOption toWritableMap - puts shippingTypeAttributes array when present`() {
246
+ // Given
247
+ val option = mockk<KlarnaShippingOption> {
248
+ every { shippingCarrier } returns "PostNord"
249
+ every { shippingType } returns KlarnaShippingType.TO_DOOR
250
+ every { shippingTypeAttributes } returns listOf(KlarnaShippingTypeAttribute.SIGNATURE_REQUIRED)
251
+ }
252
+
253
+ // When
254
+ option.toWritableMap()
255
+
256
+ // Then
257
+ verify(exactly = 1) { writableArray.pushString(KlarnaShippingTypeAttribute.SIGNATURE_REQUIRED.toString()) }
258
+ verify(exactly = 1) { writableMap.putArray("shippingTypeAttributes", writableArray) }
259
+ verify(exactly = 0) { writableMap.putNull("shippingTypeAttributes") }
260
+ }
261
+
262
+ @Test
263
+ fun `KlarnaShippingOption toWritableMap - puts null shippingTypeAttributes when absent`() {
264
+ // Given
265
+ val option = mockk<KlarnaShippingOption> {
266
+ every { shippingCarrier } returns null
267
+ every { shippingType } returns KlarnaShippingType.TO_MAILBOX
268
+ every { shippingTypeAttributes } returns null
269
+ }
270
+
271
+ // When
272
+ option.toWritableMap()
273
+
274
+ // Then
275
+ verify(exactly = 1) { writableMap.putNull("shippingTypeAttributes") }
276
+ verify(exactly = 0) { writableMap.putArray(eq("shippingTypeAttributes"), any()) }
277
+ }
278
+
279
+ @Test
280
+ fun `KlarnaShippingOption toWritableMap - puts shippingCarrier and shippingType`() {
281
+ // Given
282
+ val option = mockk<KlarnaShippingOption> {
283
+ every { shippingCarrier } returns "DHL"
284
+ every { shippingType } returns KlarnaShippingType.PICKUP_BOX
285
+ every { shippingTypeAttributes } returns null
286
+ }
287
+
288
+ // When
289
+ option.toWritableMap()
290
+
291
+ // Then
292
+ verify(exactly = 1) { writableMap.putString("shippingCarrier", "DHL") }
293
+ verify(exactly = 1) { writableMap.putString("shippingType", KlarnaShippingType.PICKUP_BOX.toString()) }
294
+ }
295
+
296
+ // endregion
297
+
298
+ // region KlarnaShipping.toWritableMap tests
299
+
300
+ @Test
301
+ fun `KlarnaShipping toWritableMap - puts address map when present`() {
302
+ // Given
303
+ val shippingMap = mockk<WritableMap>(relaxed = true)
304
+ val addressMap = mockk<WritableMap>(relaxed = true)
305
+ givenCreateMapReturnsInOrder(shippingMap, addressMap)
306
+
307
+ val address = mockk<KlarnaAddress> {
308
+ every { city } returns "Gothenburg"
309
+ every { country } returns "SE"
310
+ every { postalCode } returns "41101"
311
+ every { region } returns null
312
+ every { streetAddress } returns "Avenyn 1"
313
+ every { streetAddress2 } returns null
314
+ }
315
+ val shipping = mockk<KlarnaShipping> {
316
+ every { this@mockk.address } returns address
317
+ every { recipient } returns null
318
+ every { shippingOption } returns null
319
+ every { shippingReference } returns null
320
+ }
321
+
322
+ // When
323
+ shipping.toWritableMap()
324
+
325
+ // Then
326
+ verify(exactly = 1) { shippingMap.putMap("address", addressMap) }
327
+ }
328
+
329
+ @Test
330
+ fun `KlarnaShipping toWritableMap - puts null address when absent`() {
331
+ // Given
332
+ val shipping = mockk<KlarnaShipping> {
333
+ every { address } returns null
334
+ every { recipient } returns null
335
+ every { shippingOption } returns null
336
+ every { shippingReference } returns "ref_ship_1"
337
+ }
338
+
339
+ // When
340
+ shipping.toWritableMap()
341
+
342
+ // Then
343
+ verify(exactly = 1) { writableMap.putNull("address") }
344
+ verify(exactly = 1) { writableMap.putString("shippingReference", "ref_ship_1") }
345
+ }
346
+
347
+ // endregion
348
+
349
+ // region KlarnaAddress.toWritableMap tests
350
+
351
+ @Test
352
+ fun `KlarnaAddress toWritableMap - puts all address fields`() {
353
+ // Given
354
+ val address = mockk<KlarnaAddress> {
355
+ every { city } returns "Malmö"
356
+ every { country } returns "SE"
357
+ every { postalCode } returns "21120"
358
+ every { region } returns "Skåne"
359
+ every { streetAddress } returns "Stortorget 1"
360
+ every { streetAddress2 } returns "Floor 2"
361
+ }
362
+
363
+ // When
364
+ address.toWritableMap()
365
+
366
+ // Then
367
+ verify(exactly = 1) { writableMap.putString("city", "Malmö") }
368
+ verify(exactly = 1) { writableMap.putString("country", "SE") }
369
+ verify(exactly = 1) { writableMap.putString("postalCode", "21120") }
370
+ verify(exactly = 1) { writableMap.putString("region", "Skåne") }
371
+ verify(exactly = 1) { writableMap.putString("streetAddress", "Stortorget 1") }
372
+ verify(exactly = 1) { writableMap.putString("streetAddress2", "Floor 2") }
373
+ }
374
+
375
+ // endregion
376
+
377
+ // region KlarnaShippingRecipient.toWritableMap tests
378
+
379
+ @Test
380
+ fun `KlarnaShippingRecipient toWritableMap - puts all recipient fields`() {
381
+ // Given
382
+ val recipient = mockk<KlarnaShippingRecipient> {
383
+ every { attention } returns "Attn: Reception"
384
+ every { email } returns "recipient@example.com"
385
+ every { familyName } returns "Smith"
386
+ every { givenName } returns "John"
387
+ every { phone } returns "+46700000000"
388
+ }
389
+
390
+ // When
391
+ recipient.toWritableMap()
392
+
393
+ // Then
394
+ verify(exactly = 1) { writableMap.putString("attention", "Attn: Reception") }
395
+ verify(exactly = 1) { writableMap.putString("email", "recipient@example.com") }
396
+ verify(exactly = 1) { writableMap.putString("familyName", "Smith") }
397
+ verify(exactly = 1) { writableMap.putString("givenName", "John") }
398
+ verify(exactly = 1) { writableMap.putString("phone", "+46700000000") }
399
+ }
400
+
401
+ // endregion
402
+
403
+ // region KlarnaCustomer.toWritableMap tests
404
+
405
+ @Test
406
+ fun `KlarnaCustomer toWritableMap - puts customerToken and customerTokenReference`() {
407
+ // Given
408
+ val customer = mockk<KlarnaCustomer> {
409
+ every { customerToken } returns "tok_xyz"
410
+ every { customerTokenReference } returns "tok_ref_xyz"
411
+ every { customerProfile } returns null
412
+ }
413
+
414
+ // When
415
+ customer.toWritableMap()
416
+
417
+ // Then
418
+ verify(exactly = 1) { writableMap.putString("customerToken", "tok_xyz") }
419
+ verify(exactly = 1) { writableMap.putString("customerTokenReference", "tok_ref_xyz") }
420
+ verify(exactly = 1) { writableMap.putNull("customerProfile") }
421
+ }
422
+
423
+ @Test
424
+ fun `KlarnaCustomer toWritableMap - puts customerProfile map when present`() {
425
+ // Given
426
+ val customerMap = mockk<WritableMap>(relaxed = true)
427
+ val profileMap = mockk<WritableMap>(relaxed = true)
428
+ givenCreateMapReturnsInOrder(customerMap, profileMap)
429
+
430
+ val profile = mockk<KlarnaCustomerProfile> {
431
+ every { address } returns null
432
+ every { customerId } returns null
433
+ every { country } returns null
434
+ every { email } returns null
435
+ every { emailVerified } returns null
436
+ every { familyName } returns null
437
+ every { givenName } returns null
438
+ every { locale } returns null
439
+ every { phone } returns null
440
+ every { phoneVerified } returns null
441
+ }
442
+ val customer = mockk<KlarnaCustomer> {
443
+ every { customerToken } returns null
444
+ every { customerTokenReference } returns null
445
+ every { customerProfile } returns profile
446
+ }
447
+
448
+ // When
449
+ customer.toWritableMap()
450
+
451
+ // Then
452
+ verify(exactly = 1) { customerMap.putMap("customerProfile", profileMap) }
453
+ }
454
+
455
+ // endregion
456
+ }
@@ -0,0 +1,5 @@
1
+ #import <KlarnaNetworkPaymentSpec/KlarnaNetworkPaymentSpec.h>
2
+
3
+ @interface KlarnaNetworkPayment : NSObject <NativeKlarnaNetworkPaymentSpec>
4
+
5
+ @end
@@ -0,0 +1,110 @@
1
+ #import "KlarnaNetworkPayment.h"
2
+ // Framework form resolves under use_frameworks!; quoted form is the headermap fallback for static builds.
3
+ #if __has_include(<react_native_klarna_network_payment/react_native_klarna_network_payment-Swift.h>)
4
+ #import <react_native_klarna_network_payment/react_native_klarna_network_payment-Swift.h>
5
+ #else
6
+ #import "react_native_klarna_network_payment-Swift.h"
7
+ #endif
8
+
9
+ @interface KlarnaNetworkPayment ()
10
+
11
+ @property (nonatomic, strong) KlarnaNetworkPaymentModuleImpl *impl;
12
+
13
+ @end
14
+
15
+ @implementation KlarnaNetworkPayment
16
+
17
+ - (KlarnaNetworkPaymentModuleImpl *)impl {
18
+ if (!_impl) {
19
+ _impl = [KlarnaNetworkPaymentModuleImpl new];
20
+ }
21
+ return _impl;
22
+ }
23
+
24
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
25
+ (const facebook::react::ObjCTurboModule::InitParams &)params
26
+ {
27
+ return std::make_shared<facebook::react::NativeKlarnaNetworkPaymentSpecJSI>(params);
28
+ }
29
+
30
+ + (NSString *)moduleName
31
+ {
32
+ return @"KlarnaNetworkPayment";
33
+ }
34
+
35
+ # pragma mark - NativeKlarnaNetworkPaymentSpec
36
+
37
+ - (void)initiateWithId:(nonnull NSString *)instanceId
38
+ paymentRequestId:(nonnull NSString *)paymentRequestId
39
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
40
+ reject:(nonnull RCTPromiseRejectBlock)reject
41
+ {
42
+ [self.impl initiateWithIdWithInstanceId:instanceId
43
+ paymentRequestId:paymentRequestId
44
+ resolve:resolve
45
+ reject:reject];
46
+ }
47
+
48
+ - (void)initiateWithData:(nonnull NSString *)instanceId
49
+ data:(NSDictionary *)data
50
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
51
+ reject:(nonnull RCTPromiseRejectBlock)reject
52
+ {
53
+ [self.impl initiateWithDataWithInstanceId:instanceId
54
+ data:data
55
+ resolve:resolve
56
+ reject:reject];
57
+ }
58
+
59
+ - (void)fetch:(nonnull NSString *)instanceId
60
+ paymentRequestId:(nonnull NSString *)paymentRequestId
61
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
62
+ reject:(nonnull RCTPromiseRejectBlock)reject
63
+ {
64
+ [self.impl fetchWithInstanceId:instanceId
65
+ paymentRequestId:paymentRequestId
66
+ resolve:resolve
67
+ reject:reject];
68
+ }
69
+
70
+ - (void)cancel:(nonnull NSString *)instanceId
71
+ paymentRequestId:(nonnull NSString *)paymentRequestId
72
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
73
+ reject:(nonnull RCTPromiseRejectBlock)reject
74
+ {
75
+ [self.impl cancelWithInstanceId:instanceId
76
+ paymentRequestId:paymentRequestId
77
+ resolve:resolve
78
+ reject:reject];
79
+ }
80
+
81
+ - (void)presentationFetch:(nonnull NSString *)instanceId
82
+ data:(NSDictionary *)data
83
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
84
+ reject:(nonnull RCTPromiseRejectBlock)reject
85
+ {
86
+ [self.impl presentationFetchWithInstanceId:instanceId
87
+ data:data
88
+ resolve:resolve
89
+ reject:reject];
90
+ }
91
+
92
+ - (void)presentationHandleLink:(nonnull NSString *)instanceId
93
+ url:(nonnull NSString *)url
94
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
95
+ reject:(nonnull RCTPromiseRejectBlock)reject
96
+ {
97
+ [self.impl presentationHandleLinkWithInstanceId:instanceId
98
+ url:url
99
+ resolve:resolve
100
+ reject:reject];
101
+ }
102
+
103
+ - (void)dispose:(nonnull NSString *)instanceId
104
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
105
+ reject:(nonnull RCTPromiseRejectBlock)reject
106
+ {
107
+ [self.impl disposeWithInstanceId:instanceId resolve:resolve reject:reject];
108
+ }
109
+
110
+ @end