package com.fireworksdk.bridge.models import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test class FWTrackPurchaseMapperTest { @Test fun `toProductItems returns null for null products so line_items is omitted`() { assertNull(FWTrackPurchaseMapper.toProductItems(null)) } @Test fun `toProductItems maps sku and productName`() { val items = FWTrackPurchaseMapper.toProductItems( listOf( FWTrackPurchaseProduct( extProductId = "test_product_id", price = 10.25, quantity = 1, productName = "Test product", sku = "test_sku", ) ) )!! assertEquals(1, items.size) assertEquals("test_product_id", items[0].productId) assertEquals(10.25, items[0].price, 0.0) assertEquals(1, items[0].quantity) assertEquals("Test product", items[0].productName) assertEquals("test_sku", items[0].sku) } @Test fun `toProductItems falls back to sku when extProductId is missing`() { val items = FWTrackPurchaseMapper.toProductItems( listOf( FWTrackPurchaseProduct( price = 3.625, quantity = 2, sku = "test_sku", ) ) )!! assertEquals("test_sku", items[0].productId) assertEquals("test_sku", items[0].sku) assertNull(items[0].productName) } @Test fun `toProductItems maps multiple legacy products without sku`() { val items = FWTrackPurchaseMapper.toProductItems( listOf( FWTrackPurchaseProduct(extProductId = "product_1", price = 1.0, quantity = 1), FWTrackPurchaseProduct(extProductId = "product_2", price = 2.0, quantity = 2), ) )!! assertEquals(2, items.size) assertEquals("product_1", items[0].productId) assertNull(items[0].sku) assertEquals("product_2", items[1].productId) assertNull(items[1].sku) } @Test fun `toProductItems applies defaults for missing price and quantity`() { val items = FWTrackPurchaseMapper.toProductItems( listOf(FWTrackPurchaseProduct(extProductId = "product_1")) )!! assertEquals(0.0, items[0].price, 0.0) assertEquals(0, items[0].quantity) } }