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