Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 031a3e3

Browse files
[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)

AltStyle によって変換されたページ (->オリジナル) /