Implement sending logs to developer (#190)

* Save logs to a file

* Send logs via email

* Enable network logs in release builds

* Remove useless chooser title

* Append to logs file and ignore I/O errors

* Ensure email and password are not logged

* Ensure base URL is never logged

* Add logs disclaimer
This commit is contained in:
Kirill Kamakin
2023-12-10 12:49:03 +01:00
committed by GitHub
parent f6f44c7592
commit 36a72b63de
29 changed files with 500 additions and 157 deletions

View File

@@ -16,6 +16,7 @@ import io.mockk.coVerify
import io.mockk.confirmVerified
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.impl.annotations.RelaxedMockK
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.test.runTest
@@ -33,12 +34,21 @@ class AuthRepoImplTest : BaseUnitTest() {
@MockK(relaxUnitFun = true)
lateinit var signOutHandler: SignOutHandler
@RelaxedMockK
lateinit var credentialsLogRedactor: CredentialsLogRedactor
lateinit var subject: AuthRepo
@Before
override fun setUp() {
super.setUp()
subject = AuthRepoImpl(storage, dataSource, logger, signOutHandler)
subject = AuthRepoImpl(
authStorage = storage,
authDataSource = dataSource,
logger = logger,
signOutHandler = signOutHandler,
credentialsLogRedactor = credentialsLogRedactor,
)
}
@Test

View File

@@ -3,6 +3,7 @@ package gq.kirmanak.mealient.ui.baseurl
import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
import gq.kirmanak.mealient.data.baseurl.impl.BaseUrlLogRedactor
import gq.kirmanak.mealient.data.recipes.RecipeRepo
import gq.kirmanak.mealient.datasource.NetworkError
import gq.kirmanak.mealient.datasource.TrustedCertificatesStore
@@ -13,8 +14,11 @@ import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.coVerifyOrder
import io.mockk.impl.annotations.MockK
import io.mockk.impl.annotations.RelaxedMockK
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.*
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import java.io.IOException
@@ -35,6 +39,9 @@ class BaseURLViewModelTest : BaseUnitTest() {
@MockK(relaxUnitFun = true)
lateinit var trustedCertificatesStore: TrustedCertificatesStore
@RelaxedMockK
lateinit var baseUrlLogRedactor: BaseUrlLogRedactor
lateinit var subject: BaseURLViewModel
@Before
@@ -46,6 +53,7 @@ class BaseURLViewModelTest : BaseUnitTest() {
recipeRepo = recipeRepo,
logger = logger,
trustedCertificatesStore = trustedCertificatesStore,
baseUrlLogRedactor = baseUrlLogRedactor,
)
}