Skip to content

Commit fe03807

Browse files
authored
Fix crash when show close button is null (#95)
* Fix crash when show close button is null * Add test for the bug * Fix test
1 parent ef556fb commit fe03807

File tree

2 files changed

+93
-33
lines changed

2 files changed

+93
-33
lines changed

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

Lines changed: 92 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,18 @@ class RNUsercentricsModuleTest {
105105
fun testConfigure() {
106106
val usercentricsProxy = FakeUsercentricsProxy()
107107
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
108-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
108+
val module =
109+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
109110

110111
module.configure(usercentricsOptions)
111112

112113
assertEquals(1, usercentricsProxy.initializeCount)
113114
assertEquals("AAAAA", usercentricsProxy.initializeOptionsArgument?.settingsId)
114115
assertEquals("BBBBB", usercentricsProxy.initializeOptionsArgument?.ruleSetId)
115-
assertEquals(UsercentricsLoggerLevel.NONE, usercentricsProxy.initializeOptionsArgument?.loggerLevel)
116+
assertEquals(
117+
UsercentricsLoggerLevel.NONE,
118+
usercentricsProxy.initializeOptionsArgument?.loggerLevel
119+
)
116120
assertEquals(1000L, usercentricsProxy.initializeOptionsArgument?.timeoutMillis)
117121
assertEquals("1.2.3", usercentricsProxy.initializeOptionsArgument?.version)
118122
assertEquals(NetworkMode.EU, usercentricsProxy.initializeOptionsArgument?.networkMode)
@@ -122,7 +126,8 @@ class RNUsercentricsModuleTest {
122126
fun testConfigureWithWrongValues() {
123127
val usercentricsProxy = FakeUsercentricsProxy()
124128
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
125-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
129+
val module =
130+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
126131

127132
module.configure(JavaOnlyMap())
128133
assertEquals(UsercentricsOptions(), usercentricsProxy.initializeOptionsArgument)
@@ -132,7 +137,8 @@ class RNUsercentricsModuleTest {
132137
fun testIsReady() {
133138
val usercentricsProxy = FakeUsercentricsProxy(isReadyAnswer = usercentricsReadyStatus)
134139
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
135-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
140+
val module =
141+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
136142

137143
val promise = FakePromise()
138144
module.isReady(promise)
@@ -155,7 +161,8 @@ class RNUsercentricsModuleTest {
155161

156162
val usercentricsProxy = FakeUsercentricsProxy(isReadyAnswer = error)
157163
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
158-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
164+
val module =
165+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
159166

160167
val promise = FakePromise()
161168
module.isReady(promise)
@@ -174,7 +181,8 @@ class RNUsercentricsModuleTest {
174181

175182
val usercentricsProxy = FakeUsercentricsProxy(instanceAnswer = usercentricsSDK)
176183
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
177-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
184+
val module =
185+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
178186

179187
val promise = FakePromise()
180188
module.restoreUserSession("abc", promise)
@@ -202,7 +210,8 @@ class RNUsercentricsModuleTest {
202210
}
203211
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
204212
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
205-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
213+
val module =
214+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
206215

207216
val promise = FakePromise()
208217
module.restoreUserSession("abc", promise)
@@ -217,7 +226,8 @@ class RNUsercentricsModuleTest {
217226
every { usercentricsSDK.getControllerId() }.returns("abc")
218227
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
219228
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
220-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
229+
val module =
230+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
221231
val promise = FakePromise()
222232

223233
module.getControllerId(promise)
@@ -232,7 +242,8 @@ class RNUsercentricsModuleTest {
232242
every { usercentricsSDK.getABTestingVariant() }.returns("variantA")
233243
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
234244
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
235-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
245+
val module =
246+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
236247
val promise = FakePromise()
237248

238249
module.getABTestingVariant(promise)
@@ -248,7 +259,8 @@ class RNUsercentricsModuleTest {
248259

249260
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
250261
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
251-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
262+
val module =
263+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
252264

253265
val promise = FakePromise()
254266

@@ -280,7 +292,8 @@ class RNUsercentricsModuleTest {
280292

281293
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
282294
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
283-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
295+
val module =
296+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
284297

285298
val promise = FakePromise()
286299

@@ -318,7 +331,8 @@ class RNUsercentricsModuleTest {
318331

319332
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
320333
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
321-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
334+
val module =
335+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
322336

323337
module.setCMPId(123)
324338

@@ -332,7 +346,8 @@ class RNUsercentricsModuleTest {
332346

333347
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
334348
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
335-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
349+
val module =
350+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
336351

337352
module.setABTestingVariant("variantA")
338353

@@ -348,7 +363,8 @@ class RNUsercentricsModuleTest {
348363

349364
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
350365
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
351-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
366+
val module =
367+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
352368
val promise = FakePromise()
353369

354370
module.getTCFData(promise)
@@ -365,7 +381,8 @@ class RNUsercentricsModuleTest {
365381
every { usercentricsSDK.getUserSessionData() }.returns(GetUserSessionDataMock.fake)
366382
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
367383
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
368-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
384+
val module =
385+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
369386
val promise = FakePromise()
370387

371388
module.getUserSessionData(promise)
@@ -380,7 +397,8 @@ class RNUsercentricsModuleTest {
380397

381398
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
382399
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
383-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
400+
val module =
401+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
384402
val promise = FakePromise()
385403

386404
module.getUSPData(promise)
@@ -399,7 +417,8 @@ class RNUsercentricsModuleTest {
399417
}
400418
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
401419
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
402-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
420+
val module =
421+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
403422
val promise = FakePromise()
404423

405424
module.changeLanguage("abc", promise)
@@ -426,7 +445,8 @@ class RNUsercentricsModuleTest {
426445

427446
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
428447
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
429-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
448+
val module =
449+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
430450
val promise = FakePromise()
431451

432452
module.changeLanguage("abc", promise)
@@ -454,7 +474,8 @@ class RNUsercentricsModuleTest {
454474

455475
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
456476
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
457-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
477+
val module =
478+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
458479

459480
val promise = FakePromise()
460481
module.acceptAllForTCF(0, 0, promise)
@@ -482,7 +503,8 @@ class RNUsercentricsModuleTest {
482503

483504
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
484505
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
485-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
506+
val module =
507+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
486508

487509
val promise = FakePromise()
488510
module.denyAllForTCF(0, 0, promise)
@@ -509,7 +531,8 @@ class RNUsercentricsModuleTest {
509531

510532
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
511533
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
512-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
534+
val module =
535+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
513536

514537
val promise = FakePromise()
515538
module.acceptAll(0, promise)
@@ -530,7 +553,8 @@ class RNUsercentricsModuleTest {
530553

531554
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
532555
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
533-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
556+
val module =
557+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
534558

535559
val promise = FakePromise()
536560
module.denyAll(0, promise)
@@ -552,7 +576,8 @@ class RNUsercentricsModuleTest {
552576

553577
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
554578
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
555-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
579+
val module =
580+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
556581

557582
val promise = FakePromise()
558583
module.saveDecisions(SaveDecisionsMock.callDecisions.serialize(), 0, promise)
@@ -576,7 +601,8 @@ class RNUsercentricsModuleTest {
576601

577602
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
578603
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
579-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
604+
val module =
605+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
580606

581607
val promise = FakePromise()
582608
module.saveDecisionsForTCF(
@@ -603,7 +629,8 @@ class RNUsercentricsModuleTest {
603629

604630
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
605631
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
606-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
632+
val module =
633+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
607634

608635
val promise = FakePromise()
609636
module.saveOptOutForCCPA(
@@ -628,7 +655,8 @@ class RNUsercentricsModuleTest {
628655

629656
val usercentricsProxy = FakeUsercentricsProxy(usercentricsSdk)
630657
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
631-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
658+
val module =
659+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
632660

633661
module.track(UsercentricsAnalyticsEventType.ACCEPT_ALL_FIRST_LAYER.ordinal)
634662

@@ -640,7 +668,8 @@ class RNUsercentricsModuleTest {
640668
fun testResetMethod() {
641669
val usercentricsProxy = FakeUsercentricsProxy()
642670
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
643-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
671+
val module =
672+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
644673

645674
module.reset()
646675

@@ -651,7 +680,8 @@ class RNUsercentricsModuleTest {
651680
fun testShowFirstLayer() {
652681
val usercentricsProxy = FakeUsercentricsProxy()
653682
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
654-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
683+
val module =
684+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
655685
val promise = FakePromise()
656686
module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
657687
promise.await()
@@ -662,7 +692,8 @@ class RNUsercentricsModuleTest {
662692
fun testShowSecondLayer() {
663693
val usercentricsProxy = FakeUsercentricsProxy()
664694
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
665-
val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
695+
val module =
696+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
666697
val promise = FakePromise()
667698
module.showSecondLayer(bannerSettingsMap.toWritableMap(), promise)
668699
promise.await()
@@ -672,7 +703,7 @@ class RNUsercentricsModuleTest {
672703
@Test
673704
fun testShowFirstLayerWithCustomLocalLogo() {
674705
val context = InstrumentationRegistry.getInstrumentation().context
675-
val reactContextProviderMock = object: ReactContextProviderMock() {
706+
val reactContextProviderMock = object : ReactContextProviderMock() {
676707

677708
override fun context(): Context {
678709
return context
@@ -681,7 +712,11 @@ class RNUsercentricsModuleTest {
681712

682713
val usercentricsProxy = FakeUsercentricsProxy()
683714
val reactApplicationContext = mockk<ReactApplicationContext>(relaxed = true)
684-
val module = RNUsercentricsModule(reactApplicationContext, usercentricsProxy, reactContextProviderMock)
715+
val module = RNUsercentricsModule(
716+
reactApplicationContext,
717+
usercentricsProxy,
718+
reactContextProviderMock
719+
)
685720

686721
val bannerSettingsMap = mapOf(
687722
"variant" to null,
@@ -702,7 +737,8 @@ class RNUsercentricsModuleTest {
702737
module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
703738
promise.await()
704739

705-
val someLocalImageDrawableId = context.resources.getIdentifier("some_local_image", "drawable", context.packageName)
740+
val someLocalImageDrawableId =
741+
context.resources.getIdentifier("some_local_image", "drawable", context.packageName)
706742
val expectedBannerSettings = BannerSettings(
707743
firstLayerStyleSettings = FirstLayerStyleSettings(
708744
layout = UsercentricsLayout.Popup(
@@ -716,4 +752,28 @@ class RNUsercentricsModuleTest {
716752
)
717753
assertEquals(expectedBannerSettings, usercentricsProxy.showFirstLayerBannerSettings)
718754
}
755+
756+
@Test
757+
fun testShowFirstLayerWhenShowCloseButtonIsNull() {
758+
val usercentricsProxy = FakeUsercentricsProxy()
759+
val contextMock = mockk<ReactApplicationContext>(relaxed = true)
760+
val module =
761+
RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
762+
val bannerSettingsMap = mapOf(
763+
"secondLayerStyleSettings" to mapOf(
764+
"showCloseButton" to null
765+
),
766+
)
767+
val promise = FakePromise()
768+
module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
769+
promise.await()
770+
771+
val expectedBannerSettings = BannerSettings(
772+
secondLayerStyleSettings = SecondLayerStyleSettings(
773+
showCloseButton = null
774+
)
775+
)
776+
777+
assertEquals(expectedBannerSettings, usercentricsProxy.showFirstLayerBannerSettings)
778+
}
719779
}

android/src/main/java/com/usercentrics/reactnativeusercentrics/extensions/BannerSettingsExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ internal fun String.deserializeButtonType(): ButtonType {
155155
internal fun ReadableMap.secondLayerStyleSettingsFromMap(context: Context): SecondLayerStyleSettings {
156156
return SecondLayerStyleSettings(
157157
buttonLayout = getMap("buttonLayout")?.buttonLayoutFromMap(context),
158-
showCloseButton = getBoolean("showCloseButton"),
158+
showCloseButton = getBooleanOrNull("showCloseButton"),
159159
)
160160
}
161161

0 commit comments

Comments
 (0)