@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,361 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import android.app.Activity
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.klarna.mobile.sdk.klarna.network.core.api.common.KlarnaResult
9
+ import com.klarna.mobile.sdk.klarna.network.core.api.common.KlarnaSDKError
10
+ import com.klarna.mobile.sdk.klarna.network.core.api.klarna.Klarna
11
+ import com.klarna.mobile.sdk.klarna.network.payment.api.KlarnaPayment
12
+ import com.klarna.mobile.sdk.klarna.network.payment.api.KlarnaPaymentRequest
13
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.KlarnaPaymentPresentation
14
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationContent
15
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPaymentRequestData
16
+ import com.klarna.mobile.sdk.klarna.network.payment.api.payment
17
+ import com.klarna.mobile.sdk.reactnative.klarnanetwork.core.KlarnaNetworkCoreModuleImpl
18
+ import android.os.Handler
19
+ import android.os.Looper
20
+ import io.mockk.every
21
+ import io.mockk.mockk
22
+ import io.mockk.mockkConstructor
23
+ import io.mockk.mockkStatic
24
+ import io.mockk.unmockkAll
25
+ import io.mockk.verify
26
+ import org.junit.After
27
+ import org.junit.Before
28
+ import org.junit.Test
29
+
30
+ class KlarnaNetworkPaymentModuleImplTest {
31
+
32
+ private val errorInstanceNotFound = "No instance found for the given instanceId. Call initialize first."
33
+ private val errorActivityNotFound = "Main Activity not found."
34
+ private val errorDataRequired = "data is required"
35
+ private val errorAmountRequired = "Amount is required"
36
+ private val errorCurrencyRequired = "Currency is required"
37
+
38
+ private val mockActivity = mockk<Activity>(relaxed = true)
39
+ private val mockContext = mockk<ReactApplicationContext>(relaxed = true)
40
+ private val mockPromise = mockk<Promise>(relaxed = true)
41
+ private val mockKlarna = mockk<Klarna>(relaxed = true)
42
+ private val mockPayment = mockk<KlarnaPayment>(relaxed = true)
43
+ private val mockPaymentRequest = mockk<KlarnaPaymentRequest>(relaxed = true)
44
+ private val mockPresentation = mockk<KlarnaPaymentPresentation>(relaxed = true)
45
+
46
+ private lateinit var impl: KlarnaNetworkPaymentModuleImpl
47
+
48
+ @Before
49
+ fun setUp() {
50
+ mockkStatic("com.klarna.mobile.sdk.klarna.network.payment.api.KlarnaPaymentKt")
51
+ mockkStatic(Arguments::class)
52
+ mockkConstructor(Handler::class)
53
+ every { Arguments.createMap() } returns mockk(relaxed = true)
54
+ every { Arguments.createArray() } returns mockk(relaxed = true)
55
+ every { mockKlarna.payment } returns mockPayment
56
+ every { mockPayment.presentation } returns mockPresentation
57
+ every { mockContext.currentActivity } returns mockActivity
58
+ every { anyConstructed<Handler>().post(any()) } answers {
59
+ firstArg<Runnable>().run()
60
+ true
61
+ }
62
+ impl = KlarnaNetworkPaymentModuleImpl(mockContext)
63
+ }
64
+
65
+ @After
66
+ fun tearDown() {
67
+ KlarnaNetworkCoreModuleImpl.instances.clear()
68
+ KlarnaNetworkPaymentModuleImpl.storedPresentationContent.clear()
69
+ unmockkAll()
70
+ }
71
+
72
+ // region Helpers
73
+
74
+ private fun givenInitializeSucceeds(instanceId: String = "inst_1") {
75
+ KlarnaNetworkCoreModuleImpl.instances[instanceId] = mockKlarna
76
+ }
77
+
78
+ private fun givenInitiateWithIdSucceeds(instanceId: String = "inst_1") {
79
+ every {
80
+ mockPayment.initiate(activity = any(), paymentRequestId = any(), callback = any())
81
+ } answers {
82
+ thirdArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
83
+ .invoke(KlarnaResult.Success(mockPaymentRequest))
84
+ }
85
+ givenInitializeSucceeds(instanceId)
86
+ }
87
+
88
+ private fun givenInitiateWithDataSucceeds(instanceId: String = "inst_1") {
89
+ every {
90
+ mockPayment.initiate(activity = any(), paymentRequestData = any(), callback = any())
91
+ } answers {
92
+ thirdArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
93
+ .invoke(KlarnaResult.Success(mockPaymentRequest))
94
+ }
95
+ givenInitializeSucceeds(instanceId)
96
+ }
97
+
98
+ private fun givenFetchSucceeds(instanceId: String = "inst_1") {
99
+ every {
100
+ mockPayment.fetch(paymentRequestId = any(), callback = any())
101
+ } answers {
102
+ secondArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
103
+ .invoke(KlarnaResult.Success(mockPaymentRequest))
104
+ }
105
+ givenInitializeSucceeds(instanceId)
106
+ }
107
+
108
+ private fun givenCancelSucceeds(instanceId: String = "inst_1") {
109
+ every {
110
+ mockPayment.cancel(paymentRequestId = any(), callback = any())
111
+ } answers {
112
+ secondArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
113
+ .invoke(KlarnaResult.Success(mockPaymentRequest))
114
+ }
115
+ givenInitializeSucceeds(instanceId)
116
+ }
117
+
118
+ private fun mockError(name: String = "error_name", message: String = "error_message"): KlarnaSDKError =
119
+ mockk {
120
+ every { this@mockk.name } returns name
121
+ every { this@mockk.message } returns message
122
+ }
123
+
124
+ private fun mockValidPaymentData(): ReadableMap = mockk(relaxed = true) {
125
+ every { hasKey("amount") } returns true
126
+ every { getString("currency") } returns "USD"
127
+ }
128
+
129
+ // endregion
130
+
131
+ // region initiateWithId
132
+
133
+ @Test
134
+ fun `initiateWithId - rejects when instance not found`() {
135
+ impl.initiateWithId("unknown_id", "pr_1", mockPromise)
136
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
137
+ }
138
+
139
+ @Test
140
+ fun `initiateWithId - rejects when activity not found`() {
141
+ givenInitializeSucceeds()
142
+ every { mockContext.currentActivity } returns null
143
+ impl.initiateWithId("inst_1", "pr_1", mockPromise)
144
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorActivityNotFound) }
145
+ }
146
+
147
+ @Test
148
+ fun `initiateWithId - resolves on success`() {
149
+ givenInitiateWithIdSucceeds()
150
+ impl.initiateWithId("inst_1", "pr_1", mockPromise)
151
+ verify { mockPromise.resolve(any()) }
152
+ }
153
+
154
+ @Test
155
+ fun `initiateWithId - rejects on native failure`() {
156
+ givenInitializeSucceeds()
157
+ val error = mockError()
158
+ every {
159
+ mockPayment.initiate(activity = any(), paymentRequestId = any(), callback = any())
160
+ } answers {
161
+ thirdArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
162
+ .invoke(KlarnaResult.Failure(error))
163
+ }
164
+ impl.initiateWithId("inst_1", "pr_1", mockPromise)
165
+ verify { mockPromise.reject("error_name", "error_message") }
166
+ }
167
+
168
+ // endregion
169
+
170
+ // region initiateWithData
171
+
172
+ @Test
173
+ fun `initiateWithData - rejects when instance not found`() {
174
+ val data = mockk<ReadableMap>(relaxed = true)
175
+ impl.initiateWithData("unknown_id", data, mockPromise)
176
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
177
+ }
178
+
179
+ @Test
180
+ fun `initiateWithData - rejects when activity not found`() {
181
+ givenInitializeSucceeds()
182
+ every { mockContext.currentActivity } returns null
183
+ val data = mockk<ReadableMap>(relaxed = true)
184
+ impl.initiateWithData("inst_1", data, mockPromise)
185
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorActivityNotFound) }
186
+ }
187
+
188
+ @Test
189
+ fun `initiateWithData - rejects when data is null`() {
190
+ givenInitializeSucceeds()
191
+ impl.initiateWithData("inst_1", null, mockPromise)
192
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorDataRequired) }
193
+ }
194
+
195
+ @Test
196
+ fun `initiateWithData - rejects when amount is missing`() {
197
+ givenInitializeSucceeds()
198
+ val data = mockk<ReadableMap>(relaxed = true) {
199
+ every { hasKey("amount") } returns false
200
+ }
201
+ impl.initiateWithData("inst_1", data, mockPromise)
202
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorAmountRequired) }
203
+ }
204
+
205
+ @Test
206
+ fun `initiateWithData - rejects when currency is missing`() {
207
+ givenInitializeSucceeds()
208
+ val data = mockk<ReadableMap>(relaxed = true) {
209
+ every { hasKey("amount") } returns true
210
+ every { getString("currency") } returns null
211
+ }
212
+ impl.initiateWithData("inst_1", data, mockPromise)
213
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorCurrencyRequired) }
214
+ }
215
+
216
+ @Test
217
+ fun `initiateWithData - resolves on success`() {
218
+ givenInitiateWithDataSucceeds()
219
+ impl.initiateWithData("inst_1", mockValidPaymentData(), mockPromise)
220
+ verify { mockPromise.resolve(any()) }
221
+ }
222
+
223
+ @Test
224
+ fun `initiateWithData - rejects on native failure`() {
225
+ givenInitializeSucceeds()
226
+ val error = mockError()
227
+ every {
228
+ mockPayment.initiate(activity = any(), paymentRequestData = any(), callback = any())
229
+ } answers {
230
+ thirdArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
231
+ .invoke(KlarnaResult.Failure(error))
232
+ }
233
+ impl.initiateWithData("inst_1", mockValidPaymentData(), mockPromise)
234
+ verify { mockPromise.reject("error_name", "error_message") }
235
+ }
236
+
237
+ // endregion
238
+
239
+ // region fetch
240
+
241
+ @Test
242
+ fun `fetch - rejects when instance not found`() {
243
+ impl.fetch("unknown_id", "pr_1", mockPromise)
244
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
245
+ }
246
+
247
+ @Test
248
+ fun `fetch - resolves on success`() {
249
+ givenFetchSucceeds()
250
+ impl.fetch("inst_1", "pr_1", mockPromise)
251
+ verify { mockPromise.resolve(any()) }
252
+ }
253
+
254
+ @Test
255
+ fun `fetch - rejects on native failure`() {
256
+ givenInitializeSucceeds()
257
+ val error = mockError()
258
+ every {
259
+ mockPayment.fetch(paymentRequestId = any(), callback = any())
260
+ } answers {
261
+ secondArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
262
+ .invoke(KlarnaResult.Failure(error))
263
+ }
264
+ impl.fetch("inst_1", "pr_1", mockPromise)
265
+ verify { mockPromise.reject("error_name", "error_message") }
266
+ }
267
+
268
+ // endregion
269
+
270
+ // region cancel
271
+
272
+ @Test
273
+ fun `cancel - rejects when instance not found`() {
274
+ impl.cancel("unknown_id", "pr_1", mockPromise)
275
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
276
+ }
277
+
278
+ @Test
279
+ fun `cancel - resolves on success`() {
280
+ givenCancelSucceeds()
281
+ impl.cancel("inst_1", "pr_1", mockPromise)
282
+ verify { mockPromise.resolve(any()) }
283
+ }
284
+
285
+ @Test
286
+ fun `cancel - rejects on native failure`() {
287
+ givenInitializeSucceeds()
288
+ val error = mockError()
289
+ every {
290
+ mockPayment.cancel(paymentRequestId = any(), callback = any())
291
+ } answers {
292
+ secondArg<(KlarnaResult<KlarnaPaymentRequest, KlarnaSDKError>) -> Unit>()
293
+ .invoke(KlarnaResult.Failure(error))
294
+ }
295
+ impl.cancel("inst_1", "pr_1", mockPromise)
296
+ verify { mockPromise.reject("error_name", "error_message") }
297
+ }
298
+
299
+ // endregion
300
+
301
+ // region dispose
302
+
303
+ @Test
304
+ fun `dispose - removes stored presentation content and resolves`() {
305
+ KlarnaNetworkPaymentModuleImpl.storedPresentationContent["inst_1"] = mockk(relaxed = true)
306
+ impl.dispose("inst_1", mockPromise)
307
+ assert(!KlarnaNetworkPaymentModuleImpl.storedPresentationContent.containsKey("inst_1"))
308
+ verify { mockPromise.resolve(null) }
309
+ }
310
+
311
+ @Test
312
+ fun `dispose - resolves even when no stored content`() {
313
+ impl.dispose("inst_1", mockPromise)
314
+ verify { mockPromise.resolve(null) }
315
+ }
316
+
317
+ // endregion
318
+
319
+ // region presentationFetch
320
+
321
+ @Test
322
+ fun `presentationFetch - rejects when instance not found`() {
323
+ impl.presentationFetch("unknown_id", mockk(relaxed = true), mockPromise)
324
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
325
+ }
326
+
327
+ @Test
328
+ fun `presentationFetch - rejects when data is null`() {
329
+ givenInitializeSucceeds()
330
+ impl.presentationFetch("inst_1", null, mockPromise)
331
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, "data is required") }
332
+ }
333
+
334
+ // endregion
335
+
336
+ // region presentationHandleLink
337
+
338
+ @Test
339
+ fun `presentationHandleLink - rejects when instance not found`() {
340
+ impl.presentationHandleLink("unknown_id", "https://example.com", mockPromise)
341
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorInstanceNotFound) }
342
+ }
343
+
344
+ @Test
345
+ fun `presentationHandleLink - rejects when no presentation content stored`() {
346
+ givenInitializeSucceeds()
347
+ impl.presentationHandleLink("inst_1", "https://example.com", mockPromise)
348
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, "No presentation content found. Call presentationFetch first.") }
349
+ }
350
+
351
+ @Test
352
+ fun `presentationHandleLink - rejects when activity not found`() {
353
+ givenInitializeSucceeds()
354
+ KlarnaNetworkPaymentModuleImpl.storedPresentationContent["inst_1"] = mockk(relaxed = true)
355
+ every { mockContext.currentActivity } returns null
356
+ impl.presentationHandleLink("inst_1", "https://example.com", mockPromise)
357
+ verify { mockPromise.reject(KlarnaNetworkPaymentModuleImpl.NAME, errorActivityNotFound) }
358
+ }
359
+
360
+ // endregion
361
+ }
@@ -0,0 +1,155 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.klarna.mobile.sdk.api.KlarnaTheme
4
+ import com.klarna.mobile.sdk.api.button.KlarnaButtonShape
5
+ import com.klarna.mobile.sdk.api.button.KlarnaButtonStyle
6
+ import com.klarna.mobile.sdk.klarna.network.core.api.button.KlarnaButtonState
7
+ import com.klarna.mobile.sdk.klarna.network.payment.button.api.KlarnaPaymentButtonIntent
8
+ import org.junit.Before
9
+ import org.junit.Test
10
+ import kotlin.test.assertEquals
11
+
12
+ class KlarnaPaymentButtonViewManagerTest {
13
+
14
+ private lateinit var manager: KlarnaPaymentButtonViewManager
15
+
16
+ @Before
17
+ fun setUp() {
18
+ manager = KlarnaPaymentButtonViewManager()
19
+ }
20
+
21
+ // region parseState
22
+
23
+ @Test
24
+ fun `parseState - returns DEFAULT for null`() {
25
+ assertEquals(KlarnaButtonState.DEFAULT, manager.parseState(null))
26
+ }
27
+
28
+ @Test
29
+ fun `parseState - returns DISABLED for disabled`() {
30
+ assertEquals(KlarnaButtonState.DISABLED, manager.parseState("disabled"))
31
+ }
32
+
33
+ @Test
34
+ fun `parseState - returns LOADING for loading`() {
35
+ assertEquals(KlarnaButtonState.LOADING, manager.parseState("loading"))
36
+ }
37
+
38
+ @Test
39
+ fun `parseState - returns DEFAULT for unknown value`() {
40
+ assertEquals(KlarnaButtonState.DEFAULT, manager.parseState("unknown"))
41
+ }
42
+
43
+ // endregion
44
+
45
+ // region parseIntent
46
+
47
+ @Test
48
+ fun `parseIntent - returns PAY for null`() {
49
+ assertEquals(KlarnaPaymentButtonIntent.PAY, manager.parseIntent(null))
50
+ }
51
+
52
+ @Test
53
+ fun `parseIntent - returns PAY for pay`() {
54
+ assertEquals(KlarnaPaymentButtonIntent.PAY, manager.parseIntent("pay"))
55
+ }
56
+
57
+ @Test
58
+ fun `parseIntent - returns SUBSCRIBE for subscribe`() {
59
+ assertEquals(KlarnaPaymentButtonIntent.SUBSCRIBE, manager.parseIntent("subscribe"))
60
+ }
61
+
62
+ @Test
63
+ fun `parseIntent - returns ADD_TO_WALLET for addToWallet`() {
64
+ assertEquals(KlarnaPaymentButtonIntent.ADD_TO_WALLET, manager.parseIntent("addToWallet"))
65
+ }
66
+
67
+ @Test
68
+ fun `parseIntent - returns PAY for unknown value`() {
69
+ assertEquals(KlarnaPaymentButtonIntent.PAY, manager.parseIntent("unknown"))
70
+ }
71
+
72
+ // endregion
73
+
74
+ // region parseShape
75
+
76
+ @Test
77
+ fun `parseShape - returns ROUNDED_RECT for null`() {
78
+ assertEquals(KlarnaButtonShape.ROUNDED_RECT, manager.parseShape(null))
79
+ }
80
+
81
+ @Test
82
+ fun `parseShape - returns ROUNDED_RECT for roundedRect`() {
83
+ assertEquals(KlarnaButtonShape.ROUNDED_RECT, manager.parseShape("roundedRect"))
84
+ }
85
+
86
+ @Test
87
+ fun `parseShape - returns PILL for pill`() {
88
+ assertEquals(KlarnaButtonShape.PILL, manager.parseShape("pill"))
89
+ }
90
+
91
+ @Test
92
+ fun `parseShape - returns RECTANGLE for rectangle`() {
93
+ assertEquals(KlarnaButtonShape.RECTANGLE, manager.parseShape("rectangle"))
94
+ }
95
+
96
+ @Test
97
+ fun `parseShape - returns ROUNDED_RECT for unknown value`() {
98
+ assertEquals(KlarnaButtonShape.ROUNDED_RECT, manager.parseShape("unknown"))
99
+ }
100
+
101
+ // endregion
102
+
103
+ // region parseStyle
104
+
105
+ @Test
106
+ fun `parseStyle - returns FILLED for null`() {
107
+ assertEquals(KlarnaButtonStyle.FILLED, manager.parseStyle(null))
108
+ }
109
+
110
+ @Test
111
+ fun `parseStyle - returns FILLED for filled`() {
112
+ assertEquals(KlarnaButtonStyle.FILLED, manager.parseStyle("filled"))
113
+ }
114
+
115
+ @Test
116
+ fun `parseStyle - returns OUTLINED for outlined`() {
117
+ assertEquals(KlarnaButtonStyle.OUTLINED, manager.parseStyle("outlined"))
118
+ }
119
+
120
+ @Test
121
+ fun `parseStyle - returns FILLED for unknown value`() {
122
+ assertEquals(KlarnaButtonStyle.FILLED, manager.parseStyle("unknown"))
123
+ }
124
+
125
+ // endregion
126
+
127
+ // region parseTheme
128
+
129
+ @Test
130
+ fun `parseTheme - returns DARK for null`() {
131
+ assertEquals(KlarnaTheme.DARK, manager.parseTheme(null))
132
+ }
133
+
134
+ @Test
135
+ fun `parseTheme - returns LIGHT for light`() {
136
+ assertEquals(KlarnaTheme.LIGHT, manager.parseTheme("light"))
137
+ }
138
+
139
+ @Test
140
+ fun `parseTheme - returns DARK for dark`() {
141
+ assertEquals(KlarnaTheme.DARK, manager.parseTheme("dark"))
142
+ }
143
+
144
+ @Test
145
+ fun `parseTheme - returns AUTOMATIC for automatic`() {
146
+ assertEquals(KlarnaTheme.AUTOMATIC, manager.parseTheme("automatic"))
147
+ }
148
+
149
+ @Test
150
+ fun `parseTheme - returns DARK for unknown value`() {
151
+ assertEquals(KlarnaTheme.DARK, manager.parseTheme("unknown"))
152
+ }
153
+
154
+ // endregion
155
+ }