Skip to content

Commit e398fd7

Browse files
showSecondLayer crashes with empty options (#126)
* fixed bug in android * improved ios tests
1 parent 544348d commit e398fd7

File tree

3 files changed

+77
-6
lines changed

3 files changed

+77
-6
lines changed

android/src/androidTest/java/com/usercentrics/reactnativemodule/RNUsercentricsModuleTest.kt

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ class RNUsercentricsModuleTest {
674674
}
675675

676676
@Test
677-
fun testShowFirstLayer() {
677+
fun testShowFirstLayerBannerSettingsObject() {
678678
val usercentricsProxy = FakeUsercentricsProxy()
679679
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
680680
val module =
@@ -686,7 +686,33 @@ class RNUsercentricsModuleTest {
686686
}
687687

688688
@Test
689-
fun testShowSecondLayer() {
689+
fun testShowFirstLayerWithNullBannerSettings() {
690+
val usercentricsProxy = FakeUsercentricsProxy()
691+
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
692+
val module =
693+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
694+
val promise = FakePromise()
695+
module.showFirstLayer(null, promise)
696+
promise.await()
697+
assertEquals(null, usercentricsProxy.showFirstLayerBannerSettings)
698+
}
699+
700+
@Test
701+
fun testShowFirstLayerWithEmptyBannerSettingsObject() {
702+
val bannerSettings = emptyMap<String, String>().toWritableMap()
703+
704+
val usercentricsProxy = FakeUsercentricsProxy()
705+
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
706+
val module =
707+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
708+
val promise = FakePromise()
709+
module.showFirstLayer(bannerSettings, promise)
710+
promise.await()
711+
assertEquals(BannerSettings(), usercentricsProxy.showFirstLayerBannerSettings)
712+
}
713+
714+
@Test
715+
fun testShowSecondLayerWithBannerSettingsObject() {
690716
val usercentricsProxy = FakeUsercentricsProxy()
691717
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
692718
val module =
@@ -697,6 +723,32 @@ class RNUsercentricsModuleTest {
697723
assertEquals(expectedBannerSettings, usercentricsProxy.showSecondLayerBannerSettings)
698724
}
699725

726+
@Test
727+
fun testShowSecondLayerWithNullBannerSettings() {
728+
val usercentricsProxy = FakeUsercentricsProxy()
729+
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
730+
val module =
731+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
732+
val promise = FakePromise()
733+
module.showSecondLayer(null, promise)
734+
promise.await()
735+
assertEquals(null, usercentricsProxy.showSecondLayerBannerSettings)
736+
}
737+
738+
@Test
739+
fun testShowSecondLayerWithEmptyBannerSettingsObject() {
740+
val bannerSettings = emptyMap<String, String>().toWritableMap()
741+
742+
val usercentricsProxy = FakeUsercentricsProxy()
743+
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
744+
val module =
745+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
746+
val promise = FakePromise()
747+
module.showSecondLayer(bannerSettings, promise)
748+
promise.await()
749+
assertEquals(BannerSettings(), usercentricsProxy.showSecondLayerBannerSettings)
750+
}
751+
700752
@Test
701753
fun testShowFirstLayerWithCustomLocalLogo() {
702754
val context = InstrumentationRegistry.getInstrumentation().context

android/src/main/java/com/usercentrics/reactnativeusercentrics/RNUsercentricsModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ internal class RNUsercentricsModule(
4646
}
4747

4848
@ReactMethod
49-
fun showSecondLayer(options: ReadableMap, promise: Promise) {
49+
fun showSecondLayer(options: ReadableMap?, promise: Promise) {
5050
runOnUiThread {
5151
try {
5252
val context = reactContextProvider.context()
53-
val bannerSettings = options.bannerSettingsFromMap(context)
53+
val bannerSettings = options?.bannerSettingsFromMap(context)
5454

5555
val activity = reactContextProvider.activity()!!
5656
usercentricsProxy.showSecondLayer(activity, bannerSettings, promise)

example/ios/exampleTests/RNUsercentricsModuleTests.swift

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ class RNUsercentricsModuleTests: XCTestCase {
477477
XCTAssertEqual(String("variantA"), fakeUsercentrics.variant)
478478
}
479479

480-
func testShowFirstLayer() {
480+
func testShowFirstLayerWithBannerSettingsObject() {
481481
let serializedSettings: NSDictionary = [
482482
"firstLayerStyleSettings": ["layout": "POPUP_CENTER"]
483483
]
@@ -487,8 +487,17 @@ class RNUsercentricsModuleTests: XCTestCase {
487487
XCTFail("Should not go here")
488488
}
489489
}
490+
491+
func testShowFirstLayerWithEmptyBannerSettingsObject() {
492+
let emptyDictionary: NSDictionary = [:]
493+
module.showFirstLayer(emptyDictionary) { result in
494+
XCTAssertNil(self.fakeUsercentrics.showFirstLayerBannerSettings?.firstLayerStyleSettings)
495+
} reject: { _, _, _ in
496+
XCTFail("Should not go here")
497+
}
498+
}
490499

491-
func testShowSecondLayer() {
500+
func testShowSecondLayerWithBannerSettingsObject() {
492501
let serializedSettings: NSDictionary = [
493502
"secondLayerStyleSettings": ["showCloseButton": true]
494503
]
@@ -498,6 +507,16 @@ class RNUsercentricsModuleTests: XCTestCase {
498507
XCTFail("Should not go here")
499508
}
500509
}
510+
511+
func testShowSecondLayerWithEmptyBannerSettingsObject() {
512+
let emptyDictionary: NSDictionary = [:]
513+
514+
module.showSecondLayer(emptyDictionary) { result in
515+
XCTAssertNil(self.fakeUsercentrics.showSecondLayerBannerSettings?.secondLayerStyleSettings)
516+
} reject: { _, _, _ in
517+
XCTFail("Should not go here")
518+
}
519+
}
501520

502521
func testTrack() {
503522
module.track(1)

0 commit comments

Comments
 (0)