package com.noibu.mobile.reactnative import com.facebook.react.bridge.JavaOnlyMap import com.noibu.mobile.sessionreplay.LogLevel import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Assert.assertThrows import org.junit.Assert.assertTrue import org.junit.Assert.assertFalse import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @Config(sdk = [34]) class ConfigMapperTest { @Test fun `domain only keeps native defaults`() { val config = JavaOnlyMap.of("domain", "shop.example.com").toSessionReplayConfig() assertEquals("shop.example.com", config.domain) assertNull(config.logLevel) assertNull(config.ingestHost) assertTrue(config.trackTouches) assertTrue(config.trackKeyboard) assertTrue(config.trackNetwork) assertTrue(config.trackErrors) assertFalse(config.autoTrackNavigation) } @Test fun `all fields map through`() { val config = JavaOnlyMap.of( "domain", "shop.example.com", "ingestHost", "http://localhost:9000", "logLevel", "debug", "trackTouches", false, "trackKeyboard", false, "trackNetwork", false, "trackErrors", false, "autoTrackNavigation", true, ).toSessionReplayConfig() assertEquals("http://localhost:9000", config.ingestHost) assertEquals(LogLevel.DEBUG, config.logLevel) assertFalse(config.trackTouches) assertFalse(config.trackKeyboard) assertFalse(config.trackNetwork) assertFalse(config.trackErrors) assertTrue(config.autoTrackNavigation) } @Test fun `logLevel is case-insensitive and unknown values fall back to default`() { assertEquals( LogLevel.INFO, JavaOnlyMap.of("domain", "d", "logLevel", "INFO").toSessionReplayConfig().logLevel, ) assertNull( JavaOnlyMap.of("domain", "d", "logLevel", "shouty").toSessionReplayConfig().logLevel, ) } @Test fun `null values are treated as absent`() { val map = JavaOnlyMap.of("domain", "d") map.putNull("trackTouches") map.putNull("ingestHost") val config = map.toSessionReplayConfig() assertTrue(config.trackTouches) assertNull(config.ingestHost) } @Test fun `missing or blank domain throws`() { assertThrows(IllegalArgumentException::class.java) { JavaOnlyMap.of().toSessionReplayConfig() } assertThrows(IllegalArgumentException::class.java) { JavaOnlyMap.of("domain", " ").toSessionReplayConfig() } } }