react-native-klarna-inapp-sdk 2.1.13 → 2.2.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/README.md +100 -270
- package/android/build.gradle +84 -106
- package/android/gradle.properties +7 -0
- package/android/src/main/AndroidManifest.xml +2 -1
- package/android/src/main/AndroidManifestNew.xml +4 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackage.java +33 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ArgumentsUtil.java +62 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java +100 -0
- package/android/src/main/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentEvent.java +9 -19
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/payments/KlarnaPaymentViewManager.java +343 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/payments/PaymentViewWrapper.java +78 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewEvent.java +67 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewEventSender.java +139 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewManager.java +205 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java +32 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaStandaloneWebViewSpec.java +33 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java +25 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaStandaloneWebViewSpec.java +19 -0
- package/android/src/test/java/com/klarna/{inapp/sdk/KlarnaPaymentViewPackageTest.java → mobile/sdk/reactnative/KlarnaMobileSDKPackageTest.java} +9 -4
- package/android/src/test/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentEventTest.java +17 -20
- package/android/src/test/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentViewManagerTest.java +62 -36
- package/ios/{KlarnaInAppSDK.xcodeproj → RNKlarnaMobileSDK.xcodeproj}/project.pbxproj +147 -87
- package/ios/{KlarnaInAppSDK.xcodeproj/xcshareddata/xcschemes/KlarnaInAppSDK.xcscheme → RNKlarnaMobileSDK.xcodeproj/xcshareddata/xcschemes/RNKlarnaMobileSDK.xcscheme} +9 -9
- package/ios/{KlarnaInAppSDK.xcodeproj/xcshareddata/xcschemes/KlarnaInAppSDKTests.xcscheme → RNKlarnaMobileSDK.xcodeproj/xcshareddata/xcschemes/RNKlarnaMobileSDKTests.xcscheme} +3 -3
- package/ios/Sources/KlarnaPaymentViewManager.h +5 -0
- package/ios/Sources/{KlarnaPaymentView.m → KlarnaPaymentViewManager.mm} +10 -15
- package/ios/Sources/KlarnaStandaloneWebViewManager.h +5 -0
- package/ios/Sources/KlarnaStandaloneWebViewManager.mm +77 -0
- package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.h +29 -0
- package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.mm +265 -0
- package/ios/Sources/view/newarch/PaymentViewWrapper.h +33 -0
- package/ios/Sources/view/newarch/PaymentViewWrapper.mm +240 -0
- package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.h +42 -0
- package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.mm +195 -0
- package/ios/Sources/view/{PaymentViewWrapper.h → oldarch/PaymentViewWrapper.h} +9 -7
- package/ios/Sources/view/{PaymentViewWrapper.m → oldarch/PaymentViewWrapper.mm} +40 -27
- package/ios/Tests/PaymentViewWrapperTests.m +8 -10
- package/lib/commonjs/KlarnaPaymentView.js +192 -0
- package/lib/commonjs/KlarnaPaymentView.js.map +1 -0
- package/lib/commonjs/KlarnaStandaloneWebView.js +81 -0
- package/lib/commonjs/KlarnaStandaloneWebView.js.map +1 -0
- package/lib/commonjs/index.js +28 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js +16 -0
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js +16 -0
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -0
- package/lib/module/KlarnaPaymentView.js +182 -0
- package/lib/module/KlarnaPaymentView.js.map +1 -0
- package/lib/module/KlarnaStandaloneWebView.js +71 -0
- package/lib/module/KlarnaStandaloneWebView.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/specs/KlarnaPaymentViewNativeComponent.js +7 -0
- package/lib/module/specs/KlarnaPaymentViewNativeComponent.js.map +1 -0
- package/lib/module/specs/KlarnaStandaloneWebViewNativeComponent.js +7 -0
- package/lib/module/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -0
- package/lib/typescript/KlarnaPaymentView.d.ts +51 -0
- package/lib/typescript/KlarnaPaymentView.d.ts.map +1 -0
- package/lib/typescript/KlarnaStandaloneWebView.d.ts +46 -0
- package/lib/typescript/KlarnaStandaloneWebView.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaPaymentViewNativeComponent.d.ts +49 -0
- package/lib/typescript/specs/KlarnaPaymentViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaStandaloneWebViewNativeComponent.d.ts +65 -0
- package/lib/typescript/specs/KlarnaStandaloneWebViewNativeComponent.d.ts.map +1 -0
- package/package.json +86 -14
- package/react-native-klarna-inapp-sdk.podspec +32 -13
- package/src/KlarnaPaymentView.tsx +323 -0
- package/src/KlarnaStandaloneWebView.tsx +217 -0
- package/src/index.tsx +2 -0
- package/src/specs/KlarnaPaymentViewNativeComponent.ts +99 -0
- package/src/specs/KlarnaStandaloneWebViewNativeComponent.ts +96 -0
- package/.gitattributes +0 -3
- package/.watchmanconfig +0 -1
- package/.yarnrc +0 -5
- package/CHANGELOG.md +0 -116
- package/android/README.md +0 -14
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/android/gradlew +0 -172
- package/android/gradlew.bat +0 -84
- package/android/src/main/java/com/klarna/inapp/sdk/HeightListener.java +0 -159
- package/android/src/main/java/com/klarna/inapp/sdk/KlarnaPaymentViewManager.java +0 -282
- package/android/src/main/java/com/klarna/inapp/sdk/KlarnaPaymentViewPackage.java +0 -25
- package/android/src/main/java/com/klarna/inapp/sdk/Mappable.java +0 -10
- package/android/src/main/java/com/klarna/inapp/sdk/MappableKlarnaPaymentsSDKError.java +0 -31
- package/android/src/main/java/com/klarna/inapp/sdk/PaymentViewWrapper.java +0 -131
- package/android/src/test/java/com/klarna/inapp/sdk/MappableKlarnaPaymentsSDKErrorTest.java +0 -45
- package/babel.config.js +0 -3
- package/integration-tests/build.gradle +0 -59
- package/integration-tests/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/integration-tests/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/integration-tests/gradlew +0 -172
- package/integration-tests/gradlew.bat +0 -84
- package/integration-tests/settings.gradle +0 -2
- package/integration-tests/src/test/resources/junit-platform.properties +0 -4
- package/ios/KlarnaInAppSDK.xcworkspace/contents.xcworkspacedata +0 -10
- package/ios/KlarnaInAppSDK.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/Podfile +0 -73
- package/ios/Sources/KlarnaPaymentView.h +0 -5
- package/scripts/bootstrap.js +0 -29
- package/src/index.js +0 -72
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.standalonewebview;
|
|
2
|
+
|
|
3
|
+
import android.app.Application;
|
|
4
|
+
import android.graphics.Bitmap;
|
|
5
|
+
import android.os.Build;
|
|
6
|
+
import android.webkit.RenderProcessGoneDetail;
|
|
7
|
+
import android.webkit.WebResourceError;
|
|
8
|
+
import android.webkit.WebResourceRequest;
|
|
9
|
+
|
|
10
|
+
import androidx.annotation.NonNull;
|
|
11
|
+
import androidx.annotation.Nullable;
|
|
12
|
+
|
|
13
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
14
|
+
import com.facebook.react.bridge.ReactContext;
|
|
15
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
16
|
+
import com.facebook.react.common.MapBuilder;
|
|
17
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
18
|
+
import com.facebook.react.uimanager.UIManagerHelper;
|
|
19
|
+
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
20
|
+
import com.facebook.react.uimanager.events.EventDispatcher;
|
|
21
|
+
import com.klarna.mobile.sdk.KlarnaMobileSDKError;
|
|
22
|
+
import com.klarna.mobile.sdk.api.KlarnaEventHandler;
|
|
23
|
+
import com.klarna.mobile.sdk.api.KlarnaProductEvent;
|
|
24
|
+
import com.klarna.mobile.sdk.api.component.KlarnaComponent;
|
|
25
|
+
import com.klarna.mobile.sdk.api.standalonewebview.KlarnaStandaloneWebView;
|
|
26
|
+
import com.klarna.mobile.sdk.api.standalonewebview.KlarnaStandaloneWebViewClient;
|
|
27
|
+
import com.klarna.mobile.sdk.reactnative.spec.RNKlarnaStandaloneWebViewSpec;
|
|
28
|
+
|
|
29
|
+
import java.lang.ref.WeakReference;
|
|
30
|
+
import java.util.HashMap;
|
|
31
|
+
import java.util.Map;
|
|
32
|
+
import java.util.Objects;
|
|
33
|
+
|
|
34
|
+
public class KlarnaStandaloneWebViewManager extends RNKlarnaStandaloneWebViewSpec<KlarnaStandaloneWebView> {
|
|
35
|
+
|
|
36
|
+
// Commands that can be triggered from React Native side
|
|
37
|
+
public static final String COMMAND_LOAD = "load";
|
|
38
|
+
public static final String COMMAND_GO_FORWARD = "goForward";
|
|
39
|
+
public static final String COMMAND_GO_BACK = "goBack";
|
|
40
|
+
public static final String COMMAND_RELOAD = "reload";
|
|
41
|
+
|
|
42
|
+
private static final String REACT_CLASS = "RNKlarnaStandaloneWebView";
|
|
43
|
+
|
|
44
|
+
// Store a list of views to event dispatchers so we send up events via the right views.
|
|
45
|
+
private final Map<WeakReference<KlarnaStandaloneWebView>, EventDispatcher> viewToDispatcher;
|
|
46
|
+
private final KlarnaStandaloneWebViewEventSender klarnaStandaloneWebViewEventSender;
|
|
47
|
+
private final KlarnaEventHandler klarnaEventHandler = new KlarnaEventHandler() {
|
|
48
|
+
@Override
|
|
49
|
+
public void onEvent(@NonNull KlarnaComponent klarnaComponent, @NonNull KlarnaProductEvent klarnaProductEvent) {
|
|
50
|
+
if (klarnaComponent instanceof KlarnaStandaloneWebView) {
|
|
51
|
+
klarnaStandaloneWebViewEventSender.sendKlarnaMessageEvent((KlarnaStandaloneWebView) klarnaComponent, klarnaProductEvent);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
public void onError(@NonNull KlarnaComponent klarnaComponent, @NonNull KlarnaMobileSDKError klarnaMobileSDKError) {
|
|
57
|
+
// Not used as of now
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
private final KlarnaStandaloneWebViewClient klarnaStandaloneWebViewClient = new KlarnaStandaloneWebViewClient() {
|
|
61
|
+
@Override
|
|
62
|
+
public void onPageStarted(@Nullable KlarnaStandaloneWebView view, @Nullable String url, @Nullable Bitmap favicon) {
|
|
63
|
+
klarnaStandaloneWebViewEventSender.sendNavigationEvent(view, KlarnaStandaloneWebViewEvent.Event.ON_LOAD_START, url);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void onPageFinished(@Nullable KlarnaStandaloneWebView view, @Nullable String url) {
|
|
68
|
+
klarnaStandaloneWebViewEventSender.sendNavigationEvent(view, KlarnaStandaloneWebViewEvent.Event.ON_LOAD_END, url);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Override
|
|
72
|
+
public void onReceivedError(@Nullable KlarnaStandaloneWebView view, @Nullable WebResourceRequest request, @Nullable WebResourceError error) {
|
|
73
|
+
if (error != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
74
|
+
klarnaStandaloneWebViewEventSender.sendErrorEvent(view, error.getErrorCode(), error.getDescription().toString());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Override
|
|
79
|
+
public void onReceivedError(@Nullable KlarnaStandaloneWebView view, int errorCode, @Nullable String description, @Nullable String failingUrl) {
|
|
80
|
+
klarnaStandaloneWebViewEventSender.sendErrorEvent(view, errorCode, description);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@Override
|
|
84
|
+
public void onProgressChanged(@Nullable KlarnaStandaloneWebView view, int newProgress) {
|
|
85
|
+
klarnaStandaloneWebViewEventSender.sendLoadProgressEvent(view, newProgress);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@Override
|
|
89
|
+
public void onRenderProcessGone(@Nullable KlarnaStandaloneWebView view, @Nullable RenderProcessGoneDetail detail) {
|
|
90
|
+
boolean didCrash = false;
|
|
91
|
+
if (detail != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
92
|
+
didCrash = detail.didCrash();
|
|
93
|
+
}
|
|
94
|
+
klarnaStandaloneWebViewEventSender.sendRenderProcessGoneEvent(view, didCrash);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
public KlarnaStandaloneWebViewManager(ReactApplicationContext reactContext, Application applicationContext) {
|
|
99
|
+
super();
|
|
100
|
+
viewToDispatcher = new HashMap<>();
|
|
101
|
+
klarnaStandaloneWebViewEventSender = new KlarnaStandaloneWebViewEventSender(viewToDispatcher);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@ReactProp(name = "returnUrl")
|
|
105
|
+
@Override
|
|
106
|
+
public void setReturnUrl(KlarnaStandaloneWebView view, @Nullable String returnUrl) {
|
|
107
|
+
if (!Objects.equals(returnUrl, view.getReturnURL())) {
|
|
108
|
+
view.setReturnURL(returnUrl);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@NonNull
|
|
113
|
+
@Override
|
|
114
|
+
public String getName() {
|
|
115
|
+
return REACT_CLASS;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Handles commands received from RN to a specific view.
|
|
120
|
+
*
|
|
121
|
+
* @param root view receiving the command
|
|
122
|
+
* @param commandId identifier of the command
|
|
123
|
+
* @param args array of command arguments
|
|
124
|
+
*/
|
|
125
|
+
@Override
|
|
126
|
+
public void receiveCommand(@NonNull KlarnaStandaloneWebView root, String commandId, @Nullable ReadableArray args) {
|
|
127
|
+
switch (commandId) {
|
|
128
|
+
case COMMAND_LOAD:
|
|
129
|
+
if (args != null && args.size() > 0) {
|
|
130
|
+
String url = args.getString(0);
|
|
131
|
+
load(root, url);
|
|
132
|
+
}
|
|
133
|
+
break;
|
|
134
|
+
case COMMAND_GO_FORWARD:
|
|
135
|
+
goForward(root);
|
|
136
|
+
break;
|
|
137
|
+
case COMMAND_GO_BACK:
|
|
138
|
+
goBack(root);
|
|
139
|
+
break;
|
|
140
|
+
case COMMAND_RELOAD:
|
|
141
|
+
reload(root);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@Override
|
|
147
|
+
public void load(KlarnaStandaloneWebView view, String url) {
|
|
148
|
+
view.loadUrl(url);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@Override
|
|
152
|
+
public void goForward(KlarnaStandaloneWebView view) {
|
|
153
|
+
view.goForward();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@Override
|
|
157
|
+
public void goBack(KlarnaStandaloneWebView view) {
|
|
158
|
+
view.goBack();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@Override
|
|
162
|
+
public void reload(KlarnaStandaloneWebView view) {
|
|
163
|
+
view.reload();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Exposes direct event types that will be accessible as prop "callbacks" from RN.
|
|
168
|
+
* <p>
|
|
169
|
+
* Structure must follow:
|
|
170
|
+
* { "<eventName>": {"registrationName": "<eventName>"} }
|
|
171
|
+
*/
|
|
172
|
+
@Nullable
|
|
173
|
+
@Override
|
|
174
|
+
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
|
|
175
|
+
MapBuilder.Builder<String, Object> builder = MapBuilder.builder();
|
|
176
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_LOAD_START.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_LOAD_START.name));
|
|
177
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_LOAD_END.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_LOAD_END.name));
|
|
178
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_ERROR.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_ERROR.name));
|
|
179
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_LOAD_PROGRESS.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_LOAD_PROGRESS.name));
|
|
180
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_KLARNA_MESSAGE.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_KLARNA_MESSAGE.name));
|
|
181
|
+
builder.put(KlarnaStandaloneWebViewEvent.Event.ON_RENDER_PROCESS_GONE.name, MapBuilder.of("registrationName", KlarnaStandaloneWebViewEvent.Event.ON_RENDER_PROCESS_GONE.name));
|
|
182
|
+
return builder.build();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@NonNull
|
|
186
|
+
@Override
|
|
187
|
+
protected KlarnaStandaloneWebView createViewInstance(@NonNull ThemedReactContext themedReactContext) {
|
|
188
|
+
KlarnaStandaloneWebView klarnaStandaloneWebView = new KlarnaStandaloneWebView(
|
|
189
|
+
/* context */ themedReactContext,
|
|
190
|
+
/* attrs */ null,
|
|
191
|
+
/* defStyleAttr */ 0,
|
|
192
|
+
/* webViewClient */ klarnaStandaloneWebViewClient,
|
|
193
|
+
/* eventHandler */ klarnaEventHandler,
|
|
194
|
+
/* environment */ null,
|
|
195
|
+
/* region */ null,
|
|
196
|
+
/* theme */ null,
|
|
197
|
+
/* resourceEndpoint */ null,
|
|
198
|
+
/* returnURL */ null);
|
|
199
|
+
// Each view has its own event dispatcher.
|
|
200
|
+
EventDispatcher dispatcher = UIManagerHelper.getEventDispatcherForReactTag((ReactContext) klarnaStandaloneWebView.getContext(), klarnaStandaloneWebView.getId());
|
|
201
|
+
viewToDispatcher.put(new WeakReference<>(klarnaStandaloneWebView), dispatcher);
|
|
202
|
+
return klarnaStandaloneWebView;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
}
|
package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.spec;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
|
|
8
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
9
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
10
|
+
import com.facebook.react.uimanager.ViewManagerDelegate;
|
|
11
|
+
import com.facebook.react.viewmanagers.RNKlarnaPaymentViewManagerDelegate;
|
|
12
|
+
import com.facebook.react.viewmanagers.RNKlarnaPaymentViewManagerInterface;
|
|
13
|
+
|
|
14
|
+
public abstract class RNKlarnaPaymentViewSpec<T extends View> extends SimpleViewManager<T> implements RNKlarnaPaymentViewManagerInterface<T> {
|
|
15
|
+
private final ViewManagerDelegate<T> mDelegate;
|
|
16
|
+
|
|
17
|
+
public RNKlarnaPaymentViewSpec() {
|
|
18
|
+
mDelegate = new RNKlarnaPaymentViewManagerDelegate<>(this);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Nullable
|
|
22
|
+
@Override
|
|
23
|
+
protected ViewManagerDelegate<T> getDelegate() {
|
|
24
|
+
return mDelegate;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
public void receiveCommand(@NonNull T root, String commandId, @Nullable ReadableArray args) {
|
|
29
|
+
mDelegate.receiveCommand(root, commandId, args);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.spec;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
|
|
8
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
9
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
10
|
+
import com.facebook.react.uimanager.ViewManagerDelegate;
|
|
11
|
+
import com.facebook.react.viewmanagers.RNKlarnaStandaloneWebViewManagerDelegate;
|
|
12
|
+
import com.facebook.react.viewmanagers.RNKlarnaStandaloneWebViewManagerInterface;
|
|
13
|
+
|
|
14
|
+
public abstract class RNKlarnaStandaloneWebViewSpec<T extends View> extends SimpleViewManager<T> implements RNKlarnaStandaloneWebViewManagerInterface<T> {
|
|
15
|
+
|
|
16
|
+
private final ViewManagerDelegate<T> viewManagerDelegate;
|
|
17
|
+
|
|
18
|
+
public RNKlarnaStandaloneWebViewSpec() {
|
|
19
|
+
viewManagerDelegate = new RNKlarnaStandaloneWebViewManagerDelegate<>(this);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Nullable
|
|
23
|
+
@Override
|
|
24
|
+
protected ViewManagerDelegate<T> getDelegate() {
|
|
25
|
+
return viewManagerDelegate;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Override
|
|
29
|
+
public void receiveCommand(@NonNull T root, String commandId, @Nullable ReadableArray args) {
|
|
30
|
+
viewManagerDelegate.receiveCommand(root, commandId, args);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.spec;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.Nullable;
|
|
6
|
+
|
|
7
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
8
|
+
|
|
9
|
+
public abstract class RNKlarnaPaymentViewSpec<T extends View> extends SimpleViewManager<T> {
|
|
10
|
+
public abstract void setCategory(T view, @Nullable String value);
|
|
11
|
+
|
|
12
|
+
public abstract void setReturnUrl(T view, @Nullable String value);
|
|
13
|
+
|
|
14
|
+
public abstract void initialize(T view, String clientToken, String returnUrl);
|
|
15
|
+
|
|
16
|
+
public abstract void load(T view, String sessionData);
|
|
17
|
+
|
|
18
|
+
public abstract void loadPaymentReview(T view);
|
|
19
|
+
|
|
20
|
+
public abstract void authorize(T view, boolean autoFinalize, String sessionData);
|
|
21
|
+
|
|
22
|
+
public abstract void reauthorize(T view, String sessionData);
|
|
23
|
+
|
|
24
|
+
public abstract void finalize(T view, String sessionData);
|
|
25
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.spec;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.Nullable;
|
|
6
|
+
|
|
7
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
8
|
+
|
|
9
|
+
public abstract class RNKlarnaStandaloneWebViewSpec<T extends View> extends SimpleViewManager<T> {
|
|
10
|
+
public abstract void setReturnUrl(T view, @Nullable String returnUrl);
|
|
11
|
+
|
|
12
|
+
public abstract void load(T view, String url);
|
|
13
|
+
|
|
14
|
+
public abstract void goForward(T view);
|
|
15
|
+
|
|
16
|
+
public abstract void goBack(T view);
|
|
17
|
+
|
|
18
|
+
public abstract void reload(T view);
|
|
19
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.klarna.
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative;
|
|
2
2
|
|
|
3
3
|
import android.app.Application;
|
|
4
4
|
|
|
@@ -7,6 +7,9 @@ import androidx.test.core.app.ApplicationProvider;
|
|
|
7
7
|
import com.facebook.react.bridge.NativeModule;
|
|
8
8
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
9
|
import com.facebook.react.uimanager.ViewManager;
|
|
10
|
+
import com.klarna.mobile.sdk.reactnative.KlarnaMobileSDKPackage;
|
|
11
|
+
import com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager;
|
|
12
|
+
import com.klarna.mobile.sdk.reactnative.standalonewebview.KlarnaStandaloneWebViewManager;
|
|
10
13
|
|
|
11
14
|
import org.junit.Assert;
|
|
12
15
|
import org.junit.Before;
|
|
@@ -17,7 +20,7 @@ import org.robolectric.RobolectricTestRunner;
|
|
|
17
20
|
import java.util.List;
|
|
18
21
|
|
|
19
22
|
@RunWith(RobolectricTestRunner.class)
|
|
20
|
-
public class
|
|
23
|
+
public class KlarnaMobileSDKPackageTest {
|
|
21
24
|
|
|
22
25
|
private Application application;
|
|
23
26
|
private ReactApplicationContext reactContext;
|
|
@@ -30,7 +33,7 @@ public class KlarnaPaymentViewPackageTest {
|
|
|
30
33
|
|
|
31
34
|
@Test
|
|
32
35
|
public void testCreateNativeModules() {
|
|
33
|
-
|
|
36
|
+
KlarnaMobileSDKPackage paymentViewPackage = new KlarnaMobileSDKPackage();
|
|
34
37
|
List<NativeModule> nativeModules = paymentViewPackage.createNativeModules(reactContext);
|
|
35
38
|
Assert.assertNotNull(nativeModules);
|
|
36
39
|
Assert.assertTrue(nativeModules.isEmpty());
|
|
@@ -38,10 +41,12 @@ public class KlarnaPaymentViewPackageTest {
|
|
|
38
41
|
|
|
39
42
|
@Test
|
|
40
43
|
public void testCreateViewManagers() {
|
|
41
|
-
|
|
44
|
+
KlarnaMobileSDKPackage paymentViewPackage = new KlarnaMobileSDKPackage();
|
|
42
45
|
List<ViewManager> nativeModules = paymentViewPackage.createViewManagers(reactContext);
|
|
43
46
|
Assert.assertNotNull(nativeModules);
|
|
44
47
|
Assert.assertFalse(nativeModules.isEmpty());
|
|
48
|
+
Assert.assertEquals(2, nativeModules.size());
|
|
45
49
|
Assert.assertTrue(nativeModules.get(0) instanceof KlarnaPaymentViewManager);
|
|
50
|
+
Assert.assertTrue(nativeModules.get(1) instanceof KlarnaStandaloneWebViewManager);
|
|
46
51
|
}
|
|
47
52
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.klarna.
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.payments;
|
|
2
2
|
|
|
3
3
|
import android.os.SystemClock;
|
|
4
4
|
|
|
@@ -30,17 +30,13 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
|
30
30
|
import org.powermock.modules.junit4.rule.PowerMockRule;
|
|
31
31
|
import org.robolectric.RobolectricTestRunner;
|
|
32
32
|
|
|
33
|
-
import
|
|
34
|
-
import
|
|
35
|
-
import
|
|
36
|
-
|
|
37
|
-
import static com.klarna.
|
|
38
|
-
import static com.klarna.
|
|
39
|
-
import static com.klarna.
|
|
40
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentEvent.EVENT_NAME_ON_INITIALIZE;
|
|
41
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentEvent.EVENT_NAME_ON_LOAD;
|
|
42
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentEvent.EVENT_NAME_ON_LOAD_PAYMENT_REVIEW;
|
|
43
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentEvent.EVENT_NAME_ON_REAUTHORIZE;
|
|
33
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_AUTHORIZE;
|
|
34
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_ERROR;
|
|
35
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_FINALIZE;
|
|
36
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_INITIALIZE;
|
|
37
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_LOAD;
|
|
38
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_LOAD_PAYMENT_REVIEW;
|
|
39
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentEvent.EVENT_NAME_ON_REAUTHORIZE;
|
|
44
40
|
import static org.mockito.Mockito.mock;
|
|
45
41
|
import static org.powermock.api.mockito.PowerMockito.when;
|
|
46
42
|
|
|
@@ -118,12 +114,13 @@ public class KlarnaPaymentEventTest {
|
|
|
118
114
|
EventDispatcherListener listener = mock(EventDispatcherListener.class);
|
|
119
115
|
eventDispatcherMock.addListener(listener);
|
|
120
116
|
|
|
117
|
+
WritableMap map = Arguments.createMap();
|
|
118
|
+
map.putString("testKey", "testValue");
|
|
119
|
+
|
|
121
120
|
KlarnaPaymentEvent event = new KlarnaPaymentEvent(
|
|
122
121
|
23,
|
|
123
122
|
"testEventName",
|
|
124
|
-
|
|
125
|
-
put("testKey", "testValue");
|
|
126
|
-
}}
|
|
123
|
+
map
|
|
127
124
|
);
|
|
128
125
|
|
|
129
126
|
eventDispatcherMock.dispatchEvent(event);
|
|
@@ -133,18 +130,18 @@ public class KlarnaPaymentEventTest {
|
|
|
133
130
|
|
|
134
131
|
@Test
|
|
135
132
|
public void testDispatch() {
|
|
136
|
-
|
|
133
|
+
WritableMap map = Arguments.createMap();
|
|
134
|
+
map.putString("testKey", "testValue");
|
|
135
|
+
|
|
137
136
|
KlarnaPaymentEvent event = new KlarnaPaymentEvent(
|
|
138
137
|
23,
|
|
139
138
|
"testEventName",
|
|
140
|
-
|
|
139
|
+
map
|
|
141
140
|
);
|
|
142
141
|
|
|
143
|
-
WritableMap eventData = Arguments.makeNativeMap(additionalParams);
|
|
144
|
-
|
|
145
142
|
RCTEventEmitter emitter = mock(RCTEventEmitter.class);
|
|
146
143
|
event.dispatch(emitter);
|
|
147
144
|
Mockito.verify(emitter, Mockito.times(1))
|
|
148
|
-
.receiveEvent(event.getViewTag(), "testEventName",
|
|
145
|
+
.receiveEvent(event.getViewTag(), "testEventName", map);
|
|
149
146
|
}
|
|
150
147
|
}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
package com.klarna.
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.payments;
|
|
2
|
+
|
|
3
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_AUTHORIZE;
|
|
4
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_FINALIZE;
|
|
5
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_INITIALIZE;
|
|
6
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_LOAD;
|
|
7
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_LOAD_PAYMENT_REVIEW;
|
|
8
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_REAUTHORIZE;
|
|
2
9
|
|
|
3
10
|
import android.app.Application;
|
|
4
11
|
|
|
5
12
|
import androidx.test.core.app.ApplicationProvider;
|
|
6
13
|
|
|
14
|
+
import com.facebook.react.bridge.Arguments;
|
|
7
15
|
import com.facebook.react.bridge.JavaOnlyArray;
|
|
16
|
+
import com.facebook.react.bridge.JavaOnlyMap;
|
|
8
17
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
18
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
19
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
9
20
|
import com.klarna.mobile.sdk.api.payments.KlarnaPaymentView;
|
|
21
|
+
import com.klarna.mobile.sdk.api.payments.KlarnaPaymentsSDKError;
|
|
10
22
|
|
|
11
23
|
import org.junit.After;
|
|
12
24
|
import org.junit.Assert;
|
|
@@ -15,21 +27,15 @@ import org.junit.Rule;
|
|
|
15
27
|
import org.junit.Test;
|
|
16
28
|
import org.junit.runner.RunWith;
|
|
17
29
|
import org.mockito.Mockito;
|
|
30
|
+
import org.powermock.api.mockito.PowerMockito;
|
|
18
31
|
import org.powermock.core.classloader.annotations.PowerMockIgnore;
|
|
19
32
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
20
33
|
import org.powermock.modules.junit4.rule.PowerMockRule;
|
|
21
34
|
import org.robolectric.RobolectricTestRunner;
|
|
22
35
|
|
|
23
|
-
import java.util.
|
|
24
|
-
|
|
25
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_AUTHORIZE;
|
|
26
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_FINALIZE;
|
|
27
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_INITIALIZE;
|
|
28
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_LOAD;
|
|
29
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_LOAD_PAYMENT_REVIEW;
|
|
30
|
-
import static com.klarna.inapp.sdk.KlarnaPaymentViewManager.COMMAND_REAUTHORIZE;
|
|
36
|
+
import java.util.Collections;
|
|
31
37
|
|
|
32
|
-
@PrepareForTest()
|
|
38
|
+
@PrepareForTest({Arguments.class})
|
|
33
39
|
@RunWith(RobolectricTestRunner.class)
|
|
34
40
|
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "androidx.*", "android.*", "com.android.*"})
|
|
35
41
|
public class KlarnaPaymentViewManagerTest {
|
|
@@ -37,21 +43,24 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
37
43
|
@Rule
|
|
38
44
|
public PowerMockRule rule = new PowerMockRule();
|
|
39
45
|
|
|
40
|
-
private Application application;
|
|
41
|
-
private ReactApplicationContext reactContext;
|
|
42
|
-
|
|
43
46
|
private KlarnaPaymentViewManager manager;
|
|
44
47
|
private PaymentViewWrapper wrapper;
|
|
45
48
|
|
|
46
49
|
@Before
|
|
47
50
|
public void setup() {
|
|
48
|
-
application = ApplicationProvider.getApplicationContext();
|
|
49
|
-
reactContext = new ReactApplicationContext(application);
|
|
51
|
+
Application application = ApplicationProvider.getApplicationContext();
|
|
52
|
+
ReactApplicationContext reactContext = new ReactApplicationContext(application);
|
|
50
53
|
|
|
51
|
-
manager = new KlarnaPaymentViewManager(reactContext
|
|
54
|
+
manager = new KlarnaPaymentViewManager(reactContext);
|
|
52
55
|
|
|
53
56
|
wrapper = Mockito.mock(PaymentViewWrapper.class);
|
|
54
57
|
wrapper.paymentView = Mockito.mock(KlarnaPaymentView.class);
|
|
58
|
+
|
|
59
|
+
PowerMockito.mockStatic(Arguments.class);
|
|
60
|
+
PowerMockito.when(Arguments.createArray())
|
|
61
|
+
.thenAnswer(invocation -> new JavaOnlyArray());
|
|
62
|
+
PowerMockito.when(Arguments.createMap())
|
|
63
|
+
.thenAnswer(invocation -> new JavaOnlyMap());
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
@After
|
|
@@ -61,22 +70,20 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
61
70
|
|
|
62
71
|
@Test
|
|
63
72
|
public void testReactClassName() {
|
|
64
|
-
Assert.assertEquals("
|
|
65
|
-
Assert.assertEquals("
|
|
73
|
+
Assert.assertEquals("RNKlarnaPaymentView", manager.getName());
|
|
74
|
+
Assert.assertEquals("RNKlarnaPaymentView", KlarnaPaymentViewManager.REACT_CLASS);
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
@Test
|
|
69
|
-
public void
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_REAUTHORIZE), commandsMap.get("reauthorize"));
|
|
79
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_FINALIZE), commandsMap.get("finalize"));
|
|
78
|
+
public void testSetCategory() {
|
|
79
|
+
manager.setCategory(wrapper, "testCategory");
|
|
80
|
+
Mockito.verify(wrapper.paymentView).setCategory("testCategory");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@Test
|
|
84
|
+
public void testSetReturnUrl() {
|
|
85
|
+
manager.setReturnUrl(wrapper, "testReturnUrl://");
|
|
86
|
+
Mockito.verify(wrapper.paymentView).setReturnURL("testReturnUrl://");
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
@Test
|
|
@@ -92,11 +99,10 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
92
99
|
Mockito.verify(wrapper.paymentView, Mockito.times(1)).initialize("testToken", "testReturnUrl");
|
|
93
100
|
}
|
|
94
101
|
|
|
95
|
-
@Test(expected = IndexOutOfBoundsException.class)
|
|
96
102
|
public void testReceiveCommandInitializeThrows() {
|
|
97
103
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
98
|
-
args.pushString("testToken");
|
|
99
104
|
manager.receiveCommand(wrapper, COMMAND_INITIALIZE, args);
|
|
105
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(0)).initialize(Mockito.anyString(), Mockito.anyString());
|
|
100
106
|
}
|
|
101
107
|
|
|
102
108
|
@Test
|
|
@@ -119,7 +125,7 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
119
125
|
@Test
|
|
120
126
|
public void testReceiveCommandAuthorize() {
|
|
121
127
|
manager.receiveCommand(wrapper, COMMAND_AUTHORIZE, null);
|
|
122
|
-
Mockito.verify(wrapper.paymentView, Mockito.times(
|
|
128
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(Mockito.anyBoolean(), (String) Mockito.isNull());
|
|
123
129
|
|
|
124
130
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
125
131
|
args.pushBoolean(true);
|
|
@@ -128,11 +134,11 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
128
134
|
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(true, "testSessionData");
|
|
129
135
|
}
|
|
130
136
|
|
|
131
|
-
@Test(expected = IndexOutOfBoundsException.class)
|
|
132
137
|
public void testReceiveCommandAuthorizeThrows() {
|
|
133
138
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
134
139
|
args.pushBoolean(true);
|
|
135
140
|
manager.receiveCommand(wrapper, COMMAND_AUTHORIZE, args);
|
|
141
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(true, null);
|
|
136
142
|
}
|
|
137
143
|
|
|
138
144
|
@Test
|
|
@@ -158,8 +164,28 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
158
164
|
}
|
|
159
165
|
|
|
160
166
|
@Test
|
|
161
|
-
public void
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
public void testErrorMapFieldsAndValues() {
|
|
168
|
+
KlarnaPaymentsSDKError error = new KlarnaPaymentsSDKError(
|
|
169
|
+
"testName",
|
|
170
|
+
"testMessage",
|
|
171
|
+
false,
|
|
172
|
+
"testAction",
|
|
173
|
+
Collections.singletonList("testInvalidField"),
|
|
174
|
+
"testSessionId"
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
ReadableMap map = manager.buildErrorMap(error);
|
|
178
|
+
|
|
179
|
+
Assert.assertEquals("testName", map.getString("name"));
|
|
180
|
+
Assert.assertEquals("testMessage", map.getString("message"));
|
|
181
|
+
Assert.assertFalse(map.getBoolean("isFatal"));
|
|
182
|
+
Assert.assertEquals("testAction", map.getString("action"));
|
|
183
|
+
|
|
184
|
+
ReadableArray invalidFields = map.getArray("invalidFields");
|
|
185
|
+
Assert.assertNotNull(invalidFields);
|
|
186
|
+
Assert.assertEquals(1, invalidFields.size());
|
|
187
|
+
Assert.assertEquals("testInvalidField", invalidFields.getString(0));
|
|
188
|
+
|
|
189
|
+
Assert.assertEquals("testSessionId", map.getString("sessionId"));
|
|
164
190
|
}
|
|
165
191
|
}
|