Skip to content
This repository has been archived by the owner on Nov 5, 2024. It is now read-only.

fix csv export #3444

Merged
merged 11 commits into from
Sep 1, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ivy.base.time.impl

import com.ivy.base.time.TimeConverter
import java.time.Instant
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.ZoneId

class TestTimeConverter : TimeConverter {
akashs056 marked this conversation as resolved.
Show resolved Hide resolved
private val utcZoneId = ZoneId.of("UTC")

override fun Instant.toLocalDateTime(): LocalDateTime {
return this.atZone(utcZoneId).toLocalDateTime()
}

override fun Instant.toLocalDate(): LocalDate {
return this.atZone(utcZoneId).toLocalDate()
}

override fun LocalDateTime.toUTC(): Instant {
return this.atZone(utcZoneId).toInstant()
}

fun LocalDateTime.toInstant(): Instant {
return this.atZone(utcZoneId).toInstant()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.net.Uri
import arrow.core.Either
import com.ivy.base.model.TransactionType
import com.ivy.base.threading.DispatchersProvider
import com.ivy.base.time.TimeConverter
import com.ivy.data.file.FileSystem
import com.ivy.data.model.Account
import com.ivy.data.model.AccountId
Expand All @@ -23,7 +24,6 @@ import org.apache.commons.text.StringEscapeUtils
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.time.Instant
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.Locale
import javax.inject.Inject
Expand All @@ -34,7 +34,8 @@ class ExportCsvUseCase @Inject constructor(
private val categoryRepository: CategoryRepository,
private val transactionRepository: TransactionRepository,
private val dispatchers: DispatchersProvider,
private val fileSystem: FileSystem
private val fileSystem: FileSystem,
private val timeConverter: TimeConverter
) {

suspend fun exportToFile(
Expand Down Expand Up @@ -74,7 +75,7 @@ class ExportCsvUseCase @Inject constructor(
categoriesMap: Map<CategoryId, Category>,
): String = csvRow {
// Date
csvAppend(date?.csvFormat())
csvAppend(date?.csvFormat(timeConverter))
// Title
csvAppend(title?.value)
// Category
Expand All @@ -100,7 +101,7 @@ class ExportCsvUseCase @Inject constructor(
// Description
csvAppend(description?.value)
// Due Date
csvAppend(dueData?.csvFormat())
csvAppend(dueData?.csvFormat(timeConverter))
// ID
csvAppend(id.value.toString())
}
Expand Down Expand Up @@ -187,8 +188,10 @@ class ExportCsvUseCase @Inject constructor(
id = id
)

private fun Instant.csvFormat(): String {
return this.atZone(ZoneId.of("UTC")).toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
private fun Instant.csvFormat(timeConverter: TimeConverter): String {
return with(timeConverter) {
[email protected]()
}.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
}

private fun Double.csvFormat(): String = DecimalFormat(NUMBER_FORMAT).apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ivy.domain.usecase.csv

import arrow.core.Some
import com.ivy.base.TestDispatchersProvider
import com.ivy.base.time.impl.TestTimeConverter
import com.ivy.data.file.FileSystem
import com.ivy.data.model.Transaction
import com.ivy.data.model.getFromAccount
Expand Down Expand Up @@ -30,6 +31,7 @@ class ExportCsvUseCasePropertyTest {
private val categoryRepository = mockk<CategoryRepository>(relaxed = true)
private val transactionRepository = mockk<TransactionRepository>()
private val fileSystem = mockk<FileSystem>()
private val timeConverter = TestTimeConverter()

private lateinit var useCase: ExportCsvUseCase

Expand All @@ -41,6 +43,7 @@ class ExportCsvUseCasePropertyTest {
transactionRepository = transactionRepository,
dispatchers = TestDispatchersProvider,
fileSystem = fileSystem,
timeConverter = timeConverter,
)
}

Expand Down
Loading