Skip to content

Commit 5433283

Browse files
committed
feat(tiered_pricing): 🔵 refactoring extract enum
1 parent a60d825 commit 5433283

File tree

3 files changed

+58
-31
lines changed

3 files changed

+58
-31
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package tv.codely.checkout;
2+
3+
4+
public enum Tier {
5+
6+
FIRST(1,2,299),
7+
SECOND(3,10,239),
8+
THIRD(11,25,219);
9+
10+
private final int lowerLimit;
11+
private final int upperLimit;
12+
private final int unitPrice;
13+
14+
Tier(int lowerLimit, int upperLimit, int unitPrice) {
15+
this.lowerLimit = lowerLimit;
16+
this.upperLimit = upperLimit;
17+
this.unitPrice = unitPrice;
18+
}
19+
20+
public int getLowerLimit() {
21+
return lowerLimit;
22+
}
23+
24+
public int getUpperLimit() {
25+
return upperLimit;
26+
}
27+
28+
public int getUnitPrice() {
29+
return unitPrice;
30+
}
31+
32+
public static int getTotalPrice(int subscriptions) {
33+
var found = FIRST;
34+
for (Tier tier : values()) {
35+
if ( subscriptions >= tier.lowerLimit && subscriptions <= tier.upperLimit) {
36+
found = tier;
37+
break;
38+
}
39+
}
40+
41+
return subscriptions * found.unitPrice;
42+
}
43+
}

exercises/tiered_pricing/solutions/oflorez/src/main/java/tv/codely/checkout/TieredPricing.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,7 @@
22

33
public class TieredPricing {
44

5-
public static final int FIRST_RANGE_UNIT_PRICE = 299;
6-
public static final int FIRST_RANGE_LOWER_LIMIT = 1;
7-
public static final int FIRST_RANGE_UPPER_LIMIT = 2;
8-
9-
public static final int SECOND_RANGE_UNIT_PRICE = 239;
10-
public static final int SECOND_RANGE_LOWER_LIMIT = 3;
11-
public static final int SECOND_RANGE_UPPER_LIMIT = 10;
12-
13-
public static final int THIRD_RANGE_UNIT_PRICE = 219;
14-
public static final int THIRD_RANGE_LOWER_LIMIT = 11;
15-
public static final int THIRD_RANGE_UPPER_LIMIT = 25;
16-
175
public int calculateTotalPrice(int amount_subscriptions) {
18-
if (amount_subscriptions >= FIRST_RANGE_LOWER_LIMIT && amount_subscriptions<= FIRST_RANGE_UPPER_LIMIT) return amount_subscriptions * FIRST_RANGE_UNIT_PRICE;
19-
20-
if (amount_subscriptions >= SECOND_RANGE_LOWER_LIMIT && amount_subscriptions<= SECOND_RANGE_UPPER_LIMIT) return amount_subscriptions * SECOND_RANGE_UNIT_PRICE;
21-
22-
if (amount_subscriptions >= THIRD_RANGE_LOWER_LIMIT && amount_subscriptions<= THIRD_RANGE_UPPER_LIMIT) return amount_subscriptions * THIRD_RANGE_UNIT_PRICE;
23-
24-
return 0;
6+
return Tier.getTotalPrice(amount_subscriptions);
257
}
268
}

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,35 @@
55
import java.util.stream.IntStream;
66

77
import static org.junit.jupiter.api.Assertions.assertEquals;
8-
import static tv.codely.checkout.TieredPricing.*;
98

109
public class TieredPricingShould {
1110

1211
@Test
13-
void calculate_total_value_for_first_pricing_range() {
12+
void calculate_total_value_for_first_pricing_tier() {
1413
var pricing = new TieredPricing();
15-
var subscription = retrieveSubscriptionGivenRange(FIRST_RANGE_LOWER_LIMIT, FIRST_RANGE_UPPER_LIMIT);
16-
assertEquals(calculateTotalPriceExpected(FIRST_RANGE_UNIT_PRICE, subscription), pricing.calculateTotalPrice(subscription));
14+
var tier = Tier.FIRST;
15+
var subscription = retrieveSubscriptionGivenTier(tier);
16+
assertEquals(calculateTotalPriceExpected(tier.getUnitPrice(), subscription), pricing.calculateTotalPrice(subscription));
1717
}
1818

1919
@Test
20-
void calculate_total_value_for_second_pricing_range() {
20+
void calculate_total_value_for_second_pricing_tier() {
2121
var pricing = new TieredPricing();
22-
var subscription = retrieveSubscriptionGivenRange(SECOND_RANGE_LOWER_LIMIT,SECOND_RANGE_UPPER_LIMIT);
23-
assertEquals(calculateTotalPriceExpected(SECOND_RANGE_UNIT_PRICE, subscription), pricing.calculateTotalPrice(subscription));
22+
var tier = Tier.SECOND;
23+
var subscription = retrieveSubscriptionGivenTier(tier);
24+
assertEquals(calculateTotalPriceExpected(tier.getUnitPrice(), subscription), pricing.calculateTotalPrice(subscription));
2425
}
2526

2627
@Test
27-
void calculate_total_value_for_third_pricing_range() {
28+
void calculate_total_value_for_third_pricing_tier() {
2829
var pricing = new TieredPricing();
29-
var subscription = retrieveSubscriptionGivenRange(THIRD_RANGE_LOWER_LIMIT,THIRD_RANGE_UPPER_LIMIT);
30-
assertEquals(calculateTotalPriceExpected(THIRD_RANGE_UNIT_PRICE, subscription), pricing.calculateTotalPrice(subscription));
30+
var tier = Tier.THIRD;
31+
var subscription = retrieveSubscriptionGivenTier(tier);
32+
assertEquals(calculateTotalPriceExpected(tier.getUnitPrice(), subscription), pricing.calculateTotalPrice(subscription));
3133
}
3234

33-
private int retrieveSubscriptionGivenRange(int lowerLimit, int upperLimit) {
34-
return IntStream.rangeClosed(lowerLimit, upperLimit).findAny().getAsInt();
35+
private int retrieveSubscriptionGivenTier(Tier tier) {
36+
return IntStream.rangeClosed(tier.getLowerLimit(), tier.getUpperLimit()).findAny().getAsInt();
3537
}
3638

3739
private int calculateTotalPriceExpected(int unitPrice, int subscription) {

0 commit comments

Comments
 (0)