From 5e3da8cc4776d8f4affb2c56855690ddaafe14cd Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 22 Apr 2026 14:26:49 +0300 Subject: [PATCH] Updated on 2026-08-14 --- core/ui/src/main/res/drawable/ic_yield_40.xml | 79 +++++++++++ .../res/drawable/ic_yield_disabling_40.xml | 64 +++++++++ .../YieldSupplyToEarnBlockConverterTest.kt | 124 ++++++++++++++++++ 3 files changed, 267 insertions(+) create mode 100644 core/ui/src/main/res/drawable/ic_yield_40.xml create mode 100644 core/ui/src/main/res/drawable/ic_yield_disabling_40.xml create mode 100644 features/yield-supply/impl/src/test/java/com/tangem/features/yield/supply/impl/main/model/converter/YieldSupplyToEarnBlockConverterTest.kt diff --git a/core/ui/src/main/res/drawable/ic_yield_40.xml b/core/ui/src/main/res/drawable/ic_yield_40.xml new file mode 100644 index 0000000000..24692470e4 --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_yield_40.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/ui/src/main/res/drawable/ic_yield_disabling_40.xml b/core/ui/src/main/res/drawable/ic_yield_disabling_40.xml new file mode 100644 index 0000000000..27fc408f91 --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_yield_disabling_40.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/yield-supply/impl/src/test/java/com/tangem/features/yield/supply/impl/main/model/converter/YieldSupplyToEarnBlockConverterTest.kt b/features/yield-supply/impl/src/test/java/com/tangem/features/yield/supply/impl/main/model/converter/YieldSupplyToEarnBlockConverterTest.kt new file mode 100644 index 0000000000..e50df7c3c7 --- /dev/null +++ b/features/yield-supply/impl/src/test/java/com/tangem/features/yield/supply/impl/main/model/converter/YieldSupplyToEarnBlockConverterTest.kt @@ -0,0 +1,124 @@ +package com.tangem.features.yield.supply.impl.main.model.converter + +import com.google.common.truth.Truth.assertThat +import com.tangem.common.ui.earn.EarnBlockUM +import com.tangem.core.ui.extensions.stringReference +import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM +import org.junit.jupiter.api.Test + +internal class YieldSupplyToEarnBlockConverterTest { + + private val converter = YieldSupplyToEarnBlockConverter() + + @Test + fun `GIVEN Initial WHEN convert THEN null`() { + val result = converter.convert(YieldSupplyUM.Initial) + + assertThat(result).isNull() + } + + @Test + fun `GIVEN Unavailable WHEN convert THEN null`() { + val result = converter.convert(YieldSupplyUM.Unavailable) + + assertThat(result).isNull() + } + + @Test + fun `GIVEN Loading WHEN convert THEN EarnBlockUM Loading`() { + val result = converter.convert(YieldSupplyUM.Loading) + + assertThat(result).isEqualTo(EarnBlockUM.Loading) + } + + @Test + fun `GIVEN Content WHEN convert THEN Content`() { + var clicked = false + val content = YieldSupplyUM.Content( + apy = "5.1", + title = stringReference("Yield Mode"), + subtitle = stringReference("Interest accrues automatically"), + rewardsApy = stringReference("APY 5.1%"), + onClick = { clicked = true }, + showWarningIcon = false, + showInfoIcon = false, + ) + + val result = converter.convert(content) + + assertThat(result).isInstanceOf(EarnBlockUM.Content::class.java) + val earnBlock = result as EarnBlockUM.Content + assertThat(earnBlock.type).isEqualTo(EarnBlockUM.Type.YieldSupply) + assertThat(earnBlock.backgroundUM).isEqualTo(EarnBlockUM.BackgroundUM.Surface) + assertThat(earnBlock.iconUM).isInstanceOf(EarnBlockUM.IconUM.Glowing::class.java) + assertThat(earnBlock.titleUM.tone).isEqualTo(EarnBlockUM.TitleUM.Tone.Primary) + assertThat((earnBlock.subtitleUM as EarnBlockUM.SubtitleUM.Text).tone) + .isEqualTo(EarnBlockUM.SubtitleUM.Tone.Accent) + assertThat(earnBlock.trailingUM).isInstanceOf(EarnBlockUM.TrailingUM.Button::class.java) + val button = earnBlock.trailingUM as EarnBlockUM.TrailingUM.Button + assertThat(button.isEnabled).isTrue() + assertThat(earnBlock.onClick).isNotNull() + earnBlock.onClick?.invoke() + assertThat(clicked).isTrue() + } + + @Test + fun `GIVEN Processing Enter WHEN convert THEN Surface Content`() { + val result = converter.convert(YieldSupplyUM.Processing.Enter) + + assertThat(result).isInstanceOf(EarnBlockUM.Content::class.java) + val earnBlock = result as EarnBlockUM.Content + assertThat(earnBlock.type).isEqualTo(EarnBlockUM.Type.YieldSupply) + assertThat(earnBlock.backgroundUM).isEqualTo(EarnBlockUM.BackgroundUM.Surface) + assertThat(earnBlock.iconUM).isInstanceOf(EarnBlockUM.IconUM.Glowing::class.java) + assertThat(earnBlock.trailingUM).isNull() + } + + @Test + fun `GIVEN Processing Exit WHEN convert THEN Surface Content`() { + val result = converter.convert(YieldSupplyUM.Processing.Exit) + + assertThat(result).isInstanceOf(EarnBlockUM.Content::class.java) + val earnBlock = result as EarnBlockUM.Content + assertThat(earnBlock.type).isEqualTo(EarnBlockUM.Type.YieldSupply) + assertThat(earnBlock.backgroundUM).isEqualTo(EarnBlockUM.BackgroundUM.Surface) + assertThat(earnBlock.iconUM).isInstanceOf(EarnBlockUM.IconUM.Plain::class.java) + assertThat(earnBlock.trailingUM).isNull() + } + + @Test + fun `GIVEN Available WHEN convert THEN Content with expected structure`() { + var clicked = false + val available = YieldSupplyUM.Available( + apy = "5.1", + apyText = stringReference("5.1 % APY"), + title = stringReference("Yield Mode"), + onClick = { clicked = true }, + ) + + val result = converter.convert(available) + + assertThat(result).isInstanceOf(EarnBlockUM.Content::class.java) + val content = result as EarnBlockUM.Content + + assertThat(content.type).isEqualTo(EarnBlockUM.Type.YieldSupply) + assertThat(content.backgroundUM).isEqualTo(EarnBlockUM.BackgroundUM.AccentSoft) + assertThat(content.iconUM).isInstanceOf(EarnBlockUM.IconUM.Glowing::class.java) + + assertThat(content.titleUM.style).isEqualTo(EarnBlockUM.TitleUM.Style.Large) + assertThat(content.titleUM.tone).isEqualTo(EarnBlockUM.TitleUM.Tone.Primary) + + assertThat(content.subtitleUM).isInstanceOf(EarnBlockUM.SubtitleUM.Text::class.java) + val subtitle = content.subtitleUM as EarnBlockUM.SubtitleUM.Text + assertThat(subtitle.style).isEqualTo(EarnBlockUM.SubtitleUM.Style.Small) + assertThat(subtitle.tone).isEqualTo(EarnBlockUM.SubtitleUM.Tone.Accent) + + assertThat(content.trailingUM).isInstanceOf(EarnBlockUM.TrailingUM.Button::class.java) + val button = content.trailingUM as EarnBlockUM.TrailingUM.Button + assertThat(button.isEnabled).isTrue() + + assertThat(content.onClick).isNotNull() + content.onClick?.invoke() + assertThat(clicked).isTrue() + } +} \ No newline at end of file