From 0f019fabcbe564b958bee0e6059b4e7f67c86a9f Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Sun, 19 Jan 2025 19:03:38 +0100 Subject: [PATCH] Fix tests --- .../webdav/DavDocumentsProviderTest.kt | 96 +++++++++++-------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/app/src/androidTest/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProviderTest.kt b/app/src/androidTest/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProviderTest.kt index 2892d15b5..285e07efa 100644 --- a/app/src/androidTest/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProviderTest.kt +++ b/app/src/androidTest/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProviderTest.kt @@ -11,8 +11,11 @@ import at.bitfire.davdroid.db.WebDavDocument import at.bitfire.davdroid.db.WebDavMount import at.bitfire.davdroid.network.HttpClient import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest +import io.mockk.impl.annotations.MockK +import io.mockk.junit4.MockKRule import okhttp3.CookieJar import okhttp3.mockwebserver.Dispatcher import okhttp3.mockwebserver.MockResponse @@ -33,61 +36,70 @@ class DavDocumentsProviderTest { private const val PATH_WEBDAV_ROOT = "/webdav" } - @get:Rule - val hiltRule = HiltAndroidRule(this) - - @Inject - @ApplicationContext + @Inject @ApplicationContext lateinit var context: Context + @BindValue + @MockK(relaxed = true) + lateinit var credentialsStore: CredentialsStore + + @Inject + lateinit var davDocumentsActorFactory: DavDocumentsProvider.DavDocumentsActor.Factory + + @Inject + lateinit var httpClientBuilder: HttpClient.Builder + @Inject lateinit var db: AppDatabase @Inject lateinit var logger: java.util.logging.Logger - @Before - fun setUp() { - hiltRule.inject() - } - + @get:Rule + val hiltRule = HiltAndroidRule(this) - private var mockServer = MockWebServer() + @get:Rule + val mockkRule = MockKRule(this) + private lateinit var server: MockWebServer private lateinit var client: HttpClient - @Before - fun mockServerSetup() { + fun setUp() { + hiltRule.inject() + // Start mock web server - mockServer.dispatcher = TestDispatcher(logger) - mockServer.start() + server = MockWebServer().apply { + dispatcher = TestDispatcher(logger) + start() + } - client = TODO() //HttpClient.Builder(context).build() + client = httpClientBuilder.build() // mock server delivers HTTP without encryption assertTrue(NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted) } @After - fun cleanUp() { - mockServer.shutdown() - db.close() + fun tearDown() { + client.close() + server.shutdown() } @Test fun testDoQueryChildren_insert() { // Create parent and root in database - val id = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", mockServer.url(PATH_WEBDAV_ROOT))) + val id = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", server.url(PATH_WEBDAV_ROOT))) val webDavMount = db.webDavMountDao().getById(id) val parent = db.webDavDocumentDao().getOrCreateRoot(webDavMount) - val cookieStore = mutableMapOf() // Query - TODO() - /*DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority)) - .queryChildren(parent)*/ + val actor = davDocumentsActorFactory.create( + cookieStore = mutableMapOf(), + credentialsStore = credentialsStore + ) + actor.queryChildren(parent) // Assert new children were inserted into db assertEquals(3, db.webDavDocumentDao().getChildren(parent.id).size) @@ -99,10 +111,9 @@ class DavDocumentsProviderTest { @Test fun testDoQueryChildren_update() { // Create parent and root in database - val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", mockServer.url(PATH_WEBDAV_ROOT))) + val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", server.url(PATH_WEBDAV_ROOT))) val webDavMount = db.webDavMountDao().getById(mountId) val parent = db.webDavDocumentDao().getOrCreateRoot(webDavMount) - val cookieStore = mutableMapOf() assertEquals("Cat food storage", db.webDavDocumentDao().get(parent.id)!!.displayName) // Create a folder @@ -120,9 +131,11 @@ class DavDocumentsProviderTest { assertEquals("My Books", db.webDavDocumentDao().get(folderId)!!.displayName) // Query - should update the parent displayname and folder name - TODO() - /*DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority)) - .queryChildren(parent)*/ + val actor = davDocumentsActorFactory.create( + cookieStore = mutableMapOf(), + credentialsStore = credentialsStore + ) + actor.queryChildren(parent) // Assert parent and children were updated in database assertEquals("Cats WebDAV", db.webDavDocumentDao().get(parent.id)!!.displayName) @@ -134,10 +147,9 @@ class DavDocumentsProviderTest { @Test fun testDoQueryChildren_delete() { // Create parent and root in database - val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", mockServer.url(PATH_WEBDAV_ROOT))) + val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", server.url(PATH_WEBDAV_ROOT))) val webDavMount = db.webDavMountDao().getById(mountId) val parent = db.webDavDocumentDao().getOrCreateRoot(webDavMount) - val cookieStore = mutableMapOf() // Create a folder val folderId = db.webDavDocumentDao().insert( @@ -146,9 +158,11 @@ class DavDocumentsProviderTest { assertEquals("deleteme", db.webDavDocumentDao().get(folderId)!!.name) // Query - discovers serverside deletion - TODO() - /*DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority)) - .queryChildren(parent)*/ + val actor = davDocumentsActorFactory.create( + cookieStore = mutableMapOf(), + credentialsStore = credentialsStore + ) + actor.queryChildren(parent) // Assert folder got deleted assertEquals(null, db.webDavDocumentDao().get(folderId)) @@ -157,10 +171,9 @@ class DavDocumentsProviderTest { @Test fun testDoQueryChildren_updateTwoParentsSimultaneous() { // Create root in database - val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", mockServer.url(PATH_WEBDAV_ROOT))) + val mountId = db.webDavMountDao().insert(WebDavMount(0, "Cat food storage", server.url(PATH_WEBDAV_ROOT))) val webDavMount = db.webDavMountDao().getById(mountId) val root = db.webDavDocumentDao().getOrCreateRoot(webDavMount) - val cookieStore = mutableMapOf() // Create two parents val parent1Id = db.webDavDocumentDao().insert(WebDavDocument(0, mountId, root.id, "parent1", true)) @@ -171,11 +184,12 @@ class DavDocumentsProviderTest { assertEquals("parent2", parent2.name) // Query - find children of two nodes simultaneously - TODO() - /*DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority)) - .queryChildren(parent1) - DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority)) - .queryChildren(parent2)*/ + val actor = davDocumentsActorFactory.create( + cookieStore = mutableMapOf(), + credentialsStore = credentialsStore + ) + actor.queryChildren(parent1) + actor.queryChildren(parent2) // Assert the two folders names have changed assertEquals("childOne.txt", db.webDavDocumentDao().getChildren(parent1Id)[0].name)