From 05028004b3bca5c9a1fb1ab398874900a898270e Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 11 Jan 2019 16:45:50 -0600 Subject: [PATCH] Add Synology Calendar tests --- .../assets/synology/complete_no_due_date.txt | 19 +++ .../assets/synology/complete_with_date.txt | 21 ++++ .../synology/complete_with_date_time.txt | 115 ++++++++++++++++++ .../astrid/reminders/ReminderServiceTest.java | 51 ++++---- .../astrid/service/TitleParserTest.java | 3 + .../java/org/tasks/caldav/SynologyTests.java | 44 +++++++ .../tasks/injection/InjectingTestCase.java | 4 + .../org/tasks/jobs/BackupServiceTests.java | 4 +- .../org/tasks/caldav/CaldavConverter.java | 9 +- 9 files changed, 246 insertions(+), 24 deletions(-) create mode 100644 app/src/androidTest/assets/synology/complete_no_due_date.txt create mode 100644 app/src/androidTest/assets/synology/complete_with_date.txt create mode 100644 app/src/androidTest/assets/synology/complete_with_date_time.txt create mode 100644 app/src/androidTest/java/org/tasks/caldav/SynologyTests.java diff --git a/app/src/androidTest/assets/synology/complete_no_due_date.txt b/app/src/androidTest/assets/synology/complete_no_due_date.txt new file mode 100644 index 000000000..8a45e94e5 --- /dev/null +++ b/app/src/androidTest/assets/synology/complete_no_due_date.txt @@ -0,0 +1,19 @@ +BEGIN:VCALENDAR +PRODID:-//Synology//EN +VERSION:2.0 +BEGIN:VTODO +CREATED:20190111T085445 +LAST-MOD:20190111T085445 +UID:20190111T085445-ce536afd@172.18.0.1 +DTSTAMP:20190111T085445 +SUMMARY:No date +SEQUENCE:2 +PRIORITY:0 +PERCENT-COMPLETE:0 +STATUS:COMPLETED +DESCRIPTION: +LOCATION: +PERCENT_COMPLETE:100 +TRANSP:TRANSPARENT +END:VTODO +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/synology/complete_with_date.txt b/app/src/androidTest/assets/synology/complete_with_date.txt new file mode 100644 index 000000000..d4d8a435d --- /dev/null +++ b/app/src/androidTest/assets/synology/complete_with_date.txt @@ -0,0 +1,21 @@ +BEGIN:VCALENDAR +PRODID:-//Synology//EN +VERSION:2.0 +BEGIN:VTODO +CREATED:20190111T085501 +LAST-MOD:20190111T085501 +UID:20190111T085501-5f79396d@172.18.0.1 +DTSTAMP:20190111T085501 +SUMMARY:Date +DTSTART;VALUE=DATE:20190112 +DUE;VALUE=DATE:20190112 +SEQUENCE:2 +PRIORITY:0 +PERCENT-COMPLETE:0 +STATUS:COMPLETED +DESCRIPTION: +LOCATION: +PERCENT_COMPLETE:100 +TRANSP:TRANSPARENT +END:VTODO +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/synology/complete_with_date_time.txt b/app/src/androidTest/assets/synology/complete_with_date_time.txt new file mode 100644 index 000000000..b24c62212 --- /dev/null +++ b/app/src/androidTest/assets/synology/complete_with_date_time.txt @@ -0,0 +1,115 @@ +BEGIN:VCALENDAR +PRODID:-//Synology//EN +VERSION:2.0 +BEGIN:VTODO +CREATED:20190111T085521 +LAST-MOD:20190111T085521 +UID:20190111T085521-951a3cf8@172.18.0.1 +DTSTAMP:20190111T085521 +SUMMARY:Date Time +DTSTART;TZID=Europe/Prague:20190112T080000 +DUE;TZID=Europe/Prague:20190112T080000 +SEQUENCE:2 +PRIORITY:0 +PERCENT-COMPLETE:0 +STATUS:COMPLETED +DESCRIPTION: +LOCATION: +PERCENT_COMPLETE:100 +TRANSP:TRANSPARENT +END:VTODO +BEGIN:VTIMEZONE +TZID:Europe/Prague +TZURL:http://tzurl.org/zoneinfo/Europe/Prague +X-LIC-LOCATION:Europe/Prague +LAST-MODIFIED:20160904T031233Z +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+005744 +TZNAME:PMT +DTSTART:18500101T000000 +RDATE:18500101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18911001T000000 +RDATE:18911001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450408T020000 +RDATE:19460506T020000 +RDATE:19470420T020000 +RDATE:19480418T020000 +RDATE:19490409T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T030000 +RDATE:19451118T030000 +RDATE:19461006T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19790101T000000 +RDATE:19790101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java index f59f00409..735329a9a 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java +++ b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.java @@ -1,5 +1,29 @@ package com.todoroo.astrid.reminders; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Task; + +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.tasks.R; +import org.tasks.Snippet; +import org.tasks.injection.InjectingTestCase; +import org.tasks.injection.TestComponent; +import org.tasks.jobs.NotificationQueue; +import org.tasks.jobs.ReminderEntry; +import org.tasks.jobs.WorkManager; +import org.tasks.preferences.Preferences; +import org.tasks.reminders.Random; +import org.tasks.time.DateTime; + +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; + +import androidx.test.runner.AndroidJUnit4; + import static com.natpryce.makeiteasy.MakeItEasy.with; import static com.todoroo.andlib.utility.DateUtilities.ONE_HOUR; import static com.todoroo.andlib.utility.DateUtilities.ONE_WEEK; @@ -24,38 +48,21 @@ import static org.tasks.makers.TaskMaker.REMINDER_LAST; import static org.tasks.makers.TaskMaker.SNOOZE_TIME; import static org.tasks.makers.TaskMaker.newTask; -import androidx.test.runner.AndroidJUnit4; -import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.Task; -import java.util.concurrent.TimeUnit; -import javax.inject.Inject; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InOrder; -import org.tasks.R; -import org.tasks.Snippet; -import org.tasks.injection.InjectingTestCase; -import org.tasks.injection.TestComponent; -import org.tasks.jobs.NotificationQueue; -import org.tasks.jobs.ReminderEntry; -import org.tasks.preferences.Preferences; -import org.tasks.reminders.Random; -import org.tasks.time.DateTime; - @RunWith(AndroidJUnit4.class) public class ReminderServiceTest extends InjectingTestCase { @Inject Preferences preferences; @Inject TaskDao taskDao; + @Inject WorkManager workManager; private ReminderService service; private Random random; private NotificationQueue jobs; - @Before - public void before() { + @Override + public void setUp() { + super.setUp(); + workManager.init(); jobs = mock(NotificationQueue.class); random = mock(Random.class); when(random.nextFloat()).thenReturn(1.0f); diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java index 948e37236..6a45715ae 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java @@ -26,6 +26,7 @@ import org.junit.runner.RunWith; import org.tasks.R; import org.tasks.injection.InjectingTestCase; import org.tasks.injection.TestComponent; +import org.tasks.jobs.WorkManager; import org.tasks.preferences.Preferences; import org.tasks.time.DateTime; @@ -35,10 +36,12 @@ public class TitleParserTest extends InjectingTestCase { @Inject TagService tagService; @Inject Preferences preferences; @Inject TaskCreator taskCreator; + @Inject WorkManager workManager; @Override public void setUp() { super.setUp(); + workManager.init(); preferences.setStringFromInteger(R.string.p_default_urgency_key, 0); } diff --git a/app/src/androidTest/java/org/tasks/caldav/SynologyTests.java b/app/src/androidTest/java/org/tasks/caldav/SynologyTests.java new file mode 100644 index 000000000..683ec70ea --- /dev/null +++ b/app/src/androidTest/java/org/tasks/caldav/SynologyTests.java @@ -0,0 +1,44 @@ +package org.tasks.caldav; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.TimeZone; + +import androidx.test.runner.AndroidJUnit4; + +import static junit.framework.Assert.assertTrue; +import static org.tasks.TestUtilities.vtodo; + +@RunWith(AndroidJUnit4.class) +public class SynologyTests { + + private TimeZone defaultTimeZone = TimeZone.getDefault(); + + @Before + public void before() { + TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago")); + } + + @After + public void after() { + TimeZone.setDefault(defaultTimeZone); + } + + @Test + public void completedWithoutDueDate() { + assertTrue(vtodo("synology/complete_no_due_date.txt").isCompleted()); + } + + @Test + public void completedWithDueDate() { + assertTrue(vtodo("synology/complete_with_date.txt").isCompleted()); + } + + @Test + public void completedWithDateTime() { + assertTrue(vtodo("synology/complete_with_date_time.txt").isCompleted()); + } +} diff --git a/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.java b/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.java index 4cb837cc1..2c58f3d69 100644 --- a/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.java +++ b/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.java @@ -2,6 +2,8 @@ package org.tasks.injection; import org.junit.Before; +import timber.log.Timber; + import static androidx.test.InstrumentationRegistry.getTargetContext; import static org.tasks.TestUtilities.initializeMockito; @@ -9,6 +11,8 @@ public abstract class InjectingTestCase { @Before public void setUp() { + Thread.setDefaultUncaughtExceptionHandler((t, e) -> Timber.e(e)); + initializeMockito(getTargetContext()); TestComponent component = diff --git a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.java b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.java index 71b329415..78347a5f0 100644 --- a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.java +++ b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.java @@ -5,6 +5,8 @@ */ package org.tasks.jobs; +import android.net.Uri; + import static androidx.test.InstrumentationRegistry.getTargetContext; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; @@ -52,7 +54,7 @@ public class BackupServiceTests extends InjectingTestCase { "Could not create temp directory: " + temporaryDirectory.getAbsolutePath()); } - preferences.setString(R.string.p_backup_dir, temporaryDirectory.getAbsolutePath()); + preferences.setUri(R.string.p_backup_dir, Uri.fromFile(temporaryDirectory)); // make a temporary task Task task = new Task(); diff --git a/app/src/main/java/org/tasks/caldav/CaldavConverter.java b/app/src/main/java/org/tasks/caldav/CaldavConverter.java index 5ea723d35..0b5e8ea44 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavConverter.java +++ b/app/src/main/java/org/tasks/caldav/CaldavConverter.java @@ -1,5 +1,6 @@ package org.tasks.caldav; +import static com.todoroo.andlib.utility.DateUtilities.now; import static com.todoroo.astrid.data.Task.URGENCY_SPECIFIC_DAY; import static com.todoroo.astrid.data.Task.URGENCY_SPECIFIC_DAY_TIME; import static org.tasks.date.DateTimeUtils.newDateTime; @@ -29,7 +30,13 @@ public class CaldavConverter { public static void apply(Task local, at.bitfire.ical4android.Task remote) { Completed completedAt = remote.getCompletedAt(); if (completedAt == null) { - local.setCompletionDate(0L); + if (remote.getStatus() == Status.VTODO_COMPLETED) { + if (!local.isCompleted()) { + local.setCompletionDate(now()); + } + } else { + local.setCompletionDate(0L); + } } else { local.setCompletionDate(remote.getCompletedAt().getDate().getTime()); }