Sync start time one second before due time

pull/1348/head
Alex Baker 5 years ago
parent 9ae31d5949
commit 385aa08a2d

@ -1,6 +1,7 @@
package org.tasks.opentasks
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
@ -51,7 +52,7 @@ class OpenTasksDueDateTests : OpenTasksTest() {
assertEquals(
1612137600000,
openTaskDao.getTask(listId.toLong(), "1234")?.task?.due?.date?.time
openTaskDao.getTask(listId, "1234")?.task?.due?.date?.time
)
}
@ -87,7 +88,7 @@ class OpenTasksDueDateTests : OpenTasksTest() {
assertEquals(
1612137600000,
openTaskDao.getTask(listId.toLong(), "1234")?.task?.due?.date?.time
openTaskDao.getTask(listId, "1234")?.task?.due?.date?.time
)
}
@ -123,10 +124,60 @@ class OpenTasksDueDateTests : OpenTasksTest() {
assertEquals(
1612137600000,
openTaskDao.getTask(listId.toLong(), "1234")?.task?.due?.date?.time
openTaskDao.getTask(listId, "1234")?.task?.due?.date?.time
)
}
@Test
fun startTimeEqualsDueTime() = runBlocking {
val (listId, list) = openTaskDao.insertList()
val task = newTask(
with(TaskMaker.HIDE_TYPE, Task.HIDE_UNTIL_DUE_TIME),
with(TaskMaker.DUE_TIME, DateTime(2021, 2, 1, 16, 0))
)
taskDao.createNew(task)
caldavDao.insert(newCaldavTask(
with(CaldavTaskMaker.CALENDAR, list.uuid),
with(CaldavTaskMaker.REMOTE_ID, "1234"),
with(CaldavTaskMaker.TASK, task.id)
))
synchronizer.sync()
assertEquals(
1612216800000,
openTaskDao.getTask(listId, "1234")?.task?.dtStart?.date?.time
)
assertEquals(
1612216801000,
openTaskDao.getTask(listId, "1234")?.task?.due?.date?.time
)
}
@Test
fun startTimeEqualDueTime() = runBlocking {
val (_, list) = withVtodo(START_TIME_DUE_TIME)
synchronizer.sync()
val caldavTask = caldavDao.getTaskByRemoteId(list.uuid!!, "2009955511573185442")
val task = taskDao.fetch(caldavTask!!.task)!!
assertEquals(DateTime(2021, 2, 4, 8, 0, 1, 0).millis, task.dueDate)
assertEquals(task.dueDate, task.hideUntil)
}
@Test
fun startTimeEqualDueTimeNoOffset() = runBlocking {
val (_, list) = withVtodo(START_TIME_DUE_TIME_NO_OFFSET)
synchronizer.sync()
val caldavTask = caldavDao.getTaskByRemoteId(list.uuid!!, "2009955511573185442")
val task = taskDao.fetch(caldavTask!!.task)!!
assertEquals(DateTime(2021, 2, 4, 8, 0, 1, 0).millis, task.dueDate)
assertEquals(task.dueDate, task.hideUntil)
}
companion object {
private val BERLIN = TimeZone.getTimeZone("Europe/Berlin")
private val LONDON = TimeZone.getTimeZone("Europe/London")
@ -146,5 +197,39 @@ class OpenTasksDueDateTests : OpenTasksTest() {
END:VTODO
END:VCALENDAR
""".trimIndent()
private val START_TIME_DUE_TIME = """
BEGIN:VCALENDAR
VERSION:2.0
PRODID:+//IDN tasks.org//android-110305//EN
BEGIN:VTODO
DTSTAMP:20210203T164753Z
UID:2009955511573185442
CREATED:20210203T164728Z
LAST-MODIFIED:20210203T164750Z
SUMMARY:Start time
X-APPLE-SORT-ORDER:-5
DUE;TZID=America/Chicago:20210204T080001
DTSTART;TZID=America/Chicago:20210204T080000
END:VTODO
END:VCALENDAR
""".trimIndent()
private val START_TIME_DUE_TIME_NO_OFFSET = """
BEGIN:VCALENDAR
VERSION:2.0
PRODID:+//IDN tasks.org//android-110305//EN
BEGIN:VTODO
DTSTAMP:20210203T164753Z
UID:2009955511573185442
CREATED:20210203T164728Z
LAST-MODIFIED:20210203T164750Z
SUMMARY:Start time
X-APPLE-SORT-ORDER:-5
DUE;TZID=America/Chicago:20210204T080000
DTSTART;TZID=America/Chicago:20210204T080000
END:VTODO
END:VCALENDAR
""".trimIndent()
}
}

@ -30,6 +30,7 @@ import org.tasks.location.GeofenceApi
import org.tasks.preferences.Preferences
import org.tasks.time.DateTime.UTC
import org.tasks.time.DateTimeUtils.startOfDay
import org.tasks.time.DateTimeUtils.startOfMinute
import timber.log.Timber
import java.io.ByteArrayOutputStream
import java.io.StringReader
@ -305,7 +306,11 @@ class iCalendar @Inject constructor(
description = task.notes
val allDay = !task.hasDueTime() && !task.hasStartTime()
val dueDate = if (task.hasDueTime()) task.dueDate else task.dueDate.startOfDay()
var startDate = if (task.hasStartTime()) task.hideUntil else task.hideUntil.startOfDay()
var startDate = if (task.hasStartTime()) {
task.hideUntil.startOfMinute()
} else {
task.hideUntil.startOfDay()
}
due = if (dueDate > 0) {
startDate = min(dueDate, startDate)
Due(if (allDay) getDate(dueDate) else getDateTime(dueDate))

@ -37,5 +37,7 @@ object DateTimeUtils {
@JvmStatic
fun Long.startOfDay(): Long = if (this > 0) toDateTime().startOfDay().millis else 0
fun Long.startOfMinute(): Long = if (this > 0) toDateTime().startOfMinute().millis else 0
fun Long.millisOfDay(): Int = if (this > 0) toDateTime().millisOfDay else 0
}
Loading…
Cancel
Save