react-native-klarna-inapp-sdk 2.1.13 → 2.2.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/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 +346 -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 +72 -29
- 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,17 @@
|
|
|
1
|
-
package com.klarna.
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.payments;
|
|
2
2
|
|
|
3
3
|
import android.app.Application;
|
|
4
4
|
|
|
5
5
|
import androidx.test.core.app.ApplicationProvider;
|
|
6
6
|
|
|
7
|
+
import com.facebook.react.bridge.Arguments;
|
|
7
8
|
import com.facebook.react.bridge.JavaOnlyArray;
|
|
9
|
+
import com.facebook.react.bridge.JavaOnlyMap;
|
|
8
10
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
11
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
12
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
9
13
|
import com.klarna.mobile.sdk.api.payments.KlarnaPaymentView;
|
|
14
|
+
import com.klarna.mobile.sdk.api.payments.KlarnaPaymentsSDKError;
|
|
10
15
|
|
|
11
16
|
import org.junit.After;
|
|
12
17
|
import org.junit.Assert;
|
|
@@ -15,21 +20,24 @@ import org.junit.Rule;
|
|
|
15
20
|
import org.junit.Test;
|
|
16
21
|
import org.junit.runner.RunWith;
|
|
17
22
|
import org.mockito.Mockito;
|
|
23
|
+
import org.mockito.invocation.InvocationOnMock;
|
|
24
|
+
import org.mockito.stubbing.Answer;
|
|
25
|
+
import org.powermock.api.mockito.PowerMockito;
|
|
18
26
|
import org.powermock.core.classloader.annotations.PowerMockIgnore;
|
|
19
27
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
20
28
|
import org.powermock.modules.junit4.rule.PowerMockRule;
|
|
21
29
|
import org.robolectric.RobolectricTestRunner;
|
|
22
30
|
|
|
23
|
-
import
|
|
31
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_AUTHORIZE;
|
|
32
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_FINALIZE;
|
|
33
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_INITIALIZE;
|
|
34
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_LOAD;
|
|
35
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_LOAD_PAYMENT_REVIEW;
|
|
36
|
+
import static com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager.COMMAND_REAUTHORIZE;
|
|
24
37
|
|
|
25
|
-
import
|
|
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;
|
|
38
|
+
import java.util.Collections;
|
|
31
39
|
|
|
32
|
-
@PrepareForTest()
|
|
40
|
+
@PrepareForTest({Arguments.class})
|
|
33
41
|
@RunWith(RobolectricTestRunner.class)
|
|
34
42
|
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "androidx.*", "android.*", "com.android.*"})
|
|
35
43
|
public class KlarnaPaymentViewManagerTest {
|
|
@@ -52,6 +60,24 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
52
60
|
|
|
53
61
|
wrapper = Mockito.mock(PaymentViewWrapper.class);
|
|
54
62
|
wrapper.paymentView = Mockito.mock(KlarnaPaymentView.class);
|
|
63
|
+
|
|
64
|
+
PowerMockito.mockStatic(Arguments.class);
|
|
65
|
+
PowerMockito.when(Arguments.createArray())
|
|
66
|
+
.thenAnswer(
|
|
67
|
+
new Answer<Object>() {
|
|
68
|
+
@Override
|
|
69
|
+
public Object answer(InvocationOnMock invocation) throws Throwable {
|
|
70
|
+
return new JavaOnlyArray();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
PowerMockito.when(Arguments.createMap())
|
|
74
|
+
.thenAnswer(
|
|
75
|
+
new Answer<Object>() {
|
|
76
|
+
@Override
|
|
77
|
+
public Object answer(InvocationOnMock invocation) throws Throwable {
|
|
78
|
+
return new JavaOnlyMap();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
55
81
|
}
|
|
56
82
|
|
|
57
83
|
@After
|
|
@@ -61,22 +87,20 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
61
87
|
|
|
62
88
|
@Test
|
|
63
89
|
public void testReactClassName() {
|
|
64
|
-
Assert.assertEquals("
|
|
65
|
-
Assert.assertEquals("
|
|
90
|
+
Assert.assertEquals("RNKlarnaPaymentView", manager.getName());
|
|
91
|
+
Assert.assertEquals("RNKlarnaPaymentView", KlarnaPaymentViewManager.REACT_CLASS);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@Test
|
|
95
|
+
public void testSetCategory() {
|
|
96
|
+
manager.setCategory(wrapper, "testCategory");
|
|
97
|
+
Mockito.verify(wrapper.paymentView).setCategory("testCategory");
|
|
66
98
|
}
|
|
67
99
|
|
|
68
100
|
@Test
|
|
69
|
-
public void
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Assert.assertNotNull(commandsMap);
|
|
73
|
-
Assert.assertEquals(6, commandsMap.size());
|
|
74
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_INITIALIZE), commandsMap.get("initialize"));
|
|
75
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_LOAD), commandsMap.get("load"));
|
|
76
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_LOAD_PAYMENT_REVIEW), commandsMap.get("loadPaymentReview"));
|
|
77
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_AUTHORIZE), commandsMap.get("authorize"));
|
|
78
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_REAUTHORIZE), commandsMap.get("reauthorize"));
|
|
79
|
-
Assert.assertEquals(Integer.valueOf(COMMAND_FINALIZE), commandsMap.get("finalize"));
|
|
101
|
+
public void testSetReturnUrl() {
|
|
102
|
+
manager.setReturnUrl(wrapper, "testReturnUrl://");
|
|
103
|
+
Mockito.verify(wrapper.paymentView).setReturnURL("testReturnUrl://");
|
|
80
104
|
}
|
|
81
105
|
|
|
82
106
|
@Test
|
|
@@ -92,11 +116,10 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
92
116
|
Mockito.verify(wrapper.paymentView, Mockito.times(1)).initialize("testToken", "testReturnUrl");
|
|
93
117
|
}
|
|
94
118
|
|
|
95
|
-
@Test(expected = IndexOutOfBoundsException.class)
|
|
96
119
|
public void testReceiveCommandInitializeThrows() {
|
|
97
120
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
98
|
-
args.pushString("testToken");
|
|
99
121
|
manager.receiveCommand(wrapper, COMMAND_INITIALIZE, args);
|
|
122
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(0)).initialize(Mockito.anyString(), Mockito.anyString());
|
|
100
123
|
}
|
|
101
124
|
|
|
102
125
|
@Test
|
|
@@ -119,7 +142,7 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
119
142
|
@Test
|
|
120
143
|
public void testReceiveCommandAuthorize() {
|
|
121
144
|
manager.receiveCommand(wrapper, COMMAND_AUTHORIZE, null);
|
|
122
|
-
Mockito.verify(wrapper.paymentView, Mockito.times(
|
|
145
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(Mockito.anyBoolean(), (String) Mockito.isNull());
|
|
123
146
|
|
|
124
147
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
125
148
|
args.pushBoolean(true);
|
|
@@ -128,11 +151,11 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
128
151
|
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(true, "testSessionData");
|
|
129
152
|
}
|
|
130
153
|
|
|
131
|
-
@Test(expected = IndexOutOfBoundsException.class)
|
|
132
154
|
public void testReceiveCommandAuthorizeThrows() {
|
|
133
155
|
final JavaOnlyArray args = new JavaOnlyArray();
|
|
134
156
|
args.pushBoolean(true);
|
|
135
157
|
manager.receiveCommand(wrapper, COMMAND_AUTHORIZE, args);
|
|
158
|
+
Mockito.verify(wrapper.paymentView, Mockito.times(1)).authorize(true, null);
|
|
136
159
|
}
|
|
137
160
|
|
|
138
161
|
@Test
|
|
@@ -158,8 +181,28 @@ public class KlarnaPaymentViewManagerTest {
|
|
|
158
181
|
}
|
|
159
182
|
|
|
160
183
|
@Test
|
|
161
|
-
public void
|
|
162
|
-
|
|
163
|
-
|
|
184
|
+
public void testErrorMapFieldsAndValues() {
|
|
185
|
+
KlarnaPaymentsSDKError error = new KlarnaPaymentsSDKError(
|
|
186
|
+
"testName",
|
|
187
|
+
"testMessage",
|
|
188
|
+
false,
|
|
189
|
+
"testAction",
|
|
190
|
+
Collections.singletonList("testInvalidField"),
|
|
191
|
+
"testSessionId"
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
ReadableMap map = manager.buildErrorMap(error);
|
|
195
|
+
|
|
196
|
+
Assert.assertEquals("testName", map.getString("name"));
|
|
197
|
+
Assert.assertEquals("testMessage", map.getString("message"));
|
|
198
|
+
Assert.assertFalse(map.getBoolean("isFatal"));
|
|
199
|
+
Assert.assertEquals("testAction", map.getString("action"));
|
|
200
|
+
|
|
201
|
+
ReadableArray invalidFields = map.getArray("invalidFields");
|
|
202
|
+
Assert.assertNotNull(invalidFields);
|
|
203
|
+
Assert.assertEquals(1, invalidFields.size());
|
|
204
|
+
Assert.assertEquals("testInvalidField", invalidFields.getString(0));
|
|
205
|
+
|
|
206
|
+
Assert.assertEquals("testSessionId", map.getString("sessionId"));
|
|
164
207
|
}
|
|
165
208
|
}
|