Object Damage Calculator
operates damage type select, max damage > min damage
Renders/object-damage-calculator
Object damage calculator page Act
Open the object damage calculator page
await calculator.goto();
Pick weapon “Sploosh-o-matic”
await calculator.pickWeapon("Sploosh-o-matic");Hit points → hp
const hp = calculator.hitPoints();
Damage → dmg
const dmg = calculator.damage();
Hits to destroy → htd
const htd = calculator.hitsToDestroy();
Arrange
hpBefore = (await hp.textContent())!
const hpBefore = (await hp.textContent())!;
dmgBefore = (await dmg.textContent())!
const dmgBefore = (await dmg.textContent())!;
htdBefore = (await htd.textContent())!
const htdBefore = (await htd.textContent())!;
Assert
Number(htdBefore) is Math.ceil(Number(hpBefore) / Number(dmgBefore))
expect(Number(htdBefore)).toBe(
Math.ceil(Number(hpBefore) / Number(dmgBefore)),
);
Act
Select damage type “NORMAL_MIN”
await calculator.selectDamageType("NORMAL_MIN");
Assert
hp reads hpBefore
await expect(hp).toHaveText(hpBefore);
dmg does not read dmgBefore
await expect(dmg).not.toHaveText(dmgBefore);
htd does not read htdBefore
await expect(htd).not.toHaveText(htdBefore);
Source
test("operates damage type select, max damage > min damage", async ({
page,
}) => {
const calculator = new ObjectDamageCalculatorPage(page);
await calculator.goto();
await calculator.pickWeapon("Sploosh-o-matic");
const hp = calculator.hitPoints();
const dmg = calculator.damage();
const htd = calculator.hitsToDestroy();
const hpBefore = (await hp.textContent())!;
const dmgBefore = (await dmg.textContent())!;
const htdBefore = (await htd.textContent())!;
expect(Number(htdBefore)).toBe(
Math.ceil(Number(hpBefore) / Number(dmgBefore)),
);
await calculator.selectDamageType("NORMAL_MIN");
await expect(hp).toHaveText(hpBefore);
await expect(dmg).not.toHaveText(dmgBefore);
await expect(htd).not.toHaveText(htdBefore);
})changes weapon and saves it to url
Renders/object-damage-calculator
Object damage calculator page Act
Open the object damage calculator page
await calculator.goto();
Pick weapon “Sploosh-o-matic”
await calculator.pickWeapon("Sploosh-o-matic");Damage → dmg
const dmg = calculator.damage();
Arrange
dmgBefore = (await dmg.textContent())!
const dmgBefore = (await dmg.textContent())!;
Act
Change weapon “Luna Blaster”
await calculator.changeWeapon("Luna Blaster");
Assert
dmg does not read dmgBefore
await expect(dmg).not.toHaveText(dmgBefore);
Act
Reload the page
await page.reload();
Assert
dmg does not read dmgBefore
await expect(dmg).not.toHaveText(dmgBefore);
Source
test("changes weapon and saves it to url", async ({ page }) => {
const calculator = new ObjectDamageCalculatorPage(page);
await calculator.goto();
await calculator.pickWeapon("Sploosh-o-matic");
const dmg = calculator.damage();
const dmgBefore = (await dmg.textContent())!;
await calculator.changeWeapon("Luna Blaster");
await expect(dmg).not.toHaveText(dmgBefore);
await page.reload();
await expect(dmg).not.toHaveText(dmgBefore);
})multiplier switch increases damage
Renders/object-damage-calculator
Object damage calculator page Act
Open the object damage calculator page
await calculator.goto();
Pick weapon “Tri-Stringer”
await calculator.pickWeapon("Tri-Stringer");Damage → dmg
const dmg = calculator.damage();
Arrange
dmgBefore = (await dmg.textContent())!
const dmgBefore = (await dmg.textContent())!;
Act
Toggle multiplier
await calculator.toggleMultiplier();
Assert
Multiplier is on by default
dmg does not read dmgBefore
await expect(dmg).not.toHaveText(dmgBefore);
Source
test("multiplier switch increases damage", async ({ page }) => {
const calculator = new ObjectDamageCalculatorPage(page);
await calculator.goto();
await calculator.pickWeapon("Tri-Stringer");
const dmg = calculator.damage();
const dmgBefore = (await dmg.textContent())!;
await calculator.toggleMultiplier();
// Multiplier is on by default
await expect(dmg).not.toHaveText(dmgBefore);
})object hp increases when ability points added
Renders/object-damage-calculator
Object damage calculator page Act
Open the object damage calculator page
await calculator.goto();
Pick weapon “Sploosh-o-matic”
await calculator.pickWeapon("Sploosh-o-matic");Hit points → crabTankHp
const crabTankHp = calculator.hitPoints();
Arrange
crabTankHpBefore = (await crabTankHp.textContent())!
const crabTankHpBefore = (await crabTankHp.textContent())!;
Act
Hit points “Wsb_Shield” → splashWallHp
const splashWallHp = calculator.hitPoints("Wsb_Shield");
Arrange
splashWallHpBefore = (await splashWallHp.textContent())!
const splashWallHpBefore = (await splashWallHp.textContent())!;
Act
Select ability points 10
await calculator.selectAbilityPoints(10);
Assert
Crab Tank doesn't gain HP from ability points
crabTankHp reads crabTankHpBefore
await expect(crabTankHp).toHaveText(crabTankHpBefore);
splashWallHp does not read splashWallHpBefore
await expect(splashWallHp).not.toHaveText(splashWallHpBefore);
Source
test("object hp increases when ability points added", async ({ page }) => {
const calculator = new ObjectDamageCalculatorPage(page);
await calculator.goto();
await calculator.pickWeapon("Sploosh-o-matic");
const crabTankHp = calculator.hitPoints();
const crabTankHpBefore = (await crabTankHp.textContent())!;
const splashWallHp = calculator.hitPoints("Wsb_Shield");
const splashWallHpBefore = (await splashWallHp.textContent())!;
await calculator.selectAbilityPoints(10);
// Crab Tank doesn't gain HP from ability points
await expect(crabTankHp).toHaveText(crabTankHpBefore);
// ... but Splash Wall does
await expect(splashWallHp).not.toHaveText(splashWallHpBefore);
})picks a sub weapon from its own category
Renders/object-damage-calculator
Object damage calculator page Act
Open the object damage calculator page
await calculator.goto();
Pick weapon “Splat Bomb”
await calculator.pickWeapon("Splat Bomb");
Assert
first damage is visible
await expect(calculator.damage().first()).toBeVisible();
the page URL is /weapon=SUB_0/
await expect(page).toHaveURL(/weapon=SUB_0/);
Source
test("picks a sub weapon from its own category", async ({ page }) => {
const calculator = new ObjectDamageCalculatorPage(page);
await calculator.goto();
await calculator.pickWeapon("Splat Bomb");
await expect(calculator.damage().first()).toBeVisible();
await expect(page).toHaveURL(/weapon=SUB_0/);
})ObjectDamageCalculatorPage.gotoe2e/pages/object-damage-calculator/object-damage-calculator-page.ts:23
No JSDoc
async goto() {
await navigate({ page: this.page, url: OBJECT_DAMAGE_CALCULATOR_URL });
}ObjectDamageCalculatorPage.pickWeapone2e/pages/object-damage-calculator/object-damage-calculator-page.ts:40
async pickWeapon(name: string) {
const { weaponLanding } = this.locators;
await weaponLanding.getByRole("searchbox").fill(name);
await weaponLanding.getByText(name, { exact: true }).click();
}ObjectDamageCalculatorPage.hitPointse2e/pages/object-damage-calculator/object-damage-calculator-page.ts:27
No JSDoc
hitPoints(receiver: DamageReceiver = "Chariot") {
return this.page.getByTestId(`hp-${receiver}`);
}ObjectDamageCalculatorPage.damagee2e/pages/object-damage-calculator/object-damage-calculator-page.ts:31
No JSDoc
damage(receiver: DamageReceiver = "Chariot") {
return this.page.getByTestId(`dmg-${receiver}`);
}ObjectDamageCalculatorPage.hitsToDestroye2e/pages/object-damage-calculator/object-damage-calculator-page.ts:35
No JSDoc
hitsToDestroy(receiver: DamageReceiver = "Chariot") {
return this.page.getByTestId(`htd-${receiver}`);
}ObjectDamageCalculatorPage.selectDamageTypee2e/pages/object-damage-calculator/object-damage-calculator-page.ts:51
No JSDoc
async selectDamageType(damageType: DamageType) {
await this.page
.locator(`label[for="chip-radio-damage-${damageType}"]`)
.click();
}ObjectDamageCalculatorPagee2e/pages/object-damage-calculator/object-damage-calculator-page.ts:7
No JSDoc
ObjectDamageCalculatorPage.changeWeapone2e/pages/object-damage-calculator/object-damage-calculator-page.ts:46
No JSDoc
async changeWeapon(name: string) {
await this.locators.backToWeaponLandingLink.click();
await this.pickWeapon(name);
}ObjectDamageCalculatorPage.toggleMultipliere2e/pages/object-damage-calculator/object-damage-calculator-page.ts:61
No JSDoc
async toggleMultiplier() {
await this.locators.multiplierSwitch.click();
}ObjectDamageCalculatorPage.selectAbilityPointse2e/pages/object-damage-calculator/object-damage-calculator-page.ts:57
No JSDoc
async selectAbilityPoints(abilityPoints: number) {
await this.locators.abilityPointsSelect.selectOption(String(abilityPoints));
}