Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 66e71e79 authored by Rafael Tonholo's avatar Rafael Tonholo
Browse files

chore(migration-v90): add extra where clause to ensure the outbox folder or...

chore(migration-v90): add extra where clause to ensure the outbox folder or local folder's won't change
parent 058de773
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -130,7 +130,10 @@ internal class MigrationTo90(
            |UPDATE folders
            |    SET server_id = REPLACE(server_id, '$imapPrefix', '')
            |WHERE
            |    server_id LIKE '$imapPrefix%'
            |    server_id IS NOT NULL
            |    AND server_id LIKE '$imapPrefix%'
            |    AND type <> 'outbox'
            |    AND local_only <> 1
        """.trimMargin()
    }
}
+76 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package com.fsck.k9.storage.migrations
import android.database.sqlite.SQLiteDatabase
import assertk.all
import assertk.assertThat
import assertk.assertions.contains
import assertk.assertions.hasSize
import assertk.assertions.isEqualTo
import com.fsck.k9.mail.AuthType
@@ -187,6 +188,80 @@ class MigrationTo90Test : KoinTest {
            }
    }

    @Test
    fun `given the server return an imap prefix - when folder's is local only - server_id must not be changed`() {
        // Arrange
        val prefix = "INBOX"
        val folderDelimiter = "."
        populateDatabase(serverIdPrefix = prefix, folderPathDelimiter = folderDelimiter)
        val localOnlyServerId = "$prefix${folderDelimiter}Local Only"

        database.createFolder("Local Only", isLocalOnly = true, serverId = localOnlyServerId)

        val imapStore = createImapStoreSpy(
            imapPrefix = prefix,
            folderPathDelimiter = folderDelimiter,
        )
        val incomingServerSettings = createIncomingServerSettings(pathPrefix = prefix, autoDetectNamespace = false)
        val account = createAccount(
            incomingServerSettings = incomingServerSettings,
            folderPathDelimiter = folderDelimiter,
        )
        val migrationHelper = createMigrationsHelper(account)
        val migration = MigrationTo90(
            db = database,
            migrationsHelper = migrationHelper,
            imapStoreFactory = createImapStoreFactory(imapStore),
        )

        // Act
        migration.removeImapPrefixFromFolderServerId()
        val actual = database.readFolders().map { it.serverId }
        testLogger.dumpLogs()

        // Assert
        verify(imapStore, times(1)).fetchImapPrefix()

        assertThat(actual).contains(localOnlyServerId)
    }

    @Test
    fun `given the server return an imap prefix - when folder's is an outbox - server_id must not be changed`() {
        // Arrange
        val prefix = "INBOX"
        val folderDelimiter = "."
        populateDatabase(serverIdPrefix = prefix, folderPathDelimiter = folderDelimiter)
        val outboxFolderServerId = "$prefix${folderDelimiter}Outbox"

        database.createFolder("Outbox", isLocalOnly = true, serverId = outboxFolderServerId, type = "outbox")

        val imapStore = createImapStoreSpy(
            imapPrefix = prefix,
            folderPathDelimiter = folderDelimiter,
        )
        val incomingServerSettings = createIncomingServerSettings(pathPrefix = prefix, autoDetectNamespace = false)
        val account = createAccount(
            incomingServerSettings = incomingServerSettings,
            folderPathDelimiter = folderDelimiter,
        )
        val migrationHelper = createMigrationsHelper(account)
        val migration = MigrationTo90(
            db = database,
            migrationsHelper = migrationHelper,
            imapStoreFactory = createImapStoreFactory(imapStore),
        )

        // Act
        migration.removeImapPrefixFromFolderServerId()
        val actual = database.readFolders().map { it.serverId }
        testLogger.dumpLogs()

        // Assert
        verify(imapStore, times(1)).fetchImapPrefix()

        assertThat(actual).contains(outboxFolderServerId)
    }

    @Test
    fun `given a non-imap account - when running the migration - server_id must keep the same value`() {
        // Arrange
@@ -403,6 +478,7 @@ class MigrationTo90Test : KoinTest {
            database.createFolder(
                name = folderName,
                serverId = serverIdPrefix?.let { prefix -> "$prefix$folderPathDelimiter$folderName" } ?: folderName,
                isLocalOnly = false,
            )
        }
    }