package dev.castarr.tv.update import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test class UpdateRulesTest { @Test fun `a higher patch level is newer`() { assertTrue(UpdateRules.isNewer("0.11.5", "0.11.4")) } @Test fun `the same version is not newer`() { assertFalse(UpdateRules.isNewer("0.11.5", "0.11.5")) } @Test fun `an older release never offers itself as an update`() { assertFalse(UpdateRules.isNewer("0.11.4", "0.11.5")) } /** Segments are numbers, not text — "10" beats "9". */ @Test fun `double digit segments compare numerically`() { assertTrue(UpdateRules.isNewer("0.11.10", "0.11.9")) assertFalse(UpdateRules.isNewer("0.11.9", "0.11.10")) assertTrue(UpdateRules.isNewer("0.12.0", "0.9.99")) } @Test fun `a missing segment counts as zero`() { assertFalse(UpdateRules.isNewer("0.12", "0.12.0")) assertTrue(UpdateRules.isNewer("0.12.1", "0.12")) } @Test fun `a leading v on the tag makes no difference`() { assertTrue(UpdateRules.isNewer("v0.11.5", "0.11.4")) assertFalse(UpdateRules.isNewer("v0.11.4", "v0.11.4")) } @Test fun `garbage in a tag does not offer an update`() { assertFalse(UpdateRules.isNewer("", "0.11.5")) assertFalse(UpdateRules.isNewer("nightly", "0.11.5")) } @Test fun `a complete download passes`() { assertTrue(UpdateRules.isComplete(actualBytes = 6_515_429, announcedBytes = 6_515_429)) } /** The 0.11.5 bug: a truncated APK left the installer hanging. */ @Test fun `a truncated download is rejected`() { assertFalse(UpdateRules.isComplete(actualBytes = 3_000_000, announcedBytes = 6_515_429)) } @Test fun `an empty download is rejected even when nothing was announced`() { assertFalse(UpdateRules.isComplete(actualBytes = 0, announcedBytes = -1)) assertFalse(UpdateRules.isComplete(actualBytes = 0, announcedBytes = 0)) } @Test fun `an unannounced length cannot be checked, so any content passes`() { assertTrue(UpdateRules.isComplete(actualBytes = 6_515_429, announcedBytes = -1)) } @Test fun `more bytes than announced is rejected too`() { assertFalse(UpdateRules.isComplete(actualBytes = 7_000_000, announcedBytes = 6_515_429)) } }