Skip to content

Commit e6b3941

Browse files
committed
feat(graduated-tiered-pricing): [tpp] 🔵 preparatory refactoring: wrap subscriptions
1 parent 89209bd commit e6b3941

File tree

4 files changed

+20
-13
lines changed

4 files changed

+20
-13
lines changed

exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/src/GraduatedTieredPricing.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import { SubscriptionsBeingPurchased } from "./SubscriptionsBeingPurchased";
12
import { Tier } from "./Tier";
23

34
export class GraduatedTieredPricing {
4-
for(subscriptions: number): number {
5+
for(subscriptions: SubscriptionsBeingPurchased): number {
56
const tiers = [
67
new Tier(1, 2, 299),
78
new Tier(3, 10, 239),
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export class SubscriptionsBeingPurchased {
2+
constructor(public value: number) {}
3+
}

exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/src/Tier.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { SubscriptionsBeingPurchased } from "./SubscriptionsBeingPurchased";
2+
13
export class Tier {
24
constructor(
35
public readonly from: number,
@@ -13,15 +15,15 @@ export class Tier {
1315
return this.size() * this.price;
1416
}
1517

16-
totalFor(subscriptions: number): number {
17-
if (subscriptions >= this.to) {
18+
totalFor(subscriptions: SubscriptionsBeingPurchased): number {
19+
if (subscriptions.value >= this.to) {
1820
return this.fullTierTotal();
1921
}
2022

21-
if (subscriptions < this.from) {
23+
if (subscriptions.value < this.from) {
2224
return 0;
2325
}
2426

25-
return (subscriptions - this.from + 1) * this.price;
27+
return (subscriptions.value - this.from + 1) * this.price;
2628
}
2729
}

exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/tests/GraduatedTieredPricing.test.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,67 @@
11
import { GraduatedTieredPricing } from "../src/GraduatedTieredPricing";
2+
import { SubscriptionsBeingPurchased } from "../src/SubscriptionsBeingPurchased";
23

34
describe("Graduated tiered pricing should", () => {
45
test("return 299€ for 1 subscription", async () => {
56
const pricing = new GraduatedTieredPricing();
67

7-
const total = pricing.for(1);
8+
const total = pricing.for(new SubscriptionsBeingPurchased(1));
89

910
expect(total).toBe(299);
1011
});
1112

1213
test("return 598€ for 2 subscription", async () => {
1314
const pricing = new GraduatedTieredPricing();
1415

15-
const total = pricing.for(2);
16+
const total = pricing.for(new SubscriptionsBeingPurchased(2));
1617

1718
expect(total).toBe(598);
1819
});
1920

2021
test("return 837€ for 3 subscription", async () => {
2122
const pricing = new GraduatedTieredPricing();
2223

23-
const total = pricing.for(3);
24+
const total = pricing.for(new SubscriptionsBeingPurchased(3));
2425

2526
expect(total).toBe(837);
2627
});
2728

2829
test("return 1076€ for 4 subscription", async () => {
2930
const pricing = new GraduatedTieredPricing();
3031

31-
const total = pricing.for(4);
32+
const total = pricing.for(new SubscriptionsBeingPurchased(4));
3233

3334
expect(total).toBe(1076);
3435
});
3536

3637
test("return 1315€ for 5 subscription", async () => {
3738
const pricing = new GraduatedTieredPricing();
3839

39-
const total = pricing.for(5);
40+
const total = pricing.for(new SubscriptionsBeingPurchased(5));
4041

4142
expect(total).toBe(1315);
4243
});
4344

4445
test("return 2729€ for 11 subscription", async () => {
4546
const pricing = new GraduatedTieredPricing();
4647

47-
const total = pricing.for(11);
48+
const total = pricing.for(new SubscriptionsBeingPurchased(11));
4849

4950
expect(total).toBe(2729);
5051
});
5152

5253
test("return 2948€ for 12 subscription", async () => {
5354
const pricing = new GraduatedTieredPricing();
5455

55-
const total = pricing.for(12);
56+
const total = pricing.for(new SubscriptionsBeingPurchased(12));
5657

5758
expect(total).toBe(2948);
5859
});
5960

6061
test("return 5994€ for 26 subscription", async () => {
6162
const pricing = new GraduatedTieredPricing();
6263

63-
const total = pricing.for(26);
64+
const total = pricing.for(new SubscriptionsBeingPurchased(26));
6465

6566
expect(total).toBe(5994);
6667
});

0 commit comments

Comments
 (0)