From 4e4e9303ae5b7f1708baafeff23ab28b6aebe413 Mon Sep 17 00:00:00 2001 From: grakovne Date: Tue, 26 May 2026 23:23:31 +0300 Subject: [PATCH] Optional Logging --- .../lissen/logging/LissenLogProviderTest.kt | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 app/src/test/kotlin/org/grakovne/lissen/logging/LissenLogProviderTest.kt diff --git a/app/src/test/kotlin/org/grakovne/lissen/logging/LissenLogProviderTest.kt b/app/src/test/kotlin/org/grakovne/lissen/logging/LissenLogProviderTest.kt new file mode 100644 index 00000000..a28a9f79 --- /dev/null +++ b/app/src/test/kotlin/org/grakovne/lissen/logging/LissenLogProviderTest.kt @@ -0,0 +1,110 @@ +package org.grakovne.lissen.logging + +import android.content.Context +import io.mockk.every +import io.mockk.justRun +import io.mockk.mockk +import io.mockk.verify +import net.lingala.zip4j.ZipFile +import org.grakovne.lissen.persistence.preferences.LissenSharedPreferences +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir +import java.io.File + +class LissenLogProviderTest { + @TempDir + lateinit var tempDir: File + + private lateinit var context: Context + private lateinit var preferences: LissenSharedPreferences + private lateinit var provider: LissenLogProvider + + @BeforeEach + fun setUp() { + context = mockk() + preferences = mockk() + every { context.cacheDir } returns tempDir + provider = LissenLogProvider(context, preferences) + } + + @Test + fun `archiveLogFile returns null when log file does not exist`() { + assertNull(provider.archiveLogFile()) + } + + @Test + fun `archiveLogFile returns null when log file is empty`() { + provider.profileLogFile().createNewFile() + + assertNull(provider.archiveLogFile()) + } + + @Test + fun `archiveLogFile returns zip file when log file has content`() { + provider.profileLogFile().writeText("some log content") + + val archive = provider.archiveLogFile() + + assertNotNull(archive) + assertTrue(archive!!.exists()) + assertTrue(archive.length() > 0) + } + + @Test + fun `archiveLogFile produces valid zip containing the log file`() { + val logContent = "line1\nline2\nline3" + provider.profileLogFile().writeText(logContent) + + val archive = provider.archiveLogFile()!! + + val zip = ZipFile(archive) + assertTrue(zip.isValidZipFile) + + val entry = zip.fileHeaders.single() + assertEquals(provider.profileLogFile().name, entry.fileName) + } + + @Test + fun `archiveLogFile overwrites previous archive on repeated calls`() { + provider.profileLogFile().writeText("first run") + val first = provider.archiveLogFile()!! + + provider.profileLogFile().writeText("second run with more content to make it larger") + val second = provider.archiveLogFile()!! + + assertEquals(first.absolutePath, second.absolutePath) + } + + @Test + fun `disableLogging saves preference as false`() { + provider.profileLogFile().writeText("logs") + justRun { preferences.saveActivityLoggingEnabled(false) } + + provider.disableLogging() + + verify { preferences.saveActivityLoggingEnabled(false) } + } + + @Test + fun `disableLogging is safe when log file does not exist`() { + justRun { preferences.saveActivityLoggingEnabled(false) } + + provider.disableLogging() + + assertTrue(!provider.profileLogFile().exists()) + } + + @Test + fun `enableLogging saves preference as true`() { + justRun { preferences.saveActivityLoggingEnabled(true) } + + provider.enableLogging() + + verify { preferences.saveActivityLoggingEnabled(true) } + } +}