diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeItemResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeItemResponse.kt index 7c5d86f608..1d462e11e6 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeItemResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeItemResponse.kt @@ -78,9 +78,10 @@ data class ExchangeItemResponse( @Json(name = "createdAt") val createdAt: String, - /** Transaction last-update timestamp in ISO-8601 format */ - @Json(name = "updatedAt") - val updatedAt: String, + // todo txHistory backend does not send `updatedAt` yet — uncomment once it does. + // /** Transaction last-update timestamp in ISO-8601 format */ + // @Json(name = "updatedAt") + // val updatedAt: String, /** Pay-in expiration timestamp in ISO-8601 format */ @Json(name = "payTill") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampItemResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampItemResponse.kt index fa5767bf7b..91bf75789c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampItemResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampItemResponse.kt @@ -43,9 +43,10 @@ data class OnrampItemResponse( @Json(name = "createdAt") val createdAt: String, - /** Transaction last-update timestamp in ISO-8601 format */ - @Json(name = "updatedAt") - val updatedAt: String, + // todo txHistory backend does not send `updatedAt` yet — uncomment once it does. + // /** Transaction last-update timestamp in ISO-8601 format */ + // @Json(name = "updatedAt") + // val updatedAt: String, // endregion // region fromAsset (fiat) info diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/converter/ExpressHistoryConverter.kt b/core/datasource/src/main/java/com/tangem/datasource/local/converter/ExpressHistoryConverter.kt index edbcb176b1..bab2355a5d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/converter/ExpressHistoryConverter.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/converter/ExpressHistoryConverter.kt @@ -4,6 +4,11 @@ import com.tangem.datasource.api.express.models.response.ExchangeItemResponse import com.tangem.datasource.api.onramp.models.response.OnrampItemResponse import com.tangem.datasource.local.txhistory.db.entity.express.ExpressExchangeEntity import com.tangem.datasource.local.txhistory.db.entity.express.ExpressOnrampEntity +import org.joda.time.DateTime + +// todo txHistory backend does not send `updatedAt` yet — drop this placeholder and map the real +// ExchangeItemResponse.updatedAt / OnrampItemResponse.updatedAt once it does. +private fun updatedAtPlaceholder(): String = DateTime.now().toString() /** * Maps API history items into their persisted [androidx.room.Entity] representations. @@ -30,7 +35,7 @@ fun ExchangeItemResponse.toEntity(): ExpressExchangeEntity? { refundNetwork = refundNetwork, refundContractAddress = refundContractAddress, createdAt = createdAt, - updatedAt = updatedAt, + updatedAt = updatedAtPlaceholder(), payTill = payTill, averageDuration = averageDuration, from = ExpressExchangeEntity.AssetEmbedded( @@ -61,7 +66,7 @@ fun OnrampItemResponse.toEntity(): ExpressOnrampEntity { externalTxUrl = externalTxUrl, payoutHash = payoutHash, createdAt = createdAt, - updatedAt = updatedAt, + updatedAt = updatedAtPlaceholder(), fromCurrencyCode = fromCurrencyCode, fromAmount = fromAmount, fromPrecision = fromPrecision, diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/local/converter/ExpressHistoryConverterTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/local/converter/ExpressHistoryConverterTest.kt index d866cabf09..9b605bde93 100644 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/local/converter/ExpressHistoryConverterTest.kt +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/local/converter/ExpressHistoryConverterTest.kt @@ -34,7 +34,8 @@ internal class ExpressHistoryConverterTest { Truth.assertThat(entity.refundNetwork).isEqualTo(item.refundNetwork) Truth.assertThat(entity.refundContractAddress).isEqualTo(item.refundContractAddress) Truth.assertThat(entity.createdAt).isEqualTo(item.createdAt) - Truth.assertThat(entity.updatedAt).isEqualTo(item.updatedAt) + // todo txHistory uncomment + // Truth.assertThat(entity.updatedAt).isEqualTo(item.updatedAt) Truth.assertThat(entity.payTill).isEqualTo(item.payTill) Truth.assertThat(entity.averageDuration).isEqualTo(item.averageDuration) } @@ -232,7 +233,8 @@ internal class ExpressHistoryConverterTest { refundNetwork = refundNetwork, refundContractAddress = refundContractAddress, createdAt = "2026-06-01T00:00:00Z", - updatedAt = "2026-06-01T00:05:00Z", + // todo txHistory uncomment + // updatedAt = "2026-06-01T00:05:00Z", payTill = payTill, averageDuration = averageDuration, fromContractAddress = "0xfromContract", @@ -264,7 +266,8 @@ internal class ExpressHistoryConverterTest { externalTxUrl = externalTxUrl, payoutHash = payoutHash, createdAt = "2026-06-01T00:00:00Z", - updatedAt = "2026-06-01T00:05:00Z", + // todo txHistory uncomment + // updatedAt = "2026-06-01T00:05:00Z", fromCurrencyCode = "USD", fromAmount = "100.0", fromPrecision = 2, diff --git a/data/txhistory/src/test/kotlin/com/tangem/data/txhistory/repository/DefaultExpressHistoryRepositoryTest.kt b/data/txhistory/src/test/kotlin/com/tangem/data/txhistory/repository/DefaultExpressHistoryRepositoryTest.kt index 3b846403b3..f42ece4709 100644 --- a/data/txhistory/src/test/kotlin/com/tangem/data/txhistory/repository/DefaultExpressHistoryRepositoryTest.kt +++ b/data/txhistory/src/test/kotlin/com/tangem/data/txhistory/repository/DefaultExpressHistoryRepositoryTest.kt @@ -36,6 +36,7 @@ import io.mockk.slot import io.mockk.unmockkStatic import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest +import org.joda.time.DateTimeUtils import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -67,6 +68,9 @@ internal class DefaultExpressHistoryRepositoryTest { @BeforeEach fun setup() { clearMocks(exchangeApi, onrampApi, expressHistoryDao, historyIndexDao, expressSyncStateDao, tokenInfoRepository) + // todo txHistory the persisted `updatedAt` is a `DateTime.now()` placeholder until the backend sends it; + // freeze the clock so the entity built inside the repository matches the one rebuilt in verify blocks. + DateTimeUtils.setCurrentMillisFixed(FIXED_NOW_MILLIS) // Run the withTransaction block inline so the DAO writes inside it actually happen and can be verified. mockkStatic("androidx.room.RoomDatabaseKt") val block = slot Any?>() @@ -75,6 +79,7 @@ internal class DefaultExpressHistoryRepositoryTest { @AfterEach fun tearDown() { + DateTimeUtils.setCurrentMillisSystem() unmockkStatic("androidx.room.RoomDatabaseKt") } @@ -333,7 +338,8 @@ internal class DefaultExpressHistoryRepositoryTest { refundNetwork = null, refundContractAddress = null, createdAt = "2026-06-01T00:00:00Z", - updatedAt = "2026-06-01T00:00:00Z", + // todo txHistory uncomment + // updatedAt = "2026-06-01T00:00:00Z", payTill = null, averageDuration = null, fromContractAddress = "0xfromContract", @@ -357,7 +363,8 @@ internal class DefaultExpressHistoryRepositoryTest { externalTxUrl = null, payoutHash = "payout-hash", createdAt = "2026-06-01T00:00:00Z", - updatedAt = "2026-06-01T00:00:00Z", + // todo txHistory uncomment + // updatedAt = "2026-06-01T00:00:00Z", fromCurrencyCode = "USD", fromAmount = "100.0", fromPrecision = 2, @@ -377,5 +384,8 @@ internal class DefaultExpressHistoryRepositoryTest { const val AFTER_CURSOR = "after-cursor" const val DELTA_CURSOR = "delta-cursor" const val DEFAULT_LIMIT = 100 + + // Fixed instant the Joda clock is pinned to during each test (2026-06-01T00:00:00Z). + const val FIXED_NOW_MILLIS = 1_780_272_000_000L } } \ No newline at end of file