Add caldav subscription test

pull/1381/head
Alex Baker 5 years ago
parent 11fdf0f825
commit e2f253da98

@ -5,43 +5,24 @@ import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Assert.* import org.junit.Assert.*
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.R
import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao
import org.tasks.data.TaskDao
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.ETAG import org.tasks.makers.CaldavTaskMaker.ETAG
import org.tasks.makers.CaldavTaskMaker.OBJECT import org.tasks.makers.CaldavTaskMaker.OBJECT
import org.tasks.makers.CaldavTaskMaker.newCaldavTask import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.preferences.Preferences
import org.tasks.security.KeyStoreEncryption
import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class CaldavSynchronizerTest : InjectingTestCase() { class CaldavSynchronizerTest : CaldavTest() {
@Inject lateinit var synchronizer: CaldavSynchronizer
@Inject lateinit var encryption: KeyStoreEncryption
@Inject lateinit var preferences: Preferences
@Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDao: TaskDao
private val server = MockWebServer()
lateinit var account: CaldavAccount
@Before @Before
override fun setUp() = runBlocking { override fun setUp() = runBlocking {
super.setUp() super.setUp()
preferences.setBoolean(R.string.p_debug_pro, true)
server.start()
account = CaldavAccount().apply { account = CaldavAccount().apply {
uuid = UUIDHelper.newUUID() uuid = UUIDHelper.newUUID()
username = "username" username = "username"
@ -51,9 +32,6 @@ class CaldavSynchronizerTest : InjectingTestCase() {
} }
} }
@After
fun after() = server.shutdown()
@Test @Test
fun setMessageOnError() = runBlocking { fun setMessageOnError() = runBlocking {
enqueueFailure(500) enqueueFailure(500)
@ -110,18 +88,6 @@ class CaldavSynchronizerTest : InjectingTestCase() {
assertEquals("Test task", taskDao.fetch(caldavTask.task)!!.title) assertEquals("Test task", taskDao.fetch(caldavTask.task)!!.title)
} }
private fun enqueue(vararg responses: String) = responses.forEach {
server.enqueue(
MockResponse()
.setResponseCode(207)
.setHeader("Content-Type", "text/xml; charset=\"utf-8\"")
.setBody(it)
)
}
private fun enqueueFailure(code: Int = 500) =
server.enqueue(MockResponse().setResponseCode(code))
companion object { companion object {
private val OC_SHARE_PROPFIND = """ private val OC_SHARE_PROPFIND = """
<?xml version="1.0"?> <?xml version="1.0"?>

@ -0,0 +1,47 @@
package org.tasks.caldav
import com.todoroo.astrid.dao.TaskDao
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Before
import org.tasks.R
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavDao
import org.tasks.injection.InjectingTestCase
import org.tasks.preferences.Preferences
import org.tasks.security.KeyStoreEncryption
import javax.inject.Inject
abstract class CaldavTest : InjectingTestCase() {
@Inject lateinit var synchronizer: CaldavSynchronizer
@Inject lateinit var encryption: KeyStoreEncryption
@Inject lateinit var preferences: Preferences
@Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDao: TaskDao
protected val server = MockWebServer()
protected lateinit var account: CaldavAccount
@Before
override fun setUp() {
super.setUp()
preferences.setBoolean(R.string.p_debug_pro, true)
server.start()
}
@After
fun after() = server.shutdown()
protected fun enqueue(vararg responses: String) = responses.forEach {
server.enqueue(
MockResponse()
.setResponseCode(207)
.setHeader("Content-Type", "text/xml; charset=\"utf-8\"")
.setBody(it)
)
}
protected fun enqueueFailure(code: Int = 500) =
server.enqueue(MockResponse().setResponseCode(code))
}

@ -0,0 +1,31 @@
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.R
import org.tasks.data.CaldavAccount
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavSubscriptionTest : CaldavTest() {
@Test
fun cantSyncWithoutPro() = runBlocking {
preferences.setBoolean(R.string.p_debug_pro, false)
account = CaldavAccount().apply {
uuid = UUIDHelper.newUUID()
id = caldavDao.insert(this)
}
synchronizer.sync(account)
assertEquals(
context.getString(R.string.requires_pro_subscription),
caldavDao.getAccountByUuid(account.uuid!!)?.error
)
}
}
Loading…
Cancel
Save