@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.
@@ -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.0'
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)
@@ -180,4 +180,3 @@ extension RNTPrimerHeadlessUniversalCheckoutBanksComponent: PrimerHeadlessErrora
180
180
  body: serializedData)
181
181
  }
182
182
  }
183
-
@@ -63,11 +63,11 @@ enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
63
63
  @objc(PrimerHeadlessUniversalCheckout)
64
64
  class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
65
65
 
66
- private var settings: PrimerSettings?
67
- private var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
68
- private var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
69
- private var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
70
- private var implementedRNCallbacks: ImplementedRNCallbacks?
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
- private var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
59
- private var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
60
- private var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
61
- private var primerDidFailWithErrorDecisionHandler: ((_ errorMessage: String) -> Void)?
62
- private var implementedRNCallbacks: ImplementedRNCallbacks?
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
- print(body)
298
- self.sendEvent(withName: PrimerEvents.onError.stringValue, body: body)
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.22.0"
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.22.0",
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": "^26.0.1",
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
  }
@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
16
16
  s.source_files = "ios/**/*.{h,m,mm,swift}"
17
17
 
18
18
  s.dependency "React-Core"
19
- s.dependency "PrimerSDK", "2.26.0"
19
+ s.dependency "PrimerSDK", "2.26.4"
20
20
  end