From 4e36ddcd7433efec8c78c94ace54cd8e02a05b1f Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 22 Feb 2021 15:11:33 -0600 Subject: [PATCH] Add OCOwnerPrincipal property --- app/src/main/java/org/tasks/Tasks.kt | 9 ++++-- .../java/org/tasks/caldav/CaldavClient.kt | 4 ++- .../tasks/caldav/property/OCOwnerPrincipal.kt | 19 ++++++++++++ .../tasks/caldav/property/PropertyUtils.kt | 10 ++++++ .../org/tasks/caldav/property/InviteTest.kt | 31 ++++++------------- .../caldav/property/OCOwnerPrincipalTest.kt | 22 +++++++++++++ .../tasks/caldav/property/ShareAccessTest.kt | 2 +- ...{PropertyUtils.kt => TestPropertyUtils.kt} | 10 +++--- 8 files changed, 76 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt create mode 100644 app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt create mode 100644 app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt rename app/src/test/java/org/tasks/caldav/property/{PropertyUtils.kt => TestPropertyUtils.kt} (77%) diff --git a/app/src/main/java/org/tasks/Tasks.kt b/app/src/main/java/org/tasks/Tasks.kt index 4486ce7a4..21fe1e02c 100644 --- a/app/src/main/java/org/tasks/Tasks.kt +++ b/app/src/main/java/org/tasks/Tasks.kt @@ -19,6 +19,8 @@ import kotlinx.coroutines.launch import org.tasks.billing.BillingClient import org.tasks.billing.Inventory import org.tasks.caldav.property.Invite +import org.tasks.caldav.property.OCOwnerPrincipal +import org.tasks.caldav.property.PropertyUtils.register import org.tasks.caldav.property.ShareAccess import org.tasks.files.FileHelper import org.tasks.injection.InjectingJobIntentService @@ -93,10 +95,11 @@ class Tasks : Application(), Configuration.Provider { FileHelper.delete(context, preferences.cacheDirectory) billingClient.get().queryPurchases() appWidgetManager.get().reconfigureWidgets() - PropertyRegistry.register(listOf( + PropertyRegistry.register( ShareAccess.Factory(), - Invite.Factory() - )) + Invite.Factory(), + OCOwnerPrincipal.Factory(), + ) } override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder() diff --git a/app/src/main/java/org/tasks/caldav/CaldavClient.kt b/app/src/main/java/org/tasks/caldav/CaldavClient.kt index 495a974c2..75dc00ee4 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavClient.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavClient.kt @@ -20,6 +20,7 @@ import okhttp3.OkHttpClient import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.caldav.property.Invite +import org.tasks.caldav.property.OCOwnerPrincipal import org.tasks.caldav.property.ShareAccess import org.tasks.data.CaldavAccount import org.tasks.ui.DisplayableException @@ -219,7 +220,8 @@ open class CaldavClient( CalendarColor.NAME, SyncToken.NAME, ShareAccess.NAME, - Invite.NAME + Invite.NAME, + OCOwnerPrincipal.NAME, ) private suspend fun DavResource.propfind( diff --git a/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt b/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt new file mode 100644 index 000000000..5a3c158ab --- /dev/null +++ b/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt @@ -0,0 +1,19 @@ +package org.tasks.caldav.property + +import at.bitfire.dav4jvm.Property +import at.bitfire.dav4jvm.PropertyFactory +import at.bitfire.dav4jvm.XmlUtils +import org.xmlpull.v1.XmlPullParser + +data class OCOwnerPrincipal(val owner: String): Property { + companion object { + @JvmField + val NAME = Property.Name(PropertyUtils.NS_OWNCLOUD, "owner-principal") + } + + class Factory: PropertyFactory { + override fun getName() = NAME + override fun create(parser: XmlPullParser): OCOwnerPrincipal? = + XmlUtils.readText(parser)?.let { OCOwnerPrincipal(it) } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt b/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt new file mode 100644 index 000000000..67e9a837a --- /dev/null +++ b/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt @@ -0,0 +1,10 @@ +package org.tasks.caldav.property + +import at.bitfire.dav4jvm.PropertyFactory +import at.bitfire.dav4jvm.PropertyRegistry + +object PropertyUtils { + const val NS_OWNCLOUD = "http://owncloud.org/ns" + + fun PropertyRegistry.register(vararg factories: PropertyFactory) = register(factories.toList()) +} \ No newline at end of file diff --git a/app/src/test/java/org/tasks/caldav/property/InviteTest.kt b/app/src/test/java/org/tasks/caldav/property/InviteTest.kt index b69b15c33..8cfee4281 100644 --- a/app/src/test/java/org/tasks/caldav/property/InviteTest.kt +++ b/app/src/test/java/org/tasks/caldav/property/InviteTest.kt @@ -4,44 +4,33 @@ import at.bitfire.dav4jvm.PropertyRegistry import org.junit.Assert.* import org.junit.Before import org.junit.Test -import org.tasks.caldav.property.PropertyUtils.toProperty +import org.tasks.caldav.property.PropertyUtils.register import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER +import org.tasks.caldav.property.TestPropertyUtils.toProperty class InviteTest { @Before fun setUp() { - PropertyRegistry.register(listOf( - ShareAccess.Factory(), - Invite.Factory() - )) + PropertyRegistry.register(ShareAccess.Factory(), Invite.Factory()) } @Test - fun emptyInvite() { - val invite: Invite = "".toProperty() + fun emptyInvite() = assertTrue("".toProperty().sharees.isEmpty()) - assertTrue(invite.sharees.isEmpty()) - } + @Test + fun shareeAccess() = assertEquals(ShareAccess(SHARED_OWNER), sharee(SHARE_OWNER).access) @Test - fun shareeAccess() { - assertEquals(ShareAccess(SHARED_OWNER), sharee(SHARE_OWNER).access) - } + fun shareeHref() = assertEquals("/principals/102967489186752069531", sharee(SHARE_OWNER).href) @Test - fun shareeHref() { - assertEquals("/principals/102967489186752069531", sharee(SHARE_OWNER).href) - } + fun inviteStatus() = assertEquals(Sharee.INVITE_ACCEPTED, sharee(SHARE_OWNER).response) @Test - fun inviteStatus() { - assertEquals(Sharee.INVITE_ACCEPTED, sharee(SHARE_OWNER).response) - } + fun noComment() = assertNull(sharee(SHARE_OWNER).comment) @Test - fun noComment() { - assertNull(sharee(SHARE_OWNER).comment) - } + fun noProperties() = assertTrue(sharee(SHARE_OWNER).properties.isEmpty()) private fun sharee(xml: String): Sharee = xml.toProperty().sharees.first() diff --git a/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt b/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt new file mode 100644 index 000000000..e0b3d90a5 --- /dev/null +++ b/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt @@ -0,0 +1,22 @@ +package org.tasks.caldav.property + +import at.bitfire.dav4jvm.PropertyRegistry +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.tasks.caldav.property.TestPropertyUtils.toProperty + +class OCOwnerPrincipalTest { + @Before + fun setUp() { + PropertyRegistry.register(OCOwnerPrincipal.Factory()) + } + + @Test + fun ownerPrincipal() { + val owner = "principals/users/test" + .toProperty("oc='${PropertyUtils.NS_OWNCLOUD}'") + + assertEquals("principals/users/test", owner.owner) + } +} \ No newline at end of file diff --git a/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt b/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt index 6828e4493..ee56c18b8 100644 --- a/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt +++ b/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt @@ -4,7 +4,7 @@ import at.bitfire.dav4jvm.PropertyRegistry import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test -import org.tasks.caldav.property.PropertyUtils.toProperty +import org.tasks.caldav.property.TestPropertyUtils.toProperty import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER class ShareAccessTest { diff --git a/app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt b/app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt similarity index 77% rename from app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt rename to app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt index d798b40f9..ce8375d4e 100644 --- a/app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt +++ b/app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt @@ -4,9 +4,9 @@ import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.XmlUtils import java.io.StringReader -object PropertyUtils { - fun String.toProperty(): T = - toProperties() +object TestPropertyUtils { + fun String.toProperty(ns: String = """d="DAV:""""): T = + toProperties(ns) .apply { if (this.size != 1) throw IllegalStateException("${this.size} items") } .first() .let { @@ -14,12 +14,12 @@ object PropertyUtils { it as T } - fun String.toProperties(): List = + fun String.toProperties(ns: String = """d="DAV:""""): List = XmlUtils.newPullParser() .apply { setInput( StringReader(""" - + ${this@toProperties} """.trimIndent()