package com.contentsquare.rn.csq.utils import com.contentsquare.api.model.Metadata import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.unmockkAll import io.mockk.verify import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test class MetadataConverterTest { private lateinit var mockWritableMap: WritableMap private lateinit var mockMetadata: Metadata @Before fun setup() { mockkStatic(Arguments::class) mockWritableMap = mockk(relaxed = true) every { Arguments.createMap() } returns mockWritableMap mockMetadata = mockk(relaxed = true) } @After fun tearDown() { unmockkAll() } @Test fun `convertCSQMetadataToMap should convert metadata fields to WritableMap`() { // Given every { mockMetadata.userId } returns "user123" every { mockMetadata.sessionId } returns "session456" every { mockMetadata.identity } returns "identity789" every { mockMetadata.environmentId } returns "env101" every { mockMetadata.projectId } returns "project202" every { mockMetadata.sessionReplayUrl } returns "https://replay.url" // When val result = MetadataConverter.convertCSQMetadataToMap(mockMetadata) // Then verify { Arguments.createMap() } verify { mockWritableMap.putString("userID", "user123") } verify { mockWritableMap.putString("sessionID", "session456") } verify { mockWritableMap.putString("identity", "identity789") } verify { mockWritableMap.putString("environmentID", "env101") } verify { mockWritableMap.putString("projectID", "project202") } verify { mockWritableMap.putString("sessionReplayURL", "https://replay.url") } assertEquals(mockWritableMap, result) } @Test fun `convertCSQMetadataToMap should handle null fields`() { // Given every { mockMetadata.userId } returns null every { mockMetadata.sessionId } returns null every { mockMetadata.identity } returns null every { mockMetadata.environmentId } returns null every { mockMetadata.projectId } returns null every { mockMetadata.sessionReplayUrl } returns null // When val result = MetadataConverter.convertCSQMetadataToMap(mockMetadata) // Then verify { Arguments.createMap() } verify { mockWritableMap.putNull("userID") } verify { mockWritableMap.putNull("sessionID") } verify { mockWritableMap.putNull("identity") } verify { mockWritableMap.putNull("environmentID") } verify { mockWritableMap.putNull("projectID") } verify { mockWritableMap.putNull("sessionReplayURL") } assertEquals(mockWritableMap, result) } @Test fun `convertCSQMetadataToMap should handle exceptions gracefully`() { // Given every { mockMetadata.userId } throws RuntimeException("Test exception") // When val result = MetadataConverter.convertCSQMetadataToMap(mockMetadata) // Then verify { Arguments.createMap() } verify { mockWritableMap.putNull("userID") } verify { mockWritableMap.putNull("sessionID") } verify { mockWritableMap.putNull("identity") } verify { mockWritableMap.putNull("environmentID") } verify { mockWritableMap.putNull("projectID") } verify { mockWritableMap.putNull("sessionReplayURL") } assertEquals(mockWritableMap, result) } }