ConfigProductTest.kt (3339B)
1 package net.taler.merchantpos.config 2 3 import net.taler.common.Amount 4 import net.taler.common.CurrencySpecification 5 import org.junit.Assert.assertEquals 6 import org.junit.Assert.assertNull 7 import org.junit.Test 8 9 class ConfigProductTest { 10 11 @Test 12 fun `display description is hidden when same as product name`() { 13 val product = ConfigProduct( 14 productName = "Coffee", 15 description = "Coffee", 16 price = Amount("KUDOS", 2, 0), 17 categories = listOf(1) 18 ) 19 20 assertEquals("Coffee", product.displayName) 21 assertNull(product.displayDescription) 22 } 23 24 @Test 25 fun `display price formats amount`() { 26 val product = ConfigProduct( 27 description = "Coffee", 28 price = Amount("KUDOS", 2, 50000000), 29 categories = listOf(1) 30 ) 31 32 assertEquals("2.50 KUDOS", product.displayPrice) 33 } 34 35 @Test 36 fun `display price uses currency spec symbol`() { 37 val product = ConfigProduct( 38 description = "Coffee", 39 price = Amount("CHF", 2, 50000000).withSpec( 40 CurrencySpecification( 41 name = "Swiss Francs", 42 numFractionalInputDigits = 2, 43 numFractionalNormalDigits = 2, 44 numFractionalTrailingZeroDigits = 2, 45 altUnitNames = mapOf(0 to "Fr."), 46 ) 47 ), 48 categories = listOf(1) 49 ) 50 51 assertEquals("Fr.2.50", product.displayPrice) 52 } 53 54 @Test 55 fun `stockLimit subtracts sold and lost from total stock`() { 56 val product = ConfigProduct( 57 description = "finite_quantity", 58 price = Amount("KUDOS", 10, 0), 59 categories = emptyList(), 60 totalStock = 10, 61 unitTotalStock = "10", 62 totalSold = 0, 63 totalLost = 2, 64 ) 65 66 assertEquals(8, product.stockLimit) 67 } 68 69 @Test 70 fun `stockLimit subtracts unit sold and lost`() { 71 val product = ConfigProduct( 72 description = "test", 73 price = Amount("KUDOS", 5, 0), 74 categories = emptyList(), 75 unitTotalStock = "10", 76 unitTotalSold = "2", 77 unitTotalLost = "3", 78 ) 79 80 assertEquals(5, product.stockLimit) 81 } 82 83 @Test 84 fun `stockLimit with no sold or lost returns total stock`() { 85 val product = ConfigProduct( 86 description = "test", 87 price = Amount("KUDOS", 5, 0), 88 categories = emptyList(), 89 totalStock = 10, 90 ) 91 92 assertEquals(10, product.stockLimit) 93 } 94 95 @Test 96 fun `stockLimit returns null for unlimited stock`() { 97 val product = ConfigProduct( 98 description = "test", 99 price = Amount("KUDOS", 5, 0), 100 categories = emptyList(), 101 totalStock = -1, 102 ) 103 104 assertNull(product.stockLimit) 105 } 106 107 @Test 108 fun `stockLimit clamps to zero when sold and lost exceed stock`() { 109 val product = ConfigProduct( 110 description = "test", 111 price = Amount("KUDOS", 5, 0), 112 categories = emptyList(), 113 totalStock = 5, 114 totalSold = 3, 115 totalLost = 5, 116 ) 117 118 assertEquals(0, product.stockLimit) 119 } 120 }