mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-12-15 06:15:20 +01:00
* Refactor boss health bar * Apply Kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
58 lines
2.5 KiB
TypeScript
58 lines
2.5 KiB
TypeScript
import { calculateBossSegmentDamage } from "#utils/damage";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
describe("Unit Test - calculateBossSegmentDamage", () => {
|
|
it("Allows multiple segments to be cleared", () => {
|
|
// Deal 850 damage to a target with 800 max HP that has 8 segments.
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(850, 800, 100);
|
|
expect(adjusted).toEqual(300);
|
|
expect(clearedIndex).toEqual(5);
|
|
});
|
|
|
|
it("returns original damage and next segment index if damage is insufficient to clear current segment", () => {
|
|
// segmentHp = 100, currentHp = 250 (segmentIndex = 2), damage = 30
|
|
// remainingSegmentHp = 250 - 200 = 50, leftoverDamage = 30 - 50 = -20
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(30, 250, 100);
|
|
expect(adjusted).toBe(30);
|
|
expect(clearedIndex).toBe(3); // segmentIndex + 1
|
|
});
|
|
|
|
it("returns adjusted damage and decremented segment index when damage clears one segment", () => {
|
|
// segmentHp = 100, currentHp = 250 (segmentIndex = 2), damage = 60
|
|
// remainingSegmentHp = 50, leftoverDamage = 10
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(60, 250, 100);
|
|
expect(adjusted).toBeGreaterThanOrEqual(50); // at least remainingSegmentHp
|
|
expect(clearedIndex).toBe(2); // segmentIndex - segmentsBypassed (0)
|
|
});
|
|
|
|
it("handles exact segment boundary", () => {
|
|
// segmentHp = 100, currentHp = 200 (segmentIndex = 1), damage = 150
|
|
// remainingSegmentHp = 200 = 100, leftoverDamage = 0
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(150, 200, 100);
|
|
expect(adjusted).toBe(100);
|
|
expect(clearedIndex).toBe(1);
|
|
});
|
|
|
|
it("handles exact segment boundary for small damage", () => {
|
|
// segmentHp = 100, currentHp = 200 (segmentIndex = 1), damage = 150
|
|
// remainingSegmentHp = 200 = 100, leftoverDamage = 0
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(50, 200, 100);
|
|
expect(adjusted).toBe(50);
|
|
expect(clearedIndex).toBe(2);
|
|
});
|
|
|
|
it("handles single segment case", () => {
|
|
// segmentHp = 100, currentHp = 100, damage = 50
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(50, 100, 100);
|
|
expect(adjusted).toBe(50);
|
|
expect(clearedIndex).toBe(1);
|
|
});
|
|
|
|
it("handles zero damage", () => {
|
|
// segmentHp = 100, currentHp = 250, damage = 0
|
|
const [adjusted, clearedIndex] = calculateBossSegmentDamage(0, 250, 100);
|
|
expect(adjusted).toBe(0);
|
|
expect(clearedIndex).toBe(3);
|
|
});
|
|
});
|