Skip to content

Commit 34ffb22

Browse files
Olivier PEREZManonPolle
andauthored
fix(ratings): Rewrite tests to make them easier to maintain (#178)
Co-authored-by: ManonPolle <[email protected]>
1 parent 94f29c4 commit 34ffb22

File tree

2 files changed

+41
-46
lines changed
  • ratings/src
    • main/java/com/decathlon/vitamin/compose/ratings
    • test/kotlin/com/decathlon/vitamin/compose/ratings

2 files changed

+41
-46
lines changed

ratings/src/main/java/com/decathlon/vitamin/compose/ratings/Icon.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,18 @@ internal sealed class Icon(val imageVector: ImageVector) {
1515
object Fill : Icon(imageVector = VitaminIcons.Fill.Star)
1616

1717
companion object {
18-
private const val EMPTY_LOWER_BOUND = 0f
19-
private const val EMPTY_UPPER_BOUND = 0.24f
2018
private const val HALF_LOWER_BOUND = 0.25f
2119
private const val HALF_UPPER_BOUND = 0.75f
22-
private const val FILL_LOWER_BOUND = 0.76f
2320
private const val FILL_UPPER_BOUND = 1f
2421

2522
fun get(index: Int, number: Float): Icon {
2623
val floor = floor(number).toInt()
2724
val decimal = number - index
2825
return when {
2926
index < floor -> Fill
30-
decimal in EMPTY_LOWER_BOUND..EMPTY_UPPER_BOUND -> Empty
31-
decimal in HALF_LOWER_BOUND..HALF_UPPER_BOUND -> Half
32-
decimal in FILL_LOWER_BOUND..FILL_UPPER_BOUND -> Fill
27+
decimal < HALF_LOWER_BOUND -> Empty
28+
decimal <= HALF_UPPER_BOUND -> Half
29+
decimal <= FILL_UPPER_BOUND -> Fill
3330
else -> Empty
3431
}
3532
}
Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,70 @@
11
package com.decathlon.vitamin.compose.ratings
22

3-
import org.junit.Assert.*
3+
import org.junit.Assert.assertEquals
44
import org.junit.Test
55

66
class IconTest {
77
@Test
88
fun integer() {
9-
val number = 3.0f
10-
11-
assertEquals(Icon.Fill, Icon.get(0, number))
12-
assertEquals(Icon.Fill, Icon.get(1, number))
13-
assertEquals(Icon.Fill, Icon.get(2, number))
14-
assertEquals(Icon.Empty, Icon.get(3, number))
15-
assertEquals(Icon.Empty, Icon.get(4, number))
9+
assertStars(number = 3.0f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Empty, Icon.Empty)
1610
}
1711

1812
@Test
1913
fun close_above_int() {
20-
val number = 3.2f
14+
assertStars(number = 3.2f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Empty, Icon.Empty)
15+
}
2116

22-
assertEquals(Icon.Fill, Icon.get(0, number))
23-
assertEquals(Icon.Fill, Icon.get(1, number))
24-
assertEquals(Icon.Fill, Icon.get(2, number))
25-
assertEquals(Icon.Empty, Icon.get(3, number))
26-
assertEquals(Icon.Empty, Icon.get(4, number))
17+
@Test
18+
fun lower_limit_of_half() {
19+
assertStars(number = 3.25f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Half, Icon.Empty)
2720
}
2821

2922
@Test
3023
fun close_below_half() {
31-
val number = 3.4f
32-
33-
assertEquals(Icon.Fill, Icon.get(0, number))
34-
assertEquals(Icon.Fill, Icon.get(1, number))
35-
assertEquals(Icon.Fill, Icon.get(2, number))
36-
assertEquals(Icon.Half, Icon.get(3, number))
37-
assertEquals(Icon.Empty, Icon.get(4, number))
24+
assertStars(number = 3.4f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Half, Icon.Empty)
3825
}
3926

4027
@Test
4128
fun strictly_half() {
42-
val number = 3.5f
43-
44-
assertEquals(Icon.Fill, Icon.get(0, number))
45-
assertEquals(Icon.Fill, Icon.get(1, number))
46-
assertEquals(Icon.Fill, Icon.get(2, number))
47-
assertEquals(Icon.Half, Icon.get(3, number))
48-
assertEquals(Icon.Empty, Icon.get(4, number))
29+
assertStars(number = 3.5f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Half, Icon.Empty)
4930
}
5031

5132
@Test
5233
fun close_above_half() {
53-
val number = 3.6f
34+
assertStars(number = 3.6f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Half, Icon.Empty)
35+
}
5436

55-
assertEquals(Icon.Fill, Icon.get(0, number))
56-
assertEquals(Icon.Fill, Icon.get(1, number))
57-
assertEquals(Icon.Fill, Icon.get(2, number))
58-
assertEquals(Icon.Half, Icon.get(3, number))
59-
assertEquals(Icon.Empty, Icon.get(4, number))
37+
@Test
38+
fun high_limit_of_half() {
39+
assertStars(number = 3.75f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Half, Icon.Empty)
6040
}
6141

6242
@Test
6343
fun close_below_int() {
64-
val number = 3.8f
44+
assertStars(number = 3.8f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Empty)
45+
}
46+
47+
@Test
48+
fun close_edge_case_below_int() {
49+
assertStars(number = 3.751f, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Fill, Icon.Empty)
50+
}
6551

66-
assertEquals(Icon.Fill, Icon.get(0, number))
67-
assertEquals(Icon.Fill, Icon.get(1, number))
68-
assertEquals(Icon.Fill, Icon.get(2, number))
69-
assertEquals(Icon.Fill, Icon.get(3, number))
70-
assertEquals(Icon.Empty, Icon.get(4, number))
52+
/**
53+
* Asserts that a given [number] produces an expected list of icons.
54+
*/
55+
@Suppress("LongParameterList")
56+
private fun assertStars(
57+
number: Float,
58+
icon1: Icon,
59+
icon2: Icon,
60+
icon3: Icon,
61+
icon4: Icon,
62+
icon5: Icon,
63+
) {
64+
assertEquals("1st star of $number should be ${icon1::class.simpleName}", icon1, Icon.get(0, number))
65+
assertEquals("2nd star of $number should be ${icon2::class.simpleName}", icon2, Icon.get(1, number))
66+
assertEquals("3rd star of $number should be ${icon3::class.simpleName}", icon3, Icon.get(2, number))
67+
assertEquals("4th star of $number should be ${icon4::class.simpleName}", icon4, Icon.get(3, number))
68+
assertEquals("5th star of $number should be ${icon5::class.simpleName}", icon5, Icon.get(4, number))
7169
}
7270
}

0 commit comments

Comments
 (0)