Add more access level tests

pull/1381/head
Alex Baker 3 years ago
parent 682038399c
commit a8091ba913

@ -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)

@ -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()
}
}
}

@ -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 = """
<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:cal="urn:ietf:params:xml:ns:caldav"
@ -130,5 +140,61 @@ class OwnCloudSynchronizationTest : CaldavTest() {
</d:response>
</d:multistatus>
""".trimIndent()
val OC_READ_ONLY = """
<?xml version="1.0"?>
<d:multistatus xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/"
xmlns:d="DAV:" xmlns:nc="http://nextcloud.org/ns"
xmlns:oc="http://owncloud.org/ns" xmlns:s="http://sabredav.org/ns">
<d:response>
<d:href>/remote.php/dav/calendars/user2/test-shared_shared_by_user1/</d:href>
<d:propstat>
<d:prop>
<d:resourcetype>
<d:collection />
<cal:calendar />
</d:resourcetype>
<d:displayname>Test shared (user1)</d:displayname>
<cal:supported-calendar-component-set>
<cal:comp name="VTODO" />
</cal:supported-calendar-component-set>
<cs:getctag>http://sabre.io/ns/sync/2</cs:getctag>
<x1:calendar-color xmlns:x1="http://apple.com/ns/ical/">#0082c9</x1:calendar-color>
<d:sync-token>http://sabre.io/ns/sync/2</d:sync-token>
<oc:owner-principal>principals/users/user1</oc:owner-principal>
<oc:invite />
<d:current-user-privilege-set>
<d:privilege>
<d:write-properties />
</d:privilege>
<d:privilege>
<d:read />
</d:privilege>
<d:privilege>
<d:read-acl />
</d:privilege>
<d:privilege>
<d:read-current-user-privilege-set />
</d:privilege>
<d:privilege>
<cal:read-free-busy />
</d:privilege>
</d:current-user-privilege-set>
<d:current-user-principal>
<d:href>/remote.php/dav/principals/users/user2/</d:href>
</d:current-user-principal>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
<d:propstat>
<d:prop>
<d:share-access />
<d:invite />
</d:prop>
<d:status>HTTP/1.1 404 Not Found</d:status>
</d:propstat>
</d:response>
</d:multistatus>
""".trimIndent()
}
}

@ -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 = """
<?xml version="1.0"?>
<d:multistatus xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/"
xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<d:response>
<d:href>/calendars/user1/940468858232147861/</d:href>
<d:propstat>
<d:prop>
<d:resourcetype>
<d:collection />
<cal:calendar />
</d:resourcetype>
<d:displayname>Shared</d:displayname>
<cal:supported-calendar-component-set>
<cal:comp name="VTODO" />
</cal:supported-calendar-component-set>
<cs:getctag>http://sabre.io/ns/sync/1</cs:getctag>
<d:sync-token>http://sabre.io/ns/sync/1</d:sync-token>
<d:share-access>
<d:shared-owner />
</d:share-access>
<d:invite>
<d:sharee>
<d:href>mailto:user@example.com</d:href>
<d:prop>
<d:displayname>Example User</d:displayname>
</d:prop>
<d:share-access>
<d:read-write />
</d:share-access>
<d:invite-accepted />
</d:sharee>
</d:invite>
<d:current-user-privilege-set>
<d:privilege>
<cal:read-free-busy />
</d:privilege>
<d:privilege>
<d:read />
</d:privilege>
<d:privilege>
<d:read-acl />
</d:privilege>
<d:privilege>
<d:read-current-user-privilege-set />
</d:privilege>
<d:privilege>
<d:write-properties />
</d:privilege>
<d:privilege>
<d:write />
</d:privilege>
<d:privilege>
<d:write-content />
</d:privilege>
<d:privilege>
<d:unlock />
</d:privilege>
<d:privilege>
<d:bind />
</d:privilege>
<d:privilege>
<d:unbind />
</d:privilege>
<d:privilege>
<d:write-acl />
</d:privilege>
<d:privilege>
<d:share />
</d:privilege>
</d:current-user-privilege-set>
<d:current-user-principal>
<d:href>/principals/user1/</d:href>
</d:current-user-principal>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
<d:propstat>
<d:prop>
<x1:calendar-color xmlns:x1="http://apple.com/ns/ical/" />
<x2:owner-principal xmlns:x2="http://owncloud.org/ns" />
<x2:invite xmlns:x2="http://owncloud.org/ns" />
</d:prop>
<d:status>HTTP/1.1 404 Not Found</d:status>
</d:propstat>
</d:response>
</d:multistatus>
""".trimIndent()
private val SD_SHAREE = """
<?xml version="1.0"?>
<d:multistatus xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/"
xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<d:response>
<d:href>/calendars/user2/c3853d69-cb7a-476c-a23b-30ffd70f110b/
</d:href>
<d:propstat>
<d:prop>
<d:resourcetype>
<d:collection />
<cal:calendar />
</d:resourcetype>
<d:displayname>Shared</d:displayname>
<cal:supported-calendar-component-set>
<cal:comp name="VTODO" />
</cal:supported-calendar-component-set>
<cs:getctag>http://sabre.io/ns/sync/1</cs:getctag>
<d:sync-token>http://sabre.io/ns/sync/1</d:sync-token>
<d:share-access>
<d:read-write />
</d:share-access>
<d:invite>
<d:sharee>
<d:href>/principals/user1</d:href>
<d:prop />
<d:share-access>
<d:shared-owner />
</d:share-access>
<d:invite-accepted />
</d:sharee>
</d:invite>
<d:current-user-privilege-set>
<d:privilege>
<cal:read-free-busy />
</d:privilege>
<d:privilege>
<d:read />
</d:privilege>
<d:privilege>
<d:read-acl />
</d:privilege>
<d:privilege>
<d:read-current-user-privilege-set />
</d:privilege>
<d:privilege>
<d:write-properties />
</d:privilege>
<d:privilege>
<d:write />
</d:privilege>
<d:privilege>
<d:write-content />
</d:privilege>
<d:privilege>
<d:unlock />
</d:privilege>
<d:privilege>
<d:bind />
</d:privilege>
<d:privilege>
<d:unbind />
</d:privilege>
<d:privilege>
<d:write-acl />
</d:privilege>
</d:current-user-privilege-set>
<d:current-user-principal>
<d:href>/principals/user2/</d:href>
</d:current-user-principal>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
<d:propstat>
<d:prop>
<x1:calendar-color xmlns:x1="http://apple.com/ns/ical/" />
<x2:owner-principal xmlns:x2="http://owncloud.org/ns" />
<x2:invite xmlns:x2="http://owncloud.org/ns" />
</d:prop>
<d:status>HTTP/1.1 404 Not Found</d:status>
</d:propstat>
</d:response>
</d:multistatus>
""".trimIndent()
}
}
Loading…
Cancel
Save