Skip to content

Commit 5e8898d

Browse files
committed
feat: add should_have_a_subscription_tier_range_with_no_upper_limit test
1 parent 0d9d999 commit 5e8898d

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

exercises/tiered_pricing/solutions/adrianliz/java/src/main/java/tv/codely/checkout/SubscriptionTier.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,8 @@ public double unitPrice() {
2424
public double getTotalPrice(int numberOfSubscriptions) {
2525
return unitPrice() * numberOfSubscriptions;
2626
}
27+
28+
public boolean isLast() {
29+
return range.isLast();
30+
}
2731
}

exercises/tiered_pricing/solutions/adrianliz/java/src/main/java/tv/codely/checkout/SubscriptionTierRange.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,16 @@ public SubscriptionTierRange(int numberOfSubscriptionsFrom, int numberOfSubscrip
1010
this.numberOfSubscriptionsTo = numberOfSubscriptionsTo;
1111
}
1212

13+
public static SubscriptionTierRange last(int numberOfSubscriptionsFrom) {
14+
return new SubscriptionTierRange(numberOfSubscriptionsFrom, Integer.MAX_VALUE);
15+
}
16+
1317
public boolean isSuitableFor(int numberOfSubscriptions) {
1418
return numberOfSubscriptions >= numberOfSubscriptionsFrom
1519
&& numberOfSubscriptions <= numberOfSubscriptionsTo;
1620
}
21+
22+
public boolean isLast() {
23+
return numberOfSubscriptionsTo == Integer.MAX_VALUE;
24+
}
1725
}

exercises/tiered_pricing/solutions/adrianliz/java/src/test/java/tv/codely/checkout/TieredPricingShould.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package tv.codely.checkout;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
45
import static org.junit.jupiter.api.Assertions.assertTrue;
56

67
import java.util.List;
@@ -25,7 +26,7 @@ private static List<SubscriptionTier> defaultSubscriptionTiers() {
2526
new SubscriptionTierRange(26, 50),
2627
new SubscriptionTierPrice(199)),
2728
new SubscriptionTier(
28-
new SubscriptionTierRange(51, 100),
29+
SubscriptionTierRange.last(51),
2930
new SubscriptionTierPrice(149)));
3031
}
3132

@@ -47,6 +48,18 @@ void return_total_price_based_on_number_of_subscriptions() {
4748
assertEquals(expectedPrice, totalPrice);
4849
}
4950

51+
@Test
52+
void should_have_a_subscription_tier_range_with_no_upper_limit() {
53+
final var subscriptionTiers = SubscriptionTierMother.randoms();
54+
final var lastSubscriptionTier =
55+
subscriptionTiers.stream()
56+
.filter(SubscriptionTier::isLast)
57+
.findFirst()
58+
.orElse(null);
59+
60+
assertNotNull(lastSubscriptionTier);
61+
}
62+
5063
@Test
5164
void return_total_price_for_1_subscription() {
5265
final var tieredPricing = new TieredPricing(defaultSubscriptionTiers());

exercises/tiered_pricing/solutions/adrianliz/java/src/test/java/tv/codely/checkout/mother/SubscriptionTierRangeMother.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ public static SubscriptionTierRange create(
1313
return new SubscriptionTierRange(numberOfSubscriptionsFrom, numberOfSubscriptionsTo);
1414
}
1515

16+
public static SubscriptionTierRange last(final int numberOfSubscriptionsFrom) {
17+
return SubscriptionTierRange.last(numberOfSubscriptionsFrom);
18+
}
19+
1620
public static List<SubscriptionTierRange> randoms() {
1721
final var subscriptionTiers = new ArrayList<SubscriptionTierRange>();
1822
final var numberOfTiers = IntegerMother.randomBetween(1, 6);
@@ -23,6 +27,11 @@ public static List<SubscriptionTierRange> randoms() {
2327
var lastNumberOfSubscriptionsTo = 0;
2428

2529
for (int i = 0; i < numberOfTiers; i++) {
30+
if (i == numberOfTiers - 1) {
31+
subscriptionTiers.add(last(lastNumberOfSubscriptionsTo + 1));
32+
break;
33+
}
34+
2635
final var numberOfSubscriptionsFrom = lastNumberOfSubscriptionsTo + 1;
2736
final var numberOfSubscriptionsTo =
2837
IntegerMother.randomBetween(

0 commit comments

Comments
 (0)