react-native-klarna-inapp-sdk 2.4.10 → 2.5.1
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 +3 -1
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackage.java +5 -1
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/checkout/KlarnaCheckoutViewManager.java +4 -10
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java +28 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/event/ComponentEventSender.java +5 -1
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/ResizeObserverWrapperView.java +2 -2
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/WrapperView.java +2 -2
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ui/YogaLayoutHelper.java +39 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewCallback.kt +30 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewEventSender.kt +80 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewManager.java +544 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventHandler.java +30 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventSender.java +64 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewManager.java +356 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaExpressCheckoutViewSpec.java +31 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaOSMViewSpec.java +31 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaExpressCheckoutViewSpec.java +36 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaOSMViewSpec.java +32 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackageTest.java +5 -1
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/common/ui/YogaLayoutHelperTest.java +79 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/expresscheckout/KlarnaExpressCheckoutViewManagerTest.java +259 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventHandlerTest.java +136 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewEventSenderTest.java +184 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewManagerTest.java +385 -0
- package/ios/RNKlarnaMobileSDK.xcodeproj/project.pbxproj +110 -52
- package/ios/Sources/KlarnaExpressCheckoutViewManager.h +5 -0
- package/ios/Sources/KlarnaExpressCheckoutViewManager.mm +39 -0
- package/ios/Sources/KlarnaOSMViewManager.h +5 -0
- package/ios/Sources/KlarnaOSMViewManager.mm +59 -0
- package/ios/Sources/view/KlarnaExpressCheckoutButtonDelegateProxy.swift +145 -0
- package/ios/Sources/view/KlarnaExpressCheckoutViewWrapper.h +41 -0
- package/ios/Sources/view/KlarnaOSMViewWrapper.h +48 -0
- package/ios/Sources/view/newarch/KlarnaExpressCheckoutViewWrapper.mm +228 -0
- package/ios/Sources/view/newarch/KlarnaOSMViewWrapper.mm +294 -0
- package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.mm +20 -13
- package/ios/Sources/view/oldarch/KlarnaExpressCheckoutViewWrapper.mm +222 -0
- package/ios/Sources/view/oldarch/KlarnaOSMViewWrapper.mm +273 -0
- package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.mm +11 -13
- package/ios/Tests/KlarnaExpressCheckoutViewWrapperTests.m +391 -0
- package/ios/Tests/KlarnaOSMViewWrapperTests.m +450 -0
- package/ios/Tests/KlarnaStandaloneWebViewWrapperTests.m +105 -0
- package/lib/commonjs/KlarnaCheckoutView.js +2 -4
- package/lib/commonjs/KlarnaCheckoutView.js.map +1 -1
- package/lib/commonjs/KlarnaExpressCheckoutView.js +73 -0
- package/lib/commonjs/KlarnaExpressCheckoutView.js.map +1 -0
- package/lib/commonjs/KlarnaOSMView.js +92 -0
- package/lib/commonjs/KlarnaOSMView.js.map +1 -0
- package/lib/commonjs/KlarnaPaymentView.js +32 -55
- package/lib/commonjs/KlarnaPaymentView.js.map +1 -1
- package/lib/commonjs/KlarnaSignInSDK.js +1 -1
- package/lib/commonjs/KlarnaSignInSDK.js.map +1 -1
- package/lib/commonjs/KlarnaStandaloneWebView.js +2 -4
- package/lib/commonjs/KlarnaStandaloneWebView.js.map +1 -1
- package/lib/commonjs/index.js +128 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/KlarnaCheckoutViewNativeComponent.js +3 -5
- package/lib/commonjs/specs/KlarnaCheckoutViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/KlarnaExpressCheckoutViewNativeComponent.js +10 -0
- package/lib/commonjs/specs/KlarnaExpressCheckoutViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/KlarnaOSMViewNativeComponent.js +14 -0
- package/lib/commonjs/specs/KlarnaOSMViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js +3 -5
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js +3 -5
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/NativeKlarnaSignIn.js +1 -2
- package/lib/commonjs/specs/NativeKlarnaSignIn.js.map +1 -1
- package/lib/commonjs/types/button/KlarnaButtonShape.js +13 -0
- package/lib/commonjs/types/button/KlarnaButtonShape.js.map +1 -0
- package/lib/commonjs/types/button/KlarnaButtonStyle.js +12 -0
- package/lib/commonjs/types/button/KlarnaButtonStyle.js.map +1 -0
- package/lib/commonjs/types/button/KlarnaButtonTheme.js +13 -0
- package/lib/commonjs/types/button/KlarnaButtonTheme.js.map +1 -0
- package/lib/commonjs/types/common/KlarnaEnvironment.js +1 -2
- package/lib/commonjs/types/common/KlarnaEnvironment.js.map +1 -1
- package/lib/commonjs/types/common/KlarnaExpressCheckoutSessionOptions.js +8 -0
- package/lib/commonjs/types/common/KlarnaExpressCheckoutSessionOptions.js.map +1 -0
- package/lib/commonjs/types/common/KlarnaMobileSDKError.js.map +1 -1
- package/lib/commonjs/types/common/KlarnaOSMPlacementKey.js +2 -0
- package/lib/commonjs/types/common/KlarnaOSMPlacementKey.js.map +1 -0
- package/lib/commonjs/types/common/KlarnaProductEvent.js.map +1 -1
- package/lib/commonjs/types/common/KlarnaRegion.js +1 -2
- package/lib/commonjs/types/common/KlarnaRegion.js.map +1 -1
- package/lib/commonjs/types/common/KlarnaTheme.js +13 -0
- package/lib/commonjs/types/common/KlarnaTheme.js.map +1 -0
- package/lib/module/KlarnaCheckoutView.js.map +1 -1
- package/lib/module/KlarnaExpressCheckoutView.js +64 -0
- package/lib/module/KlarnaExpressCheckoutView.js.map +1 -0
- package/lib/module/KlarnaOSMView.js +84 -0
- package/lib/module/KlarnaOSMView.js.map +1 -0
- package/lib/module/KlarnaPaymentView.js +30 -51
- package/lib/module/KlarnaPaymentView.js.map +1 -1
- package/lib/module/KlarnaSignInSDK.js.map +1 -1
- package/lib/module/KlarnaStandaloneWebView.js.map +1 -1
- package/lib/module/index.js +11 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/KlarnaCheckoutViewNativeComponent.js.map +1 -1
- package/lib/module/specs/KlarnaExpressCheckoutViewNativeComponent.js +3 -0
- package/lib/module/specs/KlarnaExpressCheckoutViewNativeComponent.js.map +1 -0
- package/lib/module/specs/KlarnaOSMViewNativeComponent.js +7 -0
- package/lib/module/specs/KlarnaOSMViewNativeComponent.js.map +1 -0
- package/lib/module/specs/KlarnaPaymentViewNativeComponent.js.map +1 -1
- package/lib/module/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -1
- package/lib/module/specs/NativeKlarnaSignIn.js.map +1 -1
- package/lib/module/types/button/KlarnaButtonShape.js +7 -0
- package/lib/module/types/button/KlarnaButtonShape.js.map +1 -0
- package/lib/module/types/button/KlarnaButtonStyle.js +6 -0
- package/lib/module/types/button/KlarnaButtonStyle.js.map +1 -0
- package/lib/module/types/button/KlarnaButtonTheme.js +7 -0
- package/lib/module/types/button/KlarnaButtonTheme.js.map +1 -0
- package/lib/module/types/common/KlarnaEnvironment.js.map +1 -1
- package/lib/module/types/common/KlarnaExpressCheckoutSessionOptions.js +2 -0
- package/lib/module/types/common/KlarnaExpressCheckoutSessionOptions.js.map +1 -0
- package/lib/module/types/common/KlarnaMobileSDKError.js.map +1 -1
- package/lib/module/types/common/KlarnaOSMPlacementKey.js +2 -0
- package/lib/module/types/common/KlarnaOSMPlacementKey.js.map +1 -0
- package/lib/module/types/common/KlarnaProductEvent.js.map +1 -1
- package/lib/module/types/common/KlarnaRegion.js.map +1 -1
- package/lib/module/types/common/KlarnaTheme.js +7 -0
- package/lib/module/types/common/KlarnaTheme.js.map +1 -0
- package/lib/typescript/KlarnaCheckoutView.d.ts.map +1 -1
- package/lib/typescript/KlarnaExpressCheckoutView.d.ts +47 -0
- package/lib/typescript/KlarnaExpressCheckoutView.d.ts.map +1 -0
- package/lib/typescript/KlarnaOSMView.d.ts +36 -0
- package/lib/typescript/KlarnaOSMView.d.ts.map +1 -0
- package/lib/typescript/KlarnaPaymentView.d.ts.map +1 -1
- package/lib/typescript/KlarnaStandaloneWebView.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +11 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/specs/KlarnaCheckoutViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/specs/KlarnaExpressCheckoutViewNativeComponent.d.ts +45 -0
- package/lib/typescript/specs/KlarnaExpressCheckoutViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaOSMViewNativeComponent.d.ts +35 -0
- package/lib/typescript/specs/KlarnaOSMViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaPaymentViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/specs/KlarnaStandaloneWebViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/specs/NativeKlarnaSignIn.d.ts +1 -1
- package/lib/typescript/specs/NativeKlarnaSignIn.d.ts.map +1 -1
- package/lib/typescript/types/button/KlarnaButtonShape.d.ts +6 -0
- package/lib/typescript/types/button/KlarnaButtonShape.d.ts.map +1 -0
- package/lib/typescript/types/button/KlarnaButtonStyle.d.ts +5 -0
- package/lib/typescript/types/button/KlarnaButtonStyle.d.ts.map +1 -0
- package/lib/typescript/types/button/KlarnaButtonTheme.d.ts +6 -0
- package/lib/typescript/types/button/KlarnaButtonTheme.d.ts.map +1 -0
- package/lib/typescript/types/common/KlarnaExpressCheckoutSessionOptions.d.ts +10 -0
- package/lib/typescript/types/common/KlarnaExpressCheckoutSessionOptions.d.ts.map +1 -0
- package/lib/typescript/types/common/KlarnaOSMPlacementKey.d.ts +2 -0
- package/lib/typescript/types/common/KlarnaOSMPlacementKey.d.ts.map +1 -0
- package/lib/typescript/types/common/KlarnaTheme.d.ts +6 -0
- package/lib/typescript/types/common/KlarnaTheme.d.ts.map +1 -0
- package/package.json +17 -16
- package/react-native-klarna-inapp-sdk.podspec +2 -1
- package/src/KlarnaExpressCheckoutView.tsx +169 -0
- package/src/KlarnaOSMView.tsx +157 -0
- package/src/KlarnaStandaloneWebView.tsx +1 -2
- package/src/index.tsx +11 -0
- package/src/specs/KlarnaExpressCheckoutViewNativeComponent.ts +66 -0
- package/src/specs/KlarnaOSMViewNativeComponent.ts +50 -0
- package/src/specs/NativeKlarnaSignIn.ts +1 -1
- package/src/types/button/KlarnaButtonShape.ts +5 -0
- package/src/types/button/KlarnaButtonStyle.ts +4 -0
- package/src/types/button/KlarnaButtonTheme.ts +5 -0
- package/src/types/common/KlarnaExpressCheckoutSessionOptions.ts +13 -0
- package/src/types/common/KlarnaOSMPlacementKey.ts +3 -0
- package/src/types/common/KlarnaTheme.ts +5 -0
- package/LICENSE +0 -201
- package/README.md +0 -93
package/android/src/test/java/com/klarna/mobile/sdk/reactnative/osm/KlarnaOSMViewManagerTest.java
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.osm;
|
|
2
|
+
|
|
3
|
+
import static com.klarna.mobile.sdk.reactnative.osm.KlarnaOSMViewManager.COMMAND_RENDER_OSM;
|
|
4
|
+
import static com.klarna.mobile.sdk.reactnative.osm.KlarnaOSMViewManager.KLARNA_OSM_VIEW_REACT_CLASS;
|
|
5
|
+
|
|
6
|
+
import com.facebook.react.bridge.Arguments;
|
|
7
|
+
import com.facebook.react.bridge.JavaOnlyArray;
|
|
8
|
+
import com.facebook.react.bridge.JavaOnlyMap;
|
|
9
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
10
|
+
import com.klarna.mobile.sdk.api.KlarnaEnvironment;
|
|
11
|
+
import com.klarna.mobile.sdk.api.KlarnaRegion;
|
|
12
|
+
import com.klarna.mobile.sdk.api.KlarnaTheme;
|
|
13
|
+
import com.klarna.mobile.sdk.api.osm.KlarnaOSMView;
|
|
14
|
+
import com.klarna.mobile.sdk.reactnative.common.ui.WrapperView;
|
|
15
|
+
|
|
16
|
+
import org.junit.After;
|
|
17
|
+
import org.junit.Assert;
|
|
18
|
+
import org.junit.Before;
|
|
19
|
+
import org.junit.Test;
|
|
20
|
+
import org.junit.runner.RunWith;
|
|
21
|
+
import org.mockito.MockedStatic;
|
|
22
|
+
import org.mockito.Mockito;
|
|
23
|
+
import org.robolectric.RobolectricTestRunner;
|
|
24
|
+
|
|
25
|
+
@RunWith(RobolectricTestRunner.class)
|
|
26
|
+
public class KlarnaOSMViewManagerTest {
|
|
27
|
+
|
|
28
|
+
private MockedStatic<Arguments> mockedStaticArguments;
|
|
29
|
+
private KlarnaOSMViewManager manager;
|
|
30
|
+
private WrapperView<KlarnaOSMView> wrapper;
|
|
31
|
+
private KlarnaOSMView osmView;
|
|
32
|
+
|
|
33
|
+
@SuppressWarnings("unchecked")
|
|
34
|
+
@Before
|
|
35
|
+
public void setup() {
|
|
36
|
+
manager = new KlarnaOSMViewManager();
|
|
37
|
+
|
|
38
|
+
osmView = Mockito.mock(KlarnaOSMView.class);
|
|
39
|
+
wrapper = Mockito.mock(WrapperView.class);
|
|
40
|
+
Mockito.when(wrapper.getView()).thenReturn(osmView);
|
|
41
|
+
|
|
42
|
+
mockedStaticArguments = Mockito.mockStatic(Arguments.class);
|
|
43
|
+
Mockito.when(Arguments.createArray())
|
|
44
|
+
.thenAnswer(invocation -> new JavaOnlyArray());
|
|
45
|
+
Mockito.when(Arguments.createMap())
|
|
46
|
+
.thenAnswer(invocation -> new JavaOnlyMap());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@After
|
|
50
|
+
public void teardown() {
|
|
51
|
+
Mockito.reset(wrapper, osmView);
|
|
52
|
+
mockedStaticArguments.close();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// --- getName ---
|
|
56
|
+
|
|
57
|
+
@Test
|
|
58
|
+
public void testReactClassName() {
|
|
59
|
+
Assert.assertEquals("RNKlarnaOSMView", manager.getName());
|
|
60
|
+
Assert.assertEquals("RNKlarnaOSMView", KLARNA_OSM_VIEW_REACT_CLASS);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// --- Prop setters: string props ---
|
|
64
|
+
|
|
65
|
+
@Test
|
|
66
|
+
public void testSetClientId() {
|
|
67
|
+
manager.setClientId(wrapper, "test-client-id");
|
|
68
|
+
Mockito.verify(osmView).setClientId("test-client-id");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Test
|
|
72
|
+
public void testSetClientIdNull() {
|
|
73
|
+
manager.setClientId(wrapper, null);
|
|
74
|
+
Mockito.verify(osmView, Mockito.never()).setClientId(Mockito.anyString());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@Test
|
|
78
|
+
public void testSetClientIdEmpty() {
|
|
79
|
+
manager.setClientId(wrapper, "");
|
|
80
|
+
Mockito.verify(osmView, Mockito.never()).setClientId(Mockito.anyString());
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@Test
|
|
84
|
+
public void testSetPlacementKey() {
|
|
85
|
+
manager.setPlacementKey(wrapper, "test-placement-key");
|
|
86
|
+
Mockito.verify(osmView).setPlacementKey("test-placement-key");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Test
|
|
90
|
+
public void testSetPlacementKeyNull() {
|
|
91
|
+
manager.setPlacementKey(wrapper, null);
|
|
92
|
+
Mockito.verify(osmView, Mockito.never()).setPlacementKey(Mockito.anyString());
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@Test
|
|
96
|
+
public void testSetPlacementKeyEmpty() {
|
|
97
|
+
manager.setPlacementKey(wrapper, "");
|
|
98
|
+
Mockito.verify(osmView, Mockito.never()).setPlacementKey(Mockito.anyString());
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Test
|
|
102
|
+
public void testSetLocale() {
|
|
103
|
+
manager.setLocale(wrapper, "en-US");
|
|
104
|
+
Mockito.verify(osmView).setLocale("en-US");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@Test
|
|
108
|
+
public void testSetLocaleNull() {
|
|
109
|
+
manager.setLocale(wrapper, null);
|
|
110
|
+
Mockito.verify(osmView, Mockito.never()).setLocale(Mockito.anyString());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@Test
|
|
114
|
+
public void testSetLocaleEmpty() {
|
|
115
|
+
manager.setLocale(wrapper, "");
|
|
116
|
+
Mockito.verify(osmView, Mockito.never()).setLocale(Mockito.anyString());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// --- Prop setter: purchaseAmount ---
|
|
120
|
+
|
|
121
|
+
@Test
|
|
122
|
+
public void testSetPurchaseAmountValid() {
|
|
123
|
+
manager.setPurchaseAmount(wrapper, "9999");
|
|
124
|
+
Mockito.verify(osmView).setPurchaseAmount(9999L);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@Test
|
|
128
|
+
public void testSetPurchaseAmountNull() {
|
|
129
|
+
manager.setPurchaseAmount(wrapper, null);
|
|
130
|
+
Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@Test
|
|
134
|
+
public void testSetPurchaseAmountEmpty() {
|
|
135
|
+
manager.setPurchaseAmount(wrapper, "");
|
|
136
|
+
Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@Test
|
|
140
|
+
public void testSetPurchaseAmountInvalid() {
|
|
141
|
+
// Should not throw, but should not set the value either
|
|
142
|
+
manager.setPurchaseAmount(wrapper, "not-a-number");
|
|
143
|
+
Mockito.verify(osmView, Mockito.never()).setPurchaseAmount(Mockito.anyLong());
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@Test
|
|
147
|
+
public void testSetPurchaseAmountLargeNumber() {
|
|
148
|
+
manager.setPurchaseAmount(wrapper, "999999999999");
|
|
149
|
+
Mockito.verify(osmView).setPurchaseAmount(999999999999L);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// --- Prop setter: environment ---
|
|
153
|
+
|
|
154
|
+
@Test
|
|
155
|
+
public void testSetEnvironmentPlayground() {
|
|
156
|
+
manager.setEnvironment(wrapper, "playground");
|
|
157
|
+
Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.PLAYGROUND);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@Test
|
|
161
|
+
public void testSetEnvironmentProduction() {
|
|
162
|
+
manager.setEnvironment(wrapper, "production");
|
|
163
|
+
Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.PRODUCTION);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@Test
|
|
167
|
+
public void testSetEnvironmentStaging() {
|
|
168
|
+
manager.setEnvironment(wrapper, "staging");
|
|
169
|
+
Mockito.verify(osmView).setEnvironment(KlarnaEnvironment.STAGING);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@Test
|
|
173
|
+
public void testSetEnvironmentUnknown() {
|
|
174
|
+
manager.setEnvironment(wrapper, "unknown");
|
|
175
|
+
Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@Test
|
|
179
|
+
public void testSetEnvironmentNull() {
|
|
180
|
+
manager.setEnvironment(wrapper, null);
|
|
181
|
+
Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@Test
|
|
185
|
+
public void testSetEnvironmentEmpty() {
|
|
186
|
+
manager.setEnvironment(wrapper, "");
|
|
187
|
+
Mockito.verify(osmView, Mockito.never()).setEnvironment(Mockito.any());
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// --- Prop setter: region ---
|
|
191
|
+
|
|
192
|
+
@Test
|
|
193
|
+
public void testSetRegionEu() {
|
|
194
|
+
manager.setRegion(wrapper, "eu");
|
|
195
|
+
Mockito.verify(osmView).setRegion(KlarnaRegion.EU);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@Test
|
|
199
|
+
public void testSetRegionNa() {
|
|
200
|
+
manager.setRegion(wrapper, "na");
|
|
201
|
+
Mockito.verify(osmView).setRegion(KlarnaRegion.NA);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@Test
|
|
205
|
+
public void testSetRegionOc() {
|
|
206
|
+
manager.setRegion(wrapper, "oc");
|
|
207
|
+
Mockito.verify(osmView).setRegion(KlarnaRegion.OC);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@Test
|
|
211
|
+
public void testSetRegionUnknown() {
|
|
212
|
+
manager.setRegion(wrapper, "unknown");
|
|
213
|
+
Mockito.verify(osmView, Mockito.never()).setRegion(Mockito.any());
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@Test
|
|
217
|
+
public void testSetRegionNull() {
|
|
218
|
+
manager.setRegion(wrapper, null);
|
|
219
|
+
Mockito.verify(osmView, Mockito.never()).setRegion(Mockito.any());
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// --- Prop setter: theme ---
|
|
223
|
+
|
|
224
|
+
@Test
|
|
225
|
+
public void testSetThemeLight() {
|
|
226
|
+
manager.setTheme(wrapper, "light");
|
|
227
|
+
Mockito.verify(osmView).setTheme(KlarnaTheme.LIGHT);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
@Test
|
|
231
|
+
public void testSetThemeDark() {
|
|
232
|
+
manager.setTheme(wrapper, "dark");
|
|
233
|
+
Mockito.verify(osmView).setTheme(KlarnaTheme.DARK);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
@Test
|
|
237
|
+
public void testSetThemeAutomatic() {
|
|
238
|
+
manager.setTheme(wrapper, "automatic");
|
|
239
|
+
Mockito.verify(osmView).setTheme(KlarnaTheme.AUTOMATIC);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
@Test
|
|
243
|
+
public void testSetThemeUnknown() {
|
|
244
|
+
manager.setTheme(wrapper, "unknown");
|
|
245
|
+
Mockito.verify(osmView, Mockito.never()).setTheme(Mockito.any());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@Test
|
|
249
|
+
public void testSetThemeNull() {
|
|
250
|
+
manager.setTheme(wrapper, null);
|
|
251
|
+
Mockito.verify(osmView, Mockito.never()).setTheme(Mockito.any());
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// --- Prop setter: returnUrl (no-op) ---
|
|
255
|
+
|
|
256
|
+
@Test
|
|
257
|
+
public void testSetReturnUrlIsNoOp() {
|
|
258
|
+
// returnUrl is intentionally ignored for OSM
|
|
259
|
+
manager.setReturnUrl(wrapper, "https://return.example.com");
|
|
260
|
+
// Verify no interaction with osmView for returnUrl
|
|
261
|
+
Mockito.verifyNoInteractions(osmView);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// --- Prop setter: backgroundColor / textColor ---
|
|
265
|
+
|
|
266
|
+
@Test
|
|
267
|
+
public void testSetBackgroundColor() {
|
|
268
|
+
manager.setBackgroundColor(wrapper, "#FF0000");
|
|
269
|
+
Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
@Test
|
|
273
|
+
public void testSetTextColor() {
|
|
274
|
+
manager.setTextColor(wrapper, "#00FF00");
|
|
275
|
+
Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@Test
|
|
279
|
+
public void testSetBackgroundColorNull() {
|
|
280
|
+
manager.setBackgroundColor(wrapper, null);
|
|
281
|
+
// null color means null style configuration
|
|
282
|
+
Mockito.verify(osmView).setStyleConfiguration(null);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
@Test
|
|
286
|
+
public void testSetTextColorNull() {
|
|
287
|
+
manager.setTextColor(wrapper, null);
|
|
288
|
+
Mockito.verify(osmView).setStyleConfiguration(null);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
@Test
|
|
292
|
+
public void testSetBackgroundColorInvalid() {
|
|
293
|
+
manager.setBackgroundColor(wrapper, "not-a-color");
|
|
294
|
+
// Invalid color should result in null style configuration
|
|
295
|
+
Mockito.verify(osmView).setStyleConfiguration(null);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
@Test
|
|
299
|
+
public void testSetColorWithoutHash() {
|
|
300
|
+
// parseColor should auto-prefix "#"
|
|
301
|
+
manager.setBackgroundColor(wrapper, "FF0000");
|
|
302
|
+
Mockito.verify(osmView).setStyleConfiguration(Mockito.any());
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// --- receiveCommand ---
|
|
306
|
+
|
|
307
|
+
@Test
|
|
308
|
+
public void testReceiveCommandRender() {
|
|
309
|
+
// receiveCommand with "render" requires context for render(),
|
|
310
|
+
// but we can verify the command routing by mocking the context
|
|
311
|
+
ReadableArray args = new JavaOnlyArray();
|
|
312
|
+
// render() calls view.getView() and then needs ReactContext, so this will
|
|
313
|
+
// exercise the command dispatch path; the actual render is tested separately
|
|
314
|
+
try {
|
|
315
|
+
manager.receiveCommand(wrapper, COMMAND_RENDER_OSM, args);
|
|
316
|
+
} catch (Exception e) {
|
|
317
|
+
// Expected: render() tries to cast wrapper.getContext() to ReactContext
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
@Test
|
|
322
|
+
public void testReceiveCommandUnknown() {
|
|
323
|
+
// Unknown command should be silently ignored
|
|
324
|
+
ReadableArray args = new JavaOnlyArray();
|
|
325
|
+
manager.receiveCommand(wrapper, "unknownCommand", args);
|
|
326
|
+
// No exception should be thrown
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// --- getExportedCustomDirectEventTypeConstants ---
|
|
330
|
+
|
|
331
|
+
@Test
|
|
332
|
+
public void testExportedEvents() {
|
|
333
|
+
java.util.Map<String, Object> events = manager.getExportedCustomDirectEventTypeConstants();
|
|
334
|
+
Assert.assertNotNull(events);
|
|
335
|
+
Assert.assertEquals(3, events.size());
|
|
336
|
+
Assert.assertTrue(events.containsKey("onError"));
|
|
337
|
+
Assert.assertTrue(events.containsKey("onResized"));
|
|
338
|
+
Assert.assertTrue(events.containsKey("onOSMViewReady"));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// --- Null view edge case ---
|
|
342
|
+
|
|
343
|
+
@Test
|
|
344
|
+
public void testSetClientIdNullInnerView() {
|
|
345
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
346
|
+
// Should not throw
|
|
347
|
+
manager.setClientId(wrapper, "test-client-id");
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
@Test
|
|
351
|
+
public void testSetPurchaseAmountNullInnerView() {
|
|
352
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
353
|
+
manager.setPurchaseAmount(wrapper, "9999");
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
@Test
|
|
357
|
+
public void testSetEnvironmentNullInnerView() {
|
|
358
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
359
|
+
manager.setEnvironment(wrapper, "production");
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@Test
|
|
363
|
+
public void testSetRegionNullInnerView() {
|
|
364
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
365
|
+
manager.setRegion(wrapper, "eu");
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
@Test
|
|
369
|
+
public void testSetThemeNullInnerView() {
|
|
370
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
371
|
+
manager.setTheme(wrapper, "light");
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
@Test
|
|
375
|
+
public void testSetBackgroundColorNullInnerView() {
|
|
376
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
377
|
+
manager.setBackgroundColor(wrapper, "#FF0000");
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
@Test
|
|
381
|
+
public void testSetTextColorNullInnerView() {
|
|
382
|
+
Mockito.when(wrapper.getView()).thenReturn(null);
|
|
383
|
+
manager.setTextColor(wrapper, "#00FF00");
|
|
384
|
+
}
|
|
385
|
+
}
|