@primer-io/react-native 2.22.0 → 2.23.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.
- package/android/build.gradle +19 -2
- package/android/config/coverage-scripts/kover.gradle +26 -0
- package/android/src/test/java/com/primerioreactnative/utils/ErrorHelperTest.kt +24 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +13 -2
- package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +0 -1
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +5 -5
- package/ios/Sources/RNTPrimer.swift +12 -8
- package/ios/Sources/version.swift +1 -1
- package/package.json +4 -9
- package/primer-io-react-native.podspec +1 -1
package/android/build.gradle
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
buildscript {
|
|
2
2
|
// Buildscript is evaluated before everything else so we can't use getExtOrDefault
|
|
3
3
|
def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['ReactNative_kotlinVersion']
|
|
4
|
-
|
|
4
|
+
def kover_version = '0.7.6'
|
|
5
5
|
repositories {
|
|
6
6
|
google()
|
|
7
7
|
mavenCentral()
|
|
@@ -13,12 +13,14 @@ buildscript {
|
|
|
13
13
|
// noinspection DifferentKotlinGradleVersion
|
|
14
14
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
15
15
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
|
16
|
+
classpath "org.jetbrains.kotlinx:kover-gradle-plugin:$kover_version"
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
apply plugin: 'com.android.library'
|
|
20
21
|
apply plugin: 'kotlin-android'
|
|
21
22
|
apply plugin: 'kotlinx-serialization'
|
|
23
|
+
apply from: "./config/coverage-scripts/kover.gradle"
|
|
22
24
|
|
|
23
25
|
def getExtOrDefault(name) {
|
|
24
26
|
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['ReactNative_' + name]
|
|
@@ -35,6 +37,8 @@ android {
|
|
|
35
37
|
minSdkVersion 21
|
|
36
38
|
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
|
|
37
39
|
|
|
40
|
+
testInstrumentationRunnerArguments runnerBuilder: 'de.mannodermaus.junit5.AndroidJUnit5Builder'
|
|
41
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
buildTypes {
|
|
@@ -56,6 +60,13 @@ android {
|
|
|
56
60
|
kotlinOptions {
|
|
57
61
|
freeCompilerArgs += '-Xjvm-default=all'
|
|
58
62
|
}
|
|
63
|
+
testOptions {
|
|
64
|
+
execution = 'ANDROIDX_TEST_ORCHESTRATOR'
|
|
65
|
+
|
|
66
|
+
unitTests.all {
|
|
67
|
+
useJUnitPlatform()
|
|
68
|
+
}
|
|
69
|
+
}
|
|
59
70
|
}
|
|
60
71
|
|
|
61
72
|
repositories {
|
|
@@ -136,5 +147,11 @@ dependencies {
|
|
|
136
147
|
api 'com.facebook.react:react-native:+'
|
|
137
148
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
138
149
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
|
|
139
|
-
implementation 'io.primer:android:2.27.
|
|
150
|
+
implementation 'io.primer:android:2.27.2'
|
|
151
|
+
|
|
152
|
+
testImplementation 'io.mockk:mockk:1.13.10'
|
|
153
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
|
|
154
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
|
|
155
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
|
|
156
|
+
testImplementation 'de.mannodermaus.junit5:android-test-runner:1.3.0'
|
|
140
157
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
apply plugin: 'org.jetbrains.kotlinx.kover'
|
|
2
|
+
|
|
3
|
+
subprojects {
|
|
4
|
+
koverReport {
|
|
5
|
+
filters {
|
|
6
|
+
excludes {
|
|
7
|
+
packages(
|
|
8
|
+
'**.example.**',
|
|
9
|
+
)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
androidReports("release") {
|
|
13
|
+
verify {
|
|
14
|
+
rule {
|
|
15
|
+
// add lower bound for percentage of covered lines
|
|
16
|
+
minBound(80)
|
|
17
|
+
|
|
18
|
+
// add upper bound for percentage of covered lines
|
|
19
|
+
maxBound(100)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
tasks["koverXmlReportRelease"].dependsOn "testReleaseUnitTest"
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.primerioreactnative.utils
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.ErrorTypeRN
|
|
4
|
+
import org.junit.jupiter.api.Assertions.assertEquals
|
|
5
|
+
import org.junit.jupiter.api.Test
|
|
6
|
+
|
|
7
|
+
internal class ErrorHelperTest {
|
|
8
|
+
|
|
9
|
+
// Create a mock ErrorTypeRN instance
|
|
10
|
+
private val errorType = ErrorTypeRN.InvalidVaultedPaymentMethodId
|
|
11
|
+
|
|
12
|
+
@Test
|
|
13
|
+
fun `errorTo should create PrimerErrorRN with correct properties`() {
|
|
14
|
+
// Mock message
|
|
15
|
+
val errorMessage = "This is an error message"
|
|
16
|
+
|
|
17
|
+
// Call the infix function
|
|
18
|
+
val primerError = errorType errorTo errorMessage
|
|
19
|
+
|
|
20
|
+
// Verify the errorId and message are set correctly in the PrimerErrorRN object
|
|
21
|
+
assertEquals(errorType.errorId, primerError.errorId)
|
|
22
|
+
assertEquals(errorMessage, primerError.description)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -12,7 +12,9 @@ import PrimerSDK
|
|
|
12
12
|
@objc(RNTPrimerHeadlessUniversalCheckoutKlarnaComponent)
|
|
13
13
|
class RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: RCTEventEmitter {
|
|
14
14
|
|
|
15
|
+
#if canImport(PrimerKlarnaSDK)
|
|
15
16
|
private var klarnaManager: PrimerHeadlessUniversalCheckout.KlarnaManager = PrimerHeadlessUniversalCheckout.KlarnaManager()
|
|
17
|
+
#endif
|
|
16
18
|
var klarnaComponent: (any KlarnaComponent)?
|
|
17
19
|
var clientToken: String?
|
|
18
20
|
|
|
@@ -46,12 +48,21 @@ class RNTPrimerHeadlessUniversalCheckoutKlarnaComponent: RCTEventEmitter {
|
|
|
46
48
|
recoverySuggestion: "'intent' can be 'CHECKOUT' or 'VAULT'.")
|
|
47
49
|
throw err
|
|
48
50
|
}
|
|
49
|
-
|
|
51
|
+
#if canImport(PrimerKlarnaSDK)
|
|
50
52
|
klarnaComponent = try klarnaManager.provideKlarnaComponent(with: sessionIntent)
|
|
51
53
|
klarnaComponent?.stepDelegate = self
|
|
52
54
|
klarnaComponent?.errorDelegate = self
|
|
53
55
|
klarnaComponent?.validationDelegate = self
|
|
54
|
-
|
|
56
|
+
#else
|
|
57
|
+
let err = RNTNativeError(
|
|
58
|
+
errorId: "native-ios",
|
|
59
|
+
errorDescription: "PrimerKlarnaSDK missing",
|
|
60
|
+
recoverySuggestion: "Check if PrimerKlarnaSDK is included in your Podfile")
|
|
61
|
+
|
|
62
|
+
throw err
|
|
63
|
+
#endif
|
|
64
|
+
|
|
65
|
+
|
|
55
66
|
resolver(nil)
|
|
56
67
|
} catch {
|
|
57
68
|
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
@@ -63,11 +63,11 @@ enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
|
|
|
63
63
|
@objc(PrimerHeadlessUniversalCheckout)
|
|
64
64
|
class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
var settings: PrimerSettings?
|
|
67
|
+
var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
|
|
68
|
+
var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
69
|
+
var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
70
|
+
var implementedRNCallbacks: ImplementedRNCallbacks?
|
|
71
71
|
|
|
72
72
|
override class func requiresMainQueueSetup() -> Bool {
|
|
73
73
|
return true
|
|
@@ -55,11 +55,11 @@ enum PrimerEvents: Int, CaseIterable {
|
|
|
55
55
|
@objc(NativePrimer)
|
|
56
56
|
class RNTPrimer: RCTEventEmitter {
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
|
|
59
|
+
var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
60
|
+
var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
61
|
+
var primerDidFailWithErrorDecisionHandler: ((_ errorMessage: String) -> Void)?
|
|
62
|
+
var implementedRNCallbacks: ImplementedRNCallbacks?
|
|
63
63
|
|
|
64
64
|
// MARK: - INITIALIZATION & REACT NATIVE SUPPORT
|
|
65
65
|
|
|
@@ -291,13 +291,17 @@ class RNTPrimer: RCTEventEmitter {
|
|
|
291
291
|
var body: [String: Any] = ["error": error.rnError]
|
|
292
292
|
if let checkoutData = checkoutData,
|
|
293
293
|
let data = try? JSONEncoder().encode(checkoutData),
|
|
294
|
-
let json = try? JSONSerialization.jsonObject(with: data){
|
|
294
|
+
let json = try? JSONSerialization.jsonObject(with: data) {
|
|
295
295
|
body["checkoutData"] = json
|
|
296
296
|
}
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
if self.bridge != nil {
|
|
298
|
+
self.sendEvent(withName: PrimerEvents.onError.stringValue, body: body)
|
|
299
|
+
} else {
|
|
300
|
+
print("Bridge is not set")
|
|
301
|
+
}
|
|
299
302
|
}
|
|
300
303
|
}
|
|
304
|
+
|
|
301
305
|
}
|
|
302
306
|
|
|
303
307
|
// MARK: - PRIMER DELEGATE
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// swiftlint:disable:next identifier_name
|
|
2
|
-
public let PrimerReactNativeSDKVersion = "2.
|
|
2
|
+
public let PrimerReactNativeSDKVersion = "2.23.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primer-io/react-native",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.23.0",
|
|
4
4
|
"description": "Primer SDK for RN",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -58,11 +58,12 @@
|
|
|
58
58
|
"eslint-config-prettier": "^7.0.0",
|
|
59
59
|
"eslint-plugin-prettier": "^3.1.3",
|
|
60
60
|
"husky": "^4.2.5",
|
|
61
|
-
"jest": "^
|
|
61
|
+
"jest": "^29.7.0",
|
|
62
62
|
"pod-install": "^0.1.0",
|
|
63
63
|
"prettier": "^2.4.1",
|
|
64
64
|
"react-native-builder-bob": "^0.20.1",
|
|
65
65
|
"release-it": "^15.5.0",
|
|
66
|
+
"ts-jest": "^29.1.2",
|
|
66
67
|
"typescript": "4.8.4"
|
|
67
68
|
},
|
|
68
69
|
"peerDependencies": {
|
|
@@ -72,13 +73,6 @@
|
|
|
72
73
|
"engines": {
|
|
73
74
|
"node": ">=16"
|
|
74
75
|
},
|
|
75
|
-
"jest": {
|
|
76
|
-
"preset": "react-native",
|
|
77
|
-
"modulePathIgnorePatterns": [
|
|
78
|
-
"<rootDir>/example/node_modules",
|
|
79
|
-
"<rootDir>/lib/"
|
|
80
|
-
]
|
|
81
|
-
},
|
|
82
76
|
"release-it": {
|
|
83
77
|
"git": {
|
|
84
78
|
"commitMessage": "chore: release ${version}",
|
|
@@ -141,6 +135,7 @@
|
|
|
141
135
|
]
|
|
142
136
|
},
|
|
143
137
|
"dependencies": {
|
|
138
|
+
"nyc": "^15.1.0",
|
|
144
139
|
"uuid": "^8.3.2"
|
|
145
140
|
}
|
|
146
141
|
}
|