Skip to content

Commit

Permalink
BAEL-1758: Working with Enums in Kotlin (eugenp#4413)
Browse files Browse the repository at this point in the history
  • Loading branch information
deveshchanchlani authored and pedja4 committed Jun 5, 2018
1 parent 5c0004c commit be608ae
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 0 deletions.
33 changes: 33 additions & 0 deletions core-kotlin/src/main/kotlin/com/baeldung/enums/CardType.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.baeldung.enums

enum class CardType(val color: String) : ICardLimit {
SILVER("gray") {
override fun getCreditLimit(): Int {
return 100000
}

override fun calculateCashbackPercent(): Float {
return 0.25f
}
},
GOLD("yellow") {
override fun getCreditLimit(): Int {
return 200000
}

override fun calculateCashbackPercent(): Float {
return 0.5f
}
},
PLATINUM("black") {
override fun getCreditLimit(): Int {
return 300000
}

override fun calculateCashbackPercent(): Float {
return 0.75f
}
};

abstract fun calculateCashbackPercent(): Float
}
16 changes: 16 additions & 0 deletions core-kotlin/src/main/kotlin/com/baeldung/enums/CardTypeHelper.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.baeldung.enums

class CardTypeHelper {
fun getCardTypeByColor(color: String): CardType? {
for (cardType in CardType.values()) {
if (cardType.color.equals(color)) {
return cardType;
}
}
return null
}

fun getCardTypeByName(name: String): CardType {
return CardType.valueOf(name.toUpperCase())
}
}
5 changes: 5 additions & 0 deletions core-kotlin/src/main/kotlin/com/baeldung/enums/ICardLimit.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.baeldung.enums

interface ICardLimit {
fun getCreditLimit(): Int
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.baeldung.enums

import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test

internal class CardTypeHelperUnitTest {

@Test
fun whenGetCardTypeByColor_thenSilverCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.SILVER, cardTypeHelper.getCardTypeByColor("gray"))
}

@Test
fun whenGetCardTypeByColor_thenGoldCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.GOLD, cardTypeHelper.getCardTypeByColor("yellow"))
}

@Test
fun whenGetCardTypeByColor_thenPlatinumCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.PLATINUM, cardTypeHelper.getCardTypeByColor("black"))
}

@Test
fun whenGetCardTypeByName_thenSilverCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.SILVER, cardTypeHelper.getCardTypeByName("silver"))
}

@Test
fun whenGetCardTypeByName_thenGoldCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.GOLD, cardTypeHelper.getCardTypeByName("gold"))
}

@Test
fun whenGetCardTypeByName_thenPlatinumCardType() {
val cardTypeHelper = CardTypeHelper()
Assertions.assertEquals(CardType.PLATINUM, cardTypeHelper.getCardTypeByName("platinum"))
}
}
52 changes: 52 additions & 0 deletions core-kotlin/src/test/kotlin/com/baeldung/enums/CardTypeUnitTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.baeldung.enums

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class CardTypeUnitTest {

@Test
fun givenSilverCardType_whenCalculateCashbackPercent_thenReturnCashbackValue() {
assertEquals(0.25f, CardType.SILVER.calculateCashbackPercent())
}

@Test
fun givenGoldCardType_whenCalculateCashbackPercent_thenReturnCashbackValue() {
assertEquals(0.5f, CardType.GOLD.calculateCashbackPercent())
}

@Test
fun givenPlatinumCardType_whenCalculateCashbackPercent_thenReturnCashbackValue() {
assertEquals(0.75f, CardType.PLATINUM.calculateCashbackPercent())
}

@Test
fun givenSilverCardType_whenGetCreditLimit_thenReturnCreditLimit() {
assertEquals(100000, CardType.SILVER.getCreditLimit())
}

@Test
fun givenGoldCardType_whenGetCreditLimit_thenReturnCreditLimit() {
assertEquals(200000, CardType.GOLD.getCreditLimit())
}

@Test
fun givenPlatinumCardType_whenGetCreditLimit_thenReturnCreditLimit() {
assertEquals(300000, CardType.PLATINUM.getCreditLimit())
}

@Test
fun givenSilverCardType_whenCheckColor_thenReturnColor() {
assertEquals("gray", CardType.SILVER.color)
}

@Test
fun givenGoldCardType_whenCheckColor_thenReturnColor() {
assertEquals("yellow", CardType.GOLD.color)
}

@Test
fun givenPlatinumCardType_whenCheckColor_thenReturnColor() {
assertEquals("black", CardType.PLATINUM.color)
}
}

0 comments on commit be608ae

Please sign in to comment.