File tree Expand file tree Collapse file tree 4 files changed +58
-1
lines changed
exercises/tiered_pricing/solutions/adrianliz/java/src
main/java/tv/codely/checkout
test/java/tv/codely/checkout Expand file tree Collapse file tree 4 files changed +58
-1
lines changed Original file line number Diff line number Diff line change 1+ package tv .codely .checkout ;
2+
3+ public final class InvalidSubscriptionTiers extends RuntimeException {
4+
5+ public InvalidSubscriptionTiers (String message ) {
6+ super (message );
7+ }
8+ }
Original file line number Diff line number Diff line change 1+ package tv .codely .checkout ;
2+
3+ import java .util .List ;
4+
5+ public final class SubscriptionTiers {
6+
7+ private final List <SubscriptionTier > tiers ;
8+
9+ public SubscriptionTiers (List <SubscriptionTier > tiers ) {
10+ validate (tiers );
11+ this .tiers = tiers ;
12+ }
13+
14+ private static void validate (final List <SubscriptionTier > tiers ) {
15+ if (tiers == null || tiers .isEmpty ()) {
16+ throw new InvalidSubscriptionTiers ("There must be at least one subscription tier" );
17+ }
18+
19+ if (tiers .stream ().noneMatch (SubscriptionTier ::isLast )) {
20+ throw new IllegalArgumentException ("There must be a last subscription tier" );
21+ }
22+ }
23+
24+ public List <SubscriptionTier > tiers () {
25+ return tiers ;
26+ }
27+ }
Original file line number Diff line number Diff line change @@ -6,8 +6,12 @@ public class TieredPricing {
66
77 private final List <SubscriptionTier > subscriptionTiers ;
88
9+ public TieredPricing (final SubscriptionTiers subscriptionTiers ) {
10+ this .subscriptionTiers = subscriptionTiers .tiers ();
11+ }
12+
913 public TieredPricing (final List <SubscriptionTier > subscriptionTiers ) {
10- this . subscriptionTiers = subscriptionTiers ;
14+ this ( new SubscriptionTiers ( subscriptionTiers )) ;
1115 }
1216
1317 public double getTotalPrice (int subscriptions ) {
Original file line number Diff line number Diff line change 22
33import static org .junit .jupiter .api .Assertions .assertEquals ;
44import static org .junit .jupiter .api .Assertions .assertNotNull ;
5+ import static org .junit .jupiter .api .Assertions .assertThrows ;
56import static org .junit .jupiter .api .Assertions .assertTrue ;
67
78import java .util .List ;
@@ -48,6 +49,23 @@ void return_total_price_based_on_number_of_subscriptions() {
4849 assertEquals (expectedPrice , totalPrice );
4950 }
5051
52+ @ Test
53+ void should_throw_invalid_tiers_if_there_is_no_last_tier () {
54+ final var subscriptionTiers = SubscriptionTierMother .randoms ();
55+ final var lastSubscriptionTier =
56+ subscriptionTiers .stream ()
57+ .filter (SubscriptionTier ::isLast )
58+ .findFirst ()
59+ .orElse (null );
60+
61+ assertNotNull (lastSubscriptionTier );
62+ }
63+
64+ @ Test
65+ void should_throw_invalid_tiers_if_there_is_no_tiers () {
66+ assertThrows (InvalidSubscriptionTiers .class , () -> new TieredPricing (List .of ()));
67+ }
68+
5169 @ Test
5270 void should_have_a_subscription_tier_range_with_no_upper_limit () {
5371 final var subscriptionTiers = SubscriptionTierMother .randoms ();
You can’t perform that action at this time.
0 commit comments