Skip to content

Commit dff1af3

Browse files
committed
feat(tiered_pricing): 🟢 should return price for any subscription
1 parent 7ac1660 commit dff1af3

File tree

2 files changed

+63
-13
lines changed

2 files changed

+63
-13
lines changed
Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,68 @@
1+
import NumberOfSubscriptionsNotAllowed from "./NumberOfSubscriptionsNotAllowed";
2+
13
export default class GraduatedTieredPricing {
24
priceFor(subscriptions: number): number {
5+
if (subscriptions < 1) {
6+
throw new NumberOfSubscriptionsNotAllowed();
7+
}
8+
39
const step1Price = 299;
410
const step2Price = 239;
11+
const step3Price = 219;
12+
const step4Price = 199;
13+
const step5Price = 149;
14+
15+
const step1Boundary = 2;
16+
const step2Boundary = 10;
17+
const step3Boundary = 25;
18+
const step4Boundary = 50;
519

6-
if (subscriptions <= 2) {
20+
const numberOfSubscriptionsInStep1 = 2;
21+
const numberOfSubscriptionsInStep2 = step2Boundary - step1Boundary; // 8
22+
const numberOfSubscriptionsInStep3 = step3Boundary - step2Boundary; // 15
23+
const numberOfSubscriptionsInStep4 = step4Boundary - step3Boundary; // 25
24+
25+
if (subscriptions <= step1Boundary) {
726
return subscriptions * step1Price;
827
}
9-
if (subscriptions <= 5) {
10-
return 2 * step1Price + (subscriptions - 2) * step2Price;
28+
if (subscriptions <= step2Boundary) {
29+
return (
30+
numberOfSubscriptionsInStep1 * step1Price +
31+
(subscriptions - numberOfSubscriptionsInStep1) * step2Price
32+
);
33+
}
34+
if (subscriptions <= step3Boundary) {
35+
return (
36+
numberOfSubscriptionsInStep1 * step1Price +
37+
numberOfSubscriptionsInStep2 * step2Price +
38+
(subscriptions -
39+
(numberOfSubscriptionsInStep1 + numberOfSubscriptionsInStep2)) *
40+
step3Price
41+
);
42+
}
43+
if (subscriptions <= step4Boundary) {
44+
return (
45+
numberOfSubscriptionsInStep1 * step1Price +
46+
numberOfSubscriptionsInStep2 * step2Price +
47+
numberOfSubscriptionsInStep3 * step3Price +
48+
(subscriptions -
49+
(numberOfSubscriptionsInStep1 +
50+
numberOfSubscriptionsInStep2 +
51+
numberOfSubscriptionsInStep3)) *
52+
step4Price
53+
);
1154
}
12-
throw new Error("Not implemented yet");
55+
return (
56+
numberOfSubscriptionsInStep1 * step1Price +
57+
numberOfSubscriptionsInStep2 * step2Price +
58+
numberOfSubscriptionsInStep3 * step3Price +
59+
numberOfSubscriptionsInStep4 * step4Price +
60+
(subscriptions -
61+
(numberOfSubscriptionsInStep1 +
62+
numberOfSubscriptionsInStep2 +
63+
numberOfSubscriptionsInStep3 +
64+
numberOfSubscriptionsInStep4)) *
65+
step5Price
66+
);
1367
}
1468
}

exercises/graduated_tiered_prices/solutions/adrianliz/tests/GraduatedTieredPricing.test.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import NumberOfSubscriptionsNotAllowed from "../src/NumberOfSubscriptionsNotAllo
44
describe("Graduated tiered pricing should", () => {
55
it("calculate the price for 0 subscriptions", () => {
66
const pricing = new GraduatedTieredPricing();
7-
expect(pricing.priceFor(0)).toThrow(NumberOfSubscriptionsNotAllowed);
7+
expect(() => pricing.priceFor(0)).toThrow(NumberOfSubscriptionsNotAllowed);
88
});
99

1010
it("calculate the price for 1 subscription", () => {
@@ -24,25 +24,21 @@ describe("Graduated tiered pricing should", () => {
2424

2525
it("calculate the price for 11 subscriptions", () => {
2626
const pricing = new GraduatedTieredPricing();
27-
expect(pricing.priceFor(11)).toBe(2990);
27+
expect(pricing.priceFor(11)).toBe(2729);
2828
});
2929

3030
it("calculate the price for 26 subscriptions", () => {
3131
const pricing = new GraduatedTieredPricing();
32-
expect(pricing.priceFor(26)).toBe(6294);
32+
expect(pricing.priceFor(26)).toBe(5994);
3333
});
3434

3535
it("calculate the price for 50 subscriptions", () => {
3636
const pricing = new GraduatedTieredPricing();
37-
expect(pricing.priceFor(50)).toBe(10950);
37+
expect(pricing.priceFor(50)).toBe(10770);
3838
});
3939

4040
it("calculate the price for 100 subscriptions", () => {
4141
const pricing = new GraduatedTieredPricing();
42-
expect(pricing.priceFor(100)).toBe(21900);
42+
expect(pricing.priceFor(100)).toBe(18220);
4343
});
4444
});
45-
46-
test("test framework working", async () => {
47-
expect(true).toBe(true);
48-
});

0 commit comments

Comments
 (0)