From a8091ba9135753796afd54f935c417ada4dab6d1 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 24 Feb 2021 16:29:11 -0600 Subject: [PATCH] Add more access level tests --- .../tasks/caldav/CaldavSynchronizerTest.kt | 4 +- .../java/org/tasks/caldav/CaldavTest.kt | 22 +- ...nizationTest.kt => SharingOwncloudTest.kt} | 92 ++++++- .../org/tasks/caldav/SharingSabredavTest.kt | 242 ++++++++++++++++++ 4 files changed, 336 insertions(+), 24 deletions(-) rename app/src/androidTest/java/org/tasks/caldav/{OwnCloudSynchronizationTest.kt => SharingOwncloudTest.kt} (57%) create mode 100644 app/src/androidTest/java/org/tasks/caldav/SharingSabredavTest.kt diff --git a/app/src/androidTest/java/org/tasks/caldav/CaldavSynchronizerTest.kt b/app/src/androidTest/java/org/tasks/caldav/CaldavSynchronizerTest.kt index 1b6bb183c..c9f2b52a4 100644 --- a/app/src/androidTest/java/org/tasks/caldav/CaldavSynchronizerTest.kt +++ b/app/src/androidTest/java/org/tasks/caldav/CaldavSynchronizerTest.kt @@ -34,7 +34,7 @@ class CaldavSynchronizerTest : CaldavTest() { @Test fun setMessageOnError() = runBlocking { - enqueueFailure(500) + enqueue() synchronizer.sync(account) @@ -49,7 +49,6 @@ class CaldavSynchronizerTest : CaldavTest() { url = "${this@CaldavSynchronizerTest.account.url}test-shared/" }) enqueue(OC_SHARE_PROPFIND) - enqueueFailure() synchronizer.sync(account) @@ -70,7 +69,6 @@ class CaldavSynchronizerTest : CaldavTest() { with(CALENDAR, calendar.uuid) )) enqueue(OC_SHARE_PROPFIND, OC_SHARE_REPORT) - enqueueFailure() synchronizer.sync(account) diff --git a/app/src/androidTest/java/org/tasks/caldav/CaldavTest.kt b/app/src/androidTest/java/org/tasks/caldav/CaldavTest.kt index d7c01b6bb..8ecc98831 100644 --- a/app/src/androidTest/java/org/tasks/caldav/CaldavTest.kt +++ b/app/src/androidTest/java/org/tasks/caldav/CaldavTest.kt @@ -33,15 +33,21 @@ abstract class CaldavTest : InjectingTestCase() { @After fun after() = server.shutdown() - protected fun enqueue(vararg responses: String) = responses.forEach { - server.enqueue( + protected fun enqueue(vararg responses: String) { + responses.forEach { + server.enqueue( MockResponse() - .setResponseCode(207) - .setHeader("Content-Type", "text/xml; charset=\"utf-8\"") - .setBody(it) - ) + .setResponseCode(207) + .setHeader("Content-Type", "text/xml; charset=\"utf-8\"") + .setBody(it) + ) + } + server.enqueue(MockResponse().setResponseCode(500)) } - protected fun enqueueFailure(code: Int = 500) = - server.enqueue(MockResponse().setResponseCode(code)) + companion object { + init { + CaldavSynchronizer.registerFactories() + } + } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/caldav/OwnCloudSynchronizationTest.kt b/app/src/androidTest/java/org/tasks/caldav/SharingOwncloudTest.kt similarity index 57% rename from app/src/androidTest/java/org/tasks/caldav/OwnCloudSynchronizationTest.kt rename to app/src/androidTest/java/org/tasks/caldav/SharingOwncloudTest.kt index ccdb7ba4a..6e7d82b44 100644 --- a/app/src/androidTest/java/org/tasks/caldav/OwnCloudSynchronizationTest.kt +++ b/app/src/androidTest/java/org/tasks/caldav/SharingOwncloudTest.kt @@ -5,50 +5,60 @@ import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.UninstallModules import kotlinx.coroutines.runBlocking import org.junit.Assert.* -import org.junit.Before import org.junit.Test import org.tasks.data.CaldavAccount import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar.Companion.ACCESS_OWNER +import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.injection.ProductionModule @UninstallModules(ProductionModule::class) @HiltAndroidTest -class OwnCloudSynchronizationTest : CaldavTest() { +class SharingOwncloudTest : CaldavTest() { - @Before - override fun setUp() = runBlocking { - super.setUp() + private suspend fun setupAccount(user: String) { account = CaldavAccount().apply { uuid = UUIDHelper.newUUID() - username = "username" + username = user password = encryption.encrypt("password") - url = server.url("/remote.php/dav/calendars/user1/").toString() + url = server.url("/remote.php/dav/calendars/$user/").toString() id = caldavDao.insert(this) } } @Test fun calendarOwner() = runBlocking { + setupAccount("user1") val calendar = CaldavCalendar().apply { - account = this@OwnCloudSynchronizationTest.account.uuid + account = this@SharingOwncloudTest.account.uuid ctag = "http://sabre.io/ns/sync/1" - url = "${this@OwnCloudSynchronizationTest.account.url}test-shared/" + url = "${this@SharingOwncloudTest.account.url}test-shared/" caldavDao.insert(this) } enqueue(OC_OWNER) - enqueueFailure() synchronizer.sync(account) assertEquals(ACCESS_OWNER, caldavDao.getCalendarByUuid(calendar.uuid!!)?.access) } - companion object { - init { - CaldavSynchronizer.registerFactories() + @Test + fun readOnly() = runBlocking { + setupAccount("user2") + val calendar = CaldavCalendar().apply { + account = this@SharingOwncloudTest.account.uuid + ctag = "http://sabre.io/ns/sync/2" + url = "${this@SharingOwncloudTest.account.url}test-shared_shared_by_user1/" + caldavDao.insert(this) } + enqueue(OC_READ_ONLY) + + synchronizer.sync(account) + + assertEquals(ACCESS_READ_ONLY, caldavDao.getCalendarByUuid(calendar.uuid!!)?.access) + } + companion object { private val OC_OWNER = """ """.trimIndent() + + val OC_READ_ONLY = """ + + + + /remote.php/dav/calendars/user2/test-shared_shared_by_user1/ + + + + + + + Test shared (user1) + + + + http://sabre.io/ns/sync/2 + #0082c9 + http://sabre.io/ns/sync/2 + principals/users/user1 + + + + + + + + + + + + + + + + + + + + /remote.php/dav/principals/users/user2/ + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 404 Not Found + + + + """.trimIndent() } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/caldav/SharingSabredavTest.kt b/app/src/androidTest/java/org/tasks/caldav/SharingSabredavTest.kt new file mode 100644 index 000000000..2fc87d6ea --- /dev/null +++ b/app/src/androidTest/java/org/tasks/caldav/SharingSabredavTest.kt @@ -0,0 +1,242 @@ +package org.tasks.caldav + +import com.todoroo.astrid.helper.UUIDHelper +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules +import kotlinx.coroutines.runBlocking +import org.junit.Assert.assertEquals +import org.junit.Test +import org.tasks.data.CaldavAccount +import org.tasks.data.CaldavCalendar +import org.tasks.data.CaldavCalendar.Companion.ACCESS_OWNER +import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_WRITE +import org.tasks.injection.ProductionModule + +@UninstallModules(ProductionModule::class) +@HiltAndroidTest +class SharingSabredavTest : CaldavTest() { + + private suspend fun setupAccount(user: String) { + account = CaldavAccount().apply { + uuid = UUIDHelper.newUUID() + username = user + password = encryption.encrypt("password") + url = server.url("/calendars/$user/").toString() + id = caldavDao.insert(this) + } + } + + @Test + fun calendarOwner() = runBlocking { + setupAccount("user1") + val calendar = CaldavCalendar().apply { + account = this@SharingSabredavTest.account.uuid + ctag = "http://sabre.io/ns/sync/1" + url = "${this@SharingSabredavTest.account.url}940468858232147861/" + caldavDao.insert(this) + } + enqueue(SD_OWNER) + + synchronizer.sync(account) + + assertEquals( + ACCESS_OWNER, + caldavDao.getCalendarByUuid(calendar.uuid!!)?.access + ) + } + + @Test + fun calendarSharee() = runBlocking { + setupAccount("user2") + val calendar = CaldavCalendar().apply { + account = this@SharingSabredavTest.account.uuid + ctag = "http://sabre.io/ns/sync/1" + url = "${this@SharingSabredavTest.account.url}c3853d69-cb7a-476c-a23b-30ffd70f110b/" + caldavDao.insert(this) + } + enqueue(SD_SHAREE) + + synchronizer.sync(account) + + assertEquals( + ACCESS_READ_WRITE, + caldavDao.getCalendarByUuid(calendar.uuid!!)?.access + ) + } + + companion object { + private val SD_OWNER = """ + + + + /calendars/user1/940468858232147861/ + + + + + + + Shared + + + + http://sabre.io/ns/sync/1 + http://sabre.io/ns/sync/1 + + + + + + mailto:user@example.com + + Example User + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /principals/user1/ + + + HTTP/1.1 200 OK + + + + + + + + HTTP/1.1 404 Not Found + + + + """.trimIndent() + + private val SD_SHAREE = """ + + + + /calendars/user2/c3853d69-cb7a-476c-a23b-30ffd70f110b/ + + + + + + + + Shared + + + + http://sabre.io/ns/sync/1 + http://sabre.io/ns/sync/1 + + + + + + /principals/user1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /principals/user2/ + + + HTTP/1.1 200 OK + + + + + + + + HTTP/1.1 404 Not Found + + + + """.trimIndent() + } +} \ No newline at end of file