package com.craigvg.lichun_android.domain.models import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test class MessageEventTest { private fun event( energyCost: Int? = null, moneyCost: Double? = null, diamondCost: Int? = null, affinityChange: Int? = null ) = MessageEvent( id = "test", message = "Test event", type = "message", energyCost = energyCost, moneyCost = moneyCost, diamondCost = diamondCost, affinityChange = affinityChange ) @Test fun `isClaimable true when energyCost is positive`() { assertTrue(event(energyCost = 10).isClaimable) } @Test fun `isClaimable true when moneyCost is positive`() { assertTrue(event(moneyCost = 50.0).isClaimable) } @Test fun `isClaimable true when diamondCost is positive`() { assertTrue(event(diamondCost = 5).isClaimable) } @Test fun `isClaimable true when affinityChange is positive`() { assertTrue(event(affinityChange = 10).isClaimable) } @Test fun `isClaimable false when all null`() { assertFalse(event().isClaimable) } @Test fun `isClaimable false when all zero`() { assertFalse(event(energyCost = 0, moneyCost = 0.0, diamondCost = 0, affinityChange = 0).isClaimable) } @Test fun `isNegative true when energyCost is negative`() { assertTrue(event(energyCost = -10).isNegative) } @Test fun `isNegative true when moneyCost is negative`() { assertTrue(event(moneyCost = -50.0).isNegative) } @Test fun `isNegative false when all positive`() { assertFalse(event(energyCost = 10, moneyCost = 50.0).isNegative) } @Test fun `isNegative false when all null`() { assertFalse(event().isNegative) } @Test fun `claimed event is not claimable`() { val e = event(energyCost = 10).copy(claimed = true) assertFalse(e.isClaimable) } @Test fun `category defaults to NEUTRAL`() { assertEquals(EventCategory.NEUTRAL, event().category) } @Test fun `event with career category`() { val e = event().copy(category = EventCategory.CAREER) assertEquals(EventCategory.CAREER, e.category) } @Test fun `event with negative costs is negative`() { assertTrue(event(diamondCost = -5).isNegative) assertTrue(event(affinityChange = -10).isNegative) } @Test fun `claimedAt is set when copied`() { val now = System.currentTimeMillis() val e = event(energyCost = 10).copy(claimed = true, claimedAt = now) assertTrue(e.claimed) assertEquals(now, e.claimedAt) } }