Skip to content

Commit 031a3e3

Browse files
committed
[js][bonus-03_extract_class] Split DailyBonus in two explicit classes
1 parent aae248f commit 031a3e3

File tree

4 files changed

+32
-29
lines changed

4 files changed

+32
-29
lines changed

examples/js/js-bonus-03_extract_class/src/DailyBonusPointsCalculator.js

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export class NormalUserDailyBonusPointsCalculator {
2+
POINTS_PER_DAY = 10;
3+
4+
calculate(consecutiveDays) {
5+
return consecutiveDays * this.POINTS_PER_DAY;
6+
}
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export class PremiumUserDailyBonusPointsCalculator {
2+
POINTS_PER_DAY = 20;
3+
WEEKS_MULTIPLIER = 1.5;
4+
5+
calculate(consecutiveDays) {
6+
const consecutiveWeeks = Math.floor(consecutiveDays / 7);
7+
8+
let consecutiveWeeksMultiplier = 1;
9+
if (consecutiveWeeks > 0) {
10+
consecutiveWeeksMultiplier = Math.pow(this.WEEKS_MULTIPLIER, consecutiveWeeks);
11+
}
12+
13+
return consecutiveDays * this.POINTS_PER_DAY * consecutiveWeeksMultiplier;
14+
}
15+
}
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
import {DailyBonusPointsCalculator} from "../src/DailyBonusPointsCalculator";
1+
import {NormalUserDailyBonusPointsCalculator} from "../src/NormalUserDailyBonusPointsCalculator";
2+
import {PremiumUserDailyBonusPointsCalculator} from "../src/PremiumUserDailyBonusPointsCalculator";
23

34
describe('DailyBonusPointsCalculator should', () => {
45
it('Calculate points for a normal user on its first day', () => {
5-
const calculator = new DailyBonusPointsCalculator();
6+
const calculator = new NormalUserDailyBonusPointsCalculator();
67

7-
expect(calculator.calculateNormal(1)).toBe(10);
8+
expect(calculator.calculate(1)).toBe(10);
89
});
910

1011
it('Calculate points for a normal user on its second consecutive week', () => {
11-
const calculator = new DailyBonusPointsCalculator();
12+
const calculator = new NormalUserDailyBonusPointsCalculator();
1213

13-
expect(calculator.calculateNormal(14)).toBe(140);
14+
expect(calculator.calculate(14)).toBe(140);
1415
});
1516

1617
it('Calculate points for a premium user on its first day', () => {
17-
const calculator = new DailyBonusPointsCalculator();
18+
const calculator = new PremiumUserDailyBonusPointsCalculator();
1819

19-
expect(calculator.calculatePremium(1)).toBe(20);
20+
expect(calculator.calculate(1)).toBe(20);
2021
});
2122

2223
it('Calculate points for a premium user on its second consecutive week', () => {
23-
const calculator = new DailyBonusPointsCalculator();
24+
const calculator = new PremiumUserDailyBonusPointsCalculator();
2425

25-
expect(calculator.calculatePremium(14)).toBe(630);
26+
expect(calculator.calculate(14)).toBe(630);
2627
});
2728
});

0 commit comments

Comments
 (0)