package dev.castarr.tv.data import org.junit.Assert.assertEquals import org.junit.Test class DuplicateProgrammesTest { private fun p(startMin: Int, stopMin: Int, title: String) = Programme(startMin * 60_000L, stopMin * 60_000L, title) /** The real case: one channel, one episode, three EPG entries. */ @Test fun `repeats a few minutes apart collapse into one`() { val collapsed = XmltvParser.collapseDuplicates( listOf( p(1090, 1140, "The Big Bang Theory"), p(1095, 1145, "The Big Bang Theory"), p(1120, 1170, "The Big Bang Theory"), ) ) assertEquals(1, collapsed.size) assertEquals(1090 * 60_000L, collapsed.first().start) } @Test fun `a genuine repeat later in the evening survives`() { val collapsed = XmltvParser.collapseDuplicates( listOf( p(1090, 1140, "Tagesschau"), p(1300, 1320, "Tagesschau"), ) ) assertEquals(2, collapsed.size) } @Test fun `different programmes at the same time both stay`() { val collapsed = XmltvParser.collapseDuplicates( listOf( p(1090, 1140, "Sportschau"), p(1092, 1142, "Tagesschau"), ) ) assertEquals(2, collapsed.size) } @Test fun `a repeat inside the first slot collapses even beyond the tolerance`() { val collapsed = XmltvParser.collapseDuplicates( listOf( p(1000, 1200, "Fußball: Konferenz"), p(1100, 1300, "Fußball: Konferenz"), ) ) assertEquals(1, collapsed.size) } @Test fun `an unsorted list is handled in time order`() { val collapsed = XmltvParser.collapseDuplicates( listOf( p(1095, 1145, "Two and a Half Men"), p(1090, 1140, "Two and a Half Men"), ) ) assertEquals(1, collapsed.size) assertEquals(1090 * 60_000L, collapsed.first().start) } @Test fun `an empty list stays empty`() { assertEquals(emptyList(), XmltvParser.collapseDuplicates(emptyList())) } }