fix(buff): 배속 상태에서 버프 시간이 배속을 따라가는 버그 수정
Some checks failed
CI / analyze-and-test (push) Has been cancelled
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- speedBoostEndMs: elapsedMs(게임 시간) → DateTime.now()(실제 시간) - autoReviveEndMs: elapsedMs → DateTime.now() - MonetizationState: isAutoReviveActive/isSpeedBoostActive 실제 시간 기준 - 5배속에서 5분 버프가 1분에 만료되던 문제 해결 - bossLevelingEndTime은 이미 DateTime.now() 기준 (변경 불필요)
This commit is contained in:
@@ -56,31 +56,36 @@ void main() {
|
||||
test('autoReviveEndMs가 null이면 false 반환', () {
|
||||
final state = MonetizationState.initial();
|
||||
|
||||
expect(state.isAutoReviveActive(1000), isFalse);
|
||||
expect(state.isAutoReviveActive(), isFalse);
|
||||
});
|
||||
|
||||
test('elapsedMs가 종료 시점 이내면 true 반환', () {
|
||||
test('종료 시점이 미래면 true 반환', () {
|
||||
final futureMs =
|
||||
DateTime.now().millisecondsSinceEpoch + 60000; // 1분 후
|
||||
final state = MonetizationState.initial().copyWith(
|
||||
autoReviveEndMs: 5000,
|
||||
autoReviveEndMs: futureMs,
|
||||
);
|
||||
|
||||
expect(state.isAutoReviveActive(3000), isTrue);
|
||||
expect(state.isAutoReviveActive(), isTrue);
|
||||
});
|
||||
|
||||
test('elapsedMs가 종료 시점을 초과하면 false 반환', () {
|
||||
test('종료 시점이 과거면 false 반환', () {
|
||||
final pastMs =
|
||||
DateTime.now().millisecondsSinceEpoch - 1000; // 1초 전
|
||||
final state = MonetizationState.initial().copyWith(
|
||||
autoReviveEndMs: 5000,
|
||||
autoReviveEndMs: pastMs,
|
||||
);
|
||||
|
||||
expect(state.isAutoReviveActive(6000), isFalse);
|
||||
expect(state.isAutoReviveActive(), isFalse);
|
||||
});
|
||||
|
||||
test('elapsedMs가 종료 시점과 정확히 같으면 false 반환 (경계값)', () {
|
||||
test('종료 시점이 현재와 거의 같으면 false 반환 (경계값)', () {
|
||||
final nowMs = DateTime.now().millisecondsSinceEpoch - 1;
|
||||
final state = MonetizationState.initial().copyWith(
|
||||
autoReviveEndMs: 5000,
|
||||
autoReviveEndMs: nowMs,
|
||||
);
|
||||
|
||||
expect(state.isAutoReviveActive(5000), isFalse);
|
||||
expect(state.isAutoReviveActive(), isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -93,30 +98,33 @@ void main() {
|
||||
final state = MonetizationState.initial(isPaidUser: true);
|
||||
|
||||
// speedBoostEndMs가 null이어도 유료 사용자는 항상 활성
|
||||
expect(state.isSpeedBoostActive(0), isTrue);
|
||||
expect(state.isSpeedBoostActive(999999), isTrue);
|
||||
expect(state.isSpeedBoostActive(), isTrue);
|
||||
});
|
||||
|
||||
test('무료 사용자 - 종료 시점 이내면 true 반환', () {
|
||||
test('무료 사용자 - 종료 시점이 미래면 true 반환', () {
|
||||
final futureMs =
|
||||
DateTime.now().millisecondsSinceEpoch + 60000;
|
||||
final state = MonetizationState.initial().copyWith(
|
||||
speedBoostEndMs: 10000,
|
||||
speedBoostEndMs: futureMs,
|
||||
);
|
||||
|
||||
expect(state.isSpeedBoostActive(5000), isTrue);
|
||||
expect(state.isSpeedBoostActive(), isTrue);
|
||||
});
|
||||
|
||||
test('무료 사용자 - 종료 시점 초과 시 false 반환', () {
|
||||
test('무료 사용자 - 종료 시점이 과거면 false 반환', () {
|
||||
final pastMs =
|
||||
DateTime.now().millisecondsSinceEpoch - 1000;
|
||||
final state = MonetizationState.initial().copyWith(
|
||||
speedBoostEndMs: 10000,
|
||||
speedBoostEndMs: pastMs,
|
||||
);
|
||||
|
||||
expect(state.isSpeedBoostActive(15000), isFalse);
|
||||
expect(state.isSpeedBoostActive(), isFalse);
|
||||
});
|
||||
|
||||
test('무료 사용자 - speedBoostEndMs가 null이면 false 반환', () {
|
||||
final state = MonetizationState.initial();
|
||||
|
||||
expect(state.isSpeedBoostActive(1000), isFalse);
|
||||
expect(state.isSpeedBoostActive(), isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user