|  | @@ -6,8 +6,10 @@ import org.junit.jupiter.api.Test
 | 
	
		
			
				|  |  |  import org.junit.jupiter.api.parallel.Execution
 | 
	
		
			
				|  |  |  import org.junit.jupiter.api.parallel.ExecutionMode
 | 
	
		
			
				|  |  |  import tachiyomi.domain.chapter.model.Chapter
 | 
	
		
			
				|  |  | -import java.time.Duration
 | 
	
		
			
				|  |  |  import java.time.ZonedDateTime
 | 
	
		
			
				|  |  | +import kotlin.time.Duration
 | 
	
		
			
				|  |  | +import kotlin.time.Duration.Companion.hours
 | 
	
		
			
				|  |  | +import kotlin.time.toJavaDuration
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Execution(ExecutionMode.CONCURRENT)
 | 
	
		
			
				|  |  |  class SetFetchIntervalTest {
 | 
	
	
		
			
				|  | @@ -22,49 +24,34 @@ class SetFetchIntervalTest {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns default of 7 days when less than 3 distinct days`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..1).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(10)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..2).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, 10.hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 7
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns 7 when 5 chapters in 1 day`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(10)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, 10.hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 7
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns 7 when 7 chapters in 48 hours, 2 day`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..2).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(24L)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(48L)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..2).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, 24.hours)
 | 
	
		
			
				|  |  | +        } + (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, 48.hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 7
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns default of 1 day when interval less than 1`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(15L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (15 * it).hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 1
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -72,61 +59,46 @@ class SetFetchIntervalTest {
 | 
	
		
			
				|  |  |      // Normal interval calculation
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns 1 when 5 chapters in 120 hours, 5 days`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(24L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (24 * it).hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 1
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns 2 when 5 chapters in 240 hours, 10 days`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(48L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (48 * it).hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 2
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns floored value when interval is decimal`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(25L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (25 * it).hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 1
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns 1 when 5 chapters in 215 hours, 5 days`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(43L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (43 * it).hours)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 1
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Test
 | 
	
		
			
				|  |  |      fun `calculateInterval returns interval based on fetch time if upload time not available`() {
 | 
	
		
			
				|  |  | -        val chapters = mutableListOf<Chapter>()
 | 
	
		
			
				|  |  | -        (1..5).forEach {
 | 
	
		
			
				|  |  | -            val duration = Duration.ofHours(25L * it)
 | 
	
		
			
				|  |  | -            val newChapter = chapterAddTime(chapter, duration).copy(dateUpload = 0L)
 | 
	
		
			
				|  |  | -            chapters.add(newChapter)
 | 
	
		
			
				|  |  | +        val chapters = (1..5).map {
 | 
	
		
			
				|  |  | +            chapterWithTime(chapter, (25 * it).hours).copy(dateUpload = 0L)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          setFetchInterval.calculateInterval(chapters, testTime) shouldBe 1
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private fun chapterAddTime(chapter: Chapter, duration: Duration): Chapter {
 | 
	
		
			
				|  |  | -        val newTime = testTime.plus(duration).toEpochSecond() * 1000
 | 
	
		
			
				|  |  | +    private fun chapterWithTime(chapter: Chapter, duration: Duration): Chapter {
 | 
	
		
			
				|  |  | +        val newTime = testTime.plus(duration.toJavaDuration()).toEpochSecond() * 1000
 | 
	
		
			
				|  |  |          return chapter.copy(dateFetch = newTime, dateUpload = newTime)
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |