Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rfc2822 committed Jan 19, 2025
1 parent 0655b09 commit 0f019fa
Showing 1 changed file with 55 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<Long, CookieJar>()

// Query
TODO()
/*DavDocumentsProvider.DavDocumentsActor(context, db, logger, cookieStore, CredentialsStore(context), context.getString(R.string.webdav_authority))
.queryChildren(parent)*/
val actor = davDocumentsActorFactory.create(
cookieStore = mutableMapOf<Long, CookieJar>(),
credentialsStore = credentialsStore
)
actor.queryChildren(parent)

// Assert new children were inserted into db
assertEquals(3, db.webDavDocumentDao().getChildren(parent.id).size)
Expand All @@ -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<Long, CookieJar>()
assertEquals("Cat food storage", db.webDavDocumentDao().get(parent.id)!!.displayName)

// Create a folder
Expand All @@ -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<Long, CookieJar>(),
credentialsStore = credentialsStore
)
actor.queryChildren(parent)

// Assert parent and children were updated in database
assertEquals("Cats WebDAV", db.webDavDocumentDao().get(parent.id)!!.displayName)
Expand All @@ -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<Long, CookieJar>()

// Create a folder
val folderId = db.webDavDocumentDao().insert(
Expand All @@ -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<Long, CookieJar>(),
credentialsStore = credentialsStore
)
actor.queryChildren(parent)

// Assert folder got deleted
assertEquals(null, db.webDavDocumentDao().get(folderId))
Expand All @@ -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<Long, CookieJar>()

// Create two parents
val parent1Id = db.webDavDocumentDao().insert(WebDavDocument(0, mountId, root.id, "parent1", true))
Expand All @@ -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<Long, CookieJar>(),
credentialsStore = credentialsStore
)
actor.queryChildren(parent1)
actor.queryChildren(parent2)

// Assert the two folders names have changed
assertEquals("childOne.txt", db.webDavDocumentDao().getChildren(parent1Id)[0].name)
Expand Down

0 comments on commit 0f019fa

Please sign in to comment.