@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,447 @@
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.payment.api.presentation.models.KlarnaPaymentPresentationContent
7
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationIcon
8
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationImageAlignment
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationInstruction
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationPaymentButton
11
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationPaymentOption
12
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationText
13
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationTextPart
14
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationTextPartLinkContext
15
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationTextPartStyle
16
+ import io.mockk.every
17
+ import io.mockk.mockk
18
+ import io.mockk.mockkStatic
19
+ import io.mockk.unmockkAll
20
+ import io.mockk.verify
21
+ import org.junit.After
22
+ import org.junit.Before
23
+ import org.junit.Test
24
+
25
+ class KlarnaPaymentPresentationMapperTest {
26
+
27
+ private lateinit var writableMap: WritableMap
28
+ private lateinit var writableArray: WritableArray
29
+
30
+ @Before
31
+ fun setUp() {
32
+ mockkStatic(Arguments::class)
33
+ writableMap = mockk(relaxed = true)
34
+ writableArray = mockk(relaxed = true)
35
+ every { Arguments.createMap() } returns writableMap
36
+ every { Arguments.createArray() } returns writableArray
37
+ }
38
+
39
+ @After
40
+ fun tearDown() {
41
+ unmockkAll()
42
+ }
43
+
44
+ // region Helpers
45
+
46
+ /**
47
+ * Stubs Arguments.createMap() to return [maps] in order: first call returns maps[0],
48
+ * second returns maps[1], etc. After all maps are consumed the last one is reused.
49
+ * Use this when the SUT calls createMap() multiple times in a single toWritableMap() call.
50
+ */
51
+ private fun givenCreateMapReturnsInOrder(vararg maps: WritableMap) {
52
+ every { Arguments.createMap() } returnsMany maps.toList()
53
+ }
54
+
55
+ // endregion
56
+
57
+ // region KlarnaPaymentPresentationText.toWritableMap tests
58
+
59
+ @Test
60
+ fun `KlarnaPaymentPresentationText PlainText toWritableMap - sets type to plainText and text`() {
61
+ // Given
62
+ val plainText = mockk<KlarnaPaymentPresentationText.PlainText> {
63
+ every { text } returns "Hello World"
64
+ }
65
+
66
+ // When
67
+ plainText.toWritableMap()
68
+
69
+ // Then
70
+ verify(exactly = 1) { writableMap.putString("type", "plainText") }
71
+ verify(exactly = 1) { writableMap.putString("text", "Hello World") }
72
+ }
73
+
74
+ @Test
75
+ fun `KlarnaPaymentPresentationText AttributedText toWritableMap - sets type to attributedText and parts array`() {
76
+ // Given
77
+ val outerMap = mockk<WritableMap>(relaxed = true)
78
+ val partMap = mockk<WritableMap>(relaxed = true)
79
+ givenCreateMapReturnsInOrder(outerMap, partMap)
80
+
81
+ val part = mockk<KlarnaPaymentPresentationTextPart.PlainText> {
82
+ every { text } returns "part text"
83
+ every { styles } returns null
84
+ }
85
+ val attributedText = mockk<KlarnaPaymentPresentationText.AttributedText> {
86
+ every { parts } returns listOf(part)
87
+ }
88
+
89
+ // When
90
+ attributedText.toWritableMap()
91
+
92
+ // Then
93
+ verify(exactly = 1) { outerMap.putString("type", "attributedText") }
94
+ verify(exactly = 1) { writableArray.pushMap(partMap) }
95
+ verify(exactly = 1) { outerMap.putArray("parts", writableArray) }
96
+ }
97
+
98
+ @Test
99
+ fun `KlarnaPaymentPresentationText AttributedText toWritableMap - puts null parts when absent`() {
100
+ // Given
101
+ val attributedText = mockk<KlarnaPaymentPresentationText.AttributedText> {
102
+ every { parts } returns null
103
+ }
104
+
105
+ // When
106
+ attributedText.toWritableMap()
107
+
108
+ // Then
109
+ verify(exactly = 1) { writableMap.putString("type", "attributedText") }
110
+ verify(exactly = 1) { writableMap.putNull("parts") }
111
+ verify(exactly = 0) { writableMap.putArray(eq("parts"), any()) }
112
+ }
113
+
114
+ // endregion
115
+
116
+ // region KlarnaPaymentPresentationTextPart.toWritableMap tests
117
+
118
+ @Test
119
+ fun `KlarnaPaymentPresentationTextPart PlainText toWritableMap - sets type to plain and text`() {
120
+ // Given
121
+ val part = mockk<KlarnaPaymentPresentationTextPart.PlainText> {
122
+ every { text } returns "plain content"
123
+ every { styles } returns null
124
+ }
125
+
126
+ // When
127
+ part.toWritableMap()
128
+
129
+ // Then
130
+ verify(exactly = 1) { writableMap.putString("type", "plain") }
131
+ verify(exactly = 1) { writableMap.putString("text", "plain content") }
132
+ verify(exactly = 1) { writableMap.putNull("styles") }
133
+ }
134
+
135
+ @Test
136
+ fun `KlarnaPaymentPresentationTextPart Link toWritableMap - sets type to link with url and context`() {
137
+ // Given
138
+ val part = mockk<KlarnaPaymentPresentationTextPart.Link> {
139
+ every { text } returns "Click here"
140
+ every { url } returns "https://klarna.com"
141
+ every { context } returns KlarnaPaymentPresentationTextPartLinkContext.INFO
142
+ every { styles } returns null
143
+ }
144
+
145
+ // When
146
+ part.toWritableMap()
147
+
148
+ // Then
149
+ verify(exactly = 1) { writableMap.putString("type", "link") }
150
+ verify(exactly = 1) { writableMap.putString("text", "Click here") }
151
+ verify(exactly = 1) { writableMap.putString("url", "https://klarna.com") }
152
+ verify(exactly = 1) {
153
+ writableMap.putString("context", KlarnaPaymentPresentationTextPartLinkContext.INFO.toString())
154
+ }
155
+ }
156
+
157
+ @Test
158
+ fun `KlarnaPaymentPresentationTextPart PlainText toWritableMap - puts styles array when present`() {
159
+ // Given
160
+ val boldStyle = KlarnaPaymentPresentationTextPartStyle.BOLD
161
+ val part = mockk<KlarnaPaymentPresentationTextPart.PlainText> {
162
+ every { text } returns "bold text"
163
+ every { styles } returns listOf(boldStyle)
164
+ }
165
+
166
+ // When
167
+ part.toWritableMap()
168
+
169
+ // Then
170
+ verify(exactly = 1) { writableArray.pushString(boldStyle.toString()) }
171
+ verify(exactly = 1) { writableMap.putArray("styles", writableArray) }
172
+ }
173
+
174
+ // endregion
175
+
176
+ // region KlarnaPaymentPresentationContent.toWritableMap tests
177
+
178
+ @Test
179
+ fun `KlarnaPaymentPresentationContent toWritableMap - puts paymentOption as map when present`() {
180
+ // Given
181
+ val contentMap = mockk<WritableMap>(relaxed = true)
182
+ val optionMap = mockk<WritableMap>(relaxed = true)
183
+ givenCreateMapReturnsInOrder(contentMap, optionMap)
184
+
185
+ val paymentOption = mockk<KlarnaPaymentPresentationPaymentOption>(relaxed = true) {
186
+ every { paymentOptionId } returns "opt_1"
187
+ }
188
+ val content = mockk<KlarnaPaymentPresentationContent> {
189
+ every { instruction } returns KlarnaPaymentPresentationInstruction.SHOW_KLARNA
190
+ every { paymentStatus } returns null
191
+ every { this@mockk.paymentOption } returns paymentOption
192
+ every { savedPaymentOption } returns null
193
+ }
194
+
195
+ // When
196
+ content.toWritableMap()
197
+
198
+ // Then
199
+ verify(exactly = 1) { contentMap.putMap("paymentOption", optionMap) }
200
+ verify(exactly = 0) { contentMap.putNull("paymentOption") }
201
+ }
202
+
203
+ @Test
204
+ fun `KlarnaPaymentPresentationContent toWritableMap - puts null paymentOption when absent`() {
205
+ // Given
206
+ val content = mockk<KlarnaPaymentPresentationContent> {
207
+ every { instruction } returns KlarnaPaymentPresentationInstruction.PRESELECT_KLARNA
208
+ every { paymentStatus } returns null
209
+ every { paymentOption } returns null
210
+ every { savedPaymentOption } returns null
211
+ }
212
+
213
+ // When
214
+ content.toWritableMap()
215
+
216
+ // Then
217
+ verify(exactly = 1) { writableMap.putNull("paymentOption") }
218
+ verify(exactly = 0) { writableMap.putMap(eq("paymentOption"), any()) }
219
+ }
220
+
221
+ @Test
222
+ fun `KlarnaPaymentPresentationContent toWritableMap - puts instruction string`() {
223
+ // Given
224
+ val content = mockk<KlarnaPaymentPresentationContent> {
225
+ every { instruction } returns KlarnaPaymentPresentationInstruction.SHOW_ONLY_KLARNA
226
+ every { paymentStatus } returns null
227
+ every { paymentOption } returns null
228
+ every { savedPaymentOption } returns null
229
+ }
230
+
231
+ // When
232
+ content.toWritableMap()
233
+
234
+ // Then
235
+ verify(exactly = 1) {
236
+ writableMap.putString("instruction", KlarnaPaymentPresentationInstruction.SHOW_ONLY_KLARNA.toString())
237
+ }
238
+ }
239
+
240
+ // endregion
241
+
242
+ // region KlarnaPaymentPresentationPaymentButton.toWritableMap tests
243
+
244
+ @Test
245
+ fun `KlarnaPaymentPresentationPaymentButton toWritableMap - puts all fields when present`() {
246
+ // Given
247
+ val button = mockk<KlarnaPaymentPresentationPaymentButton> {
248
+ every { text } returns "Pay now"
249
+ every { imageUrl } returns "https://example.com/icon.png"
250
+ every { imageAlignment } returns KlarnaPaymentPresentationImageAlignment.RIGHT
251
+ }
252
+
253
+ // When
254
+ button.toWritableMap()
255
+
256
+ // Then
257
+ verify(exactly = 1) { writableMap.putString("text", "Pay now") }
258
+ verify(exactly = 1) { writableMap.putString("imageUrl", "https://example.com/icon.png") }
259
+ verify(exactly = 1) {
260
+ writableMap.putString("imageAlignment", KlarnaPaymentPresentationImageAlignment.RIGHT.toString())
261
+ }
262
+ }
263
+
264
+ @Test
265
+ fun `KlarnaPaymentPresentationPaymentButton toWritableMap - puts null imageUrl when absent`() {
266
+ // Given
267
+ val button = mockk<KlarnaPaymentPresentationPaymentButton> {
268
+ every { text } returns "Pay"
269
+ every { imageUrl } returns null
270
+ every { imageAlignment } returns null
271
+ }
272
+
273
+ // When
274
+ button.toWritableMap()
275
+
276
+ // Then
277
+ verify(exactly = 1) { writableMap.putString("imageUrl", null) }
278
+ verify(exactly = 1) { writableMap.putString("imageAlignment", null) }
279
+ }
280
+
281
+ // endregion
282
+
283
+ // region KlarnaPaymentPresentationIcon.toWritableMap tests
284
+
285
+ @Test
286
+ fun `KlarnaPaymentPresentationIcon toWritableMap - puts all fields when present`() {
287
+ // Given
288
+ val icon = mockk<KlarnaPaymentPresentationIcon> {
289
+ every { alt } returns "Klarna logo"
290
+ every { badgeImageUrl } returns "https://example.com/badge.png"
291
+ every { rectangleImageUrl } returns "https://example.com/rect.png"
292
+ every { squareImageUrl } returns "https://example.com/square.png"
293
+ }
294
+
295
+ // When
296
+ icon.toWritableMap()
297
+
298
+ // Then
299
+ verify(exactly = 1) { writableMap.putString("alt", "Klarna logo") }
300
+ verify(exactly = 1) { writableMap.putString("badgeImageUrl", "https://example.com/badge.png") }
301
+ verify(exactly = 1) { writableMap.putString("rectangleImageUrl", "https://example.com/rect.png") }
302
+ verify(exactly = 1) { writableMap.putString("squareImageUrl", "https://example.com/square.png") }
303
+ }
304
+
305
+ @Test
306
+ fun `KlarnaPaymentPresentationIcon toWritableMap - puts null for all absent fields`() {
307
+ // Given
308
+ val icon = mockk<KlarnaPaymentPresentationIcon> {
309
+ every { alt } returns null
310
+ every { badgeImageUrl } returns null
311
+ every { rectangleImageUrl } returns null
312
+ every { squareImageUrl } returns null
313
+ }
314
+
315
+ // When
316
+ icon.toWritableMap()
317
+
318
+ // Then
319
+ verify(exactly = 1) { writableMap.putString("alt", null) }
320
+ verify(exactly = 1) { writableMap.putString("badgeImageUrl", null) }
321
+ verify(exactly = 1) { writableMap.putString("rectangleImageUrl", null) }
322
+ verify(exactly = 1) { writableMap.putString("squareImageUrl", null) }
323
+ }
324
+
325
+ // endregion
326
+
327
+ // region KlarnaPaymentPresentationPaymentOption.toWritableMap tests
328
+
329
+ @Test
330
+ fun `KlarnaPaymentPresentationPaymentOption toWritableMap - puts paymentOptionId`() {
331
+ // Given
332
+ val option = mockk<KlarnaPaymentPresentationPaymentOption> {
333
+ every { paymentOptionId } returns "opt_klarna"
334
+ every { header } returns null
335
+ every { badge } returns null
336
+ every { subheader } returns null
337
+ every { message } returns null
338
+ every { terms } returns null
339
+ every { paymentButton } returns null
340
+ every { icon } returns null
341
+ }
342
+
343
+ // When
344
+ option.toWritableMap()
345
+
346
+ // Then
347
+ verify(exactly = 1) { writableMap.putString("paymentOptionId", "opt_klarna") }
348
+ }
349
+
350
+ @Test
351
+ fun `KlarnaPaymentPresentationPaymentOption toWritableMap - puts null for all absent optional fields`() {
352
+ // Given
353
+ val option = mockk<KlarnaPaymentPresentationPaymentOption> {
354
+ every { paymentOptionId } returns "opt_klarna"
355
+ every { header } returns null
356
+ every { badge } returns null
357
+ every { subheader } returns null
358
+ every { message } returns null
359
+ every { terms } returns null
360
+ every { paymentButton } returns null
361
+ every { icon } returns null
362
+ }
363
+
364
+ // When
365
+ option.toWritableMap()
366
+
367
+ // Then
368
+ verify(exactly = 1) { writableMap.putNull("header") }
369
+ verify(exactly = 1) { writableMap.putNull("badge") }
370
+ verify(exactly = 1) { writableMap.putNull("subheader") }
371
+ verify(exactly = 1) { writableMap.putNull("message") }
372
+ verify(exactly = 1) { writableMap.putNull("terms") }
373
+ verify(exactly = 1) { writableMap.putNull("paymentButton") }
374
+ verify(exactly = 1) { writableMap.putNull("icon") }
375
+ }
376
+
377
+ @Test
378
+ fun `KlarnaPaymentPresentationPaymentOption toWritableMap - puts header as map when present`() {
379
+ // Given
380
+ val optionMap = mockk<WritableMap>(relaxed = true)
381
+ val headerMap = mockk<WritableMap>(relaxed = true)
382
+ givenCreateMapReturnsInOrder(optionMap, headerMap)
383
+
384
+ val header = mockk<KlarnaPaymentPresentationText.PlainText> {
385
+ every { text } returns "Pay with Klarna"
386
+ }
387
+ val option = mockk<KlarnaPaymentPresentationPaymentOption> {
388
+ every { paymentOptionId } returns "opt_klarna"
389
+ every { this@mockk.header } returns header
390
+ every { badge } returns null
391
+ every { subheader } returns null
392
+ every { message } returns null
393
+ every { terms } returns null
394
+ every { paymentButton } returns null
395
+ every { icon } returns null
396
+ }
397
+
398
+ // When
399
+ option.toWritableMap()
400
+
401
+ // Then
402
+ verify(exactly = 1) { optionMap.putMap("header", headerMap) }
403
+ verify(exactly = 0) { optionMap.putNull("header") }
404
+ }
405
+
406
+ @Test
407
+ fun `KlarnaPaymentPresentationPaymentOption toWritableMap - puts paymentButton and icon as maps when present`() {
408
+ // Given
409
+ val optionMap = mockk<WritableMap>(relaxed = true)
410
+ val buttonMap = mockk<WritableMap>(relaxed = true)
411
+ val iconMap = mockk<WritableMap>(relaxed = true)
412
+ givenCreateMapReturnsInOrder(optionMap, buttonMap, iconMap)
413
+
414
+ val button = mockk<KlarnaPaymentPresentationPaymentButton> {
415
+ every { text } returns "Pay now"
416
+ every { imageUrl } returns null
417
+ every { imageAlignment } returns null
418
+ }
419
+ val icon = mockk<KlarnaPaymentPresentationIcon> {
420
+ every { alt } returns null
421
+ every { badgeImageUrl } returns null
422
+ every { rectangleImageUrl } returns null
423
+ every { squareImageUrl } returns null
424
+ }
425
+ val option = mockk<KlarnaPaymentPresentationPaymentOption> {
426
+ every { paymentOptionId } returns "opt_klarna"
427
+ every { header } returns null
428
+ every { badge } returns null
429
+ every { subheader } returns null
430
+ every { message } returns null
431
+ every { terms } returns null
432
+ every { paymentButton } returns button
433
+ every { this@mockk.icon } returns icon
434
+ }
435
+
436
+ // When
437
+ option.toWritableMap()
438
+
439
+ // Then
440
+ verify(exactly = 1) { optionMap.putMap("paymentButton", buttonMap) }
441
+ verify(exactly = 0) { optionMap.putNull("paymentButton") }
442
+ verify(exactly = 1) { optionMap.putMap("icon", iconMap) }
443
+ verify(exactly = 0) { optionMap.putNull("icon") }
444
+ }
445
+
446
+ // endregion
447
+ }