Skip to content

Commit 28f6047

Browse files
committed
feat: create subscription tier range with named constructors
1 parent 696dd26 commit 28f6047

File tree

4 files changed

+40
-9
lines changed

4 files changed

+40
-9
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package tv.codely.checkout;
2+
3+
public final class InvalidSubscriptionTierRange extends RuntimeException {
4+
5+
public InvalidSubscriptionTierRange(final String message) {
6+
super(message);
7+
}
8+
}

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Objects;
44

5+
// [from, to]
56
public final class SubscriptionTierRange {
67

78
private final int numberOfSubscriptionsFrom;
@@ -12,14 +13,31 @@ public SubscriptionTierRange(int numberOfSubscriptionsFrom, int numberOfSubscrip
1213
this.numberOfSubscriptionsTo = numberOfSubscriptionsTo;
1314
}
1415

15-
public static SubscriptionTierRange first(int numberOfSubscriptionsTo) {
16-
return new SubscriptionTierRange(1, numberOfSubscriptionsTo);
16+
public static SubscriptionTierRange first(int numberOfSubscriptions) {
17+
if (numberOfSubscriptions < 1) {
18+
throw new InvalidSubscriptionTierRange(
19+
"Number of subscriptions must be greater than 0");
20+
}
21+
return new SubscriptionTierRange(1, numberOfSubscriptions);
22+
}
23+
24+
public static SubscriptionTierRange from(
25+
final SubscriptionTierRange range,
26+
final int numberOfSubscriptions) {
27+
28+
final int numberOfSubscriptionsFrom = range.numberOfSubscriptionsTo + 1;
29+
final int numberOfSubscriptionsTo = numberOfSubscriptionsFrom + numberOfSubscriptions;
30+
return new SubscriptionTierRange(numberOfSubscriptionsFrom, numberOfSubscriptionsTo);
1731
}
1832

1933
public static SubscriptionTierRange last(int numberOfSubscriptionsFrom) {
2034
return new SubscriptionTierRange(numberOfSubscriptionsFrom, Integer.MAX_VALUE);
2135
}
2236

37+
public static SubscriptionTierRange last(final SubscriptionTierRange range) {
38+
return new SubscriptionTierRange(range.numberOfSubscriptionsTo + 1, Integer.MAX_VALUE);
39+
}
40+
2341
public boolean isFirst() {
2442
return numberOfSubscriptionsFrom == 1;
2543
}

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,26 @@
1515
public class TieredPricingShould {
1616

1717
private static List<SubscriptionTier> defaultSubscriptionTiers() {
18+
final var firstTierRange = SubscriptionTierRange.first(2);
19+
final var secondTierRange = SubscriptionTierRange.from(firstTierRange, 7);
20+
final var thirdTierRange = SubscriptionTierRange.from(secondTierRange, 14);
21+
final var fourthTierRange = SubscriptionTierRange.from(thirdTierRange, 24);
22+
final var lastTierRange = SubscriptionTierRange.last(fourthTierRange);
1823
return List.of(
1924
new SubscriptionTier(
20-
SubscriptionTierRange.first(2),
25+
firstTierRange,
2126
new SubscriptionTierPrice(299)),
2227
new SubscriptionTier(
23-
new SubscriptionTierRange(3, 10),
28+
secondTierRange,
2429
new SubscriptionTierPrice(239)),
2530
new SubscriptionTier(
26-
new SubscriptionTierRange(11, 25),
31+
thirdTierRange,
2732
new SubscriptionTierPrice(219)),
2833
new SubscriptionTier(
29-
new SubscriptionTierRange(26, 50),
34+
fourthTierRange,
3035
new SubscriptionTierPrice(199)),
3136
new SubscriptionTier(
32-
SubscriptionTierRange.last(51),
37+
lastTierRange,
3338
new SubscriptionTierPrice(149)));
3439
}
3540

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

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

16-
public static SubscriptionTierRange first(final int numberOfSubscriptionsTo) {
17-
return SubscriptionTierRange.first(numberOfSubscriptionsTo);
16+
public static SubscriptionTierRange first(final int numberOfSubscriptions) {
17+
return SubscriptionTierRange.first(numberOfSubscriptions);
1818
}
1919

2020
public static SubscriptionTierRange last(final int numberOfSubscriptionsFrom) {

0 commit comments

Comments
 (0)