Skip to content

Build analyzer · E2E tests

0 modules · 0 exports · 0 repositories · 3 e2e tests · 1 route

  • NN-ZAP
  • Arrange data setup
  • Act what the user does
  • Assert what is expected

Build Analyzer

Renders/analyzer/u/:identifier/u/:identifier/builds/new

NN-ZAP
Analyzer page
Act
  1. Open the analyzer page
    await analyzer.goto();
Assert
  1. new build prompt is not visible
    await isNotVisible(analyzer.locators.newBuildPrompt);
Act
  1. Pick weapon “Splattershot”
    await analyzer.pickWeapon("Splattershot");
  2. Open stat category “movement-category”
    await analyzer.openStatCategory("movement-category");
  3. Stat card “swim-speed” → swimSpeed
    const swimSpeed = analyzer.statCard("swim-speed");
  4. swimSpeedSplattershot = (await swimSpeed.baseValue.textContent())!
    const swimSpeedSplattershot = (await swimSpeed.baseValue.textContent())!;
  5. Change weapon “Luna Blaster”
    await analyzer.changeWeapon("Luna Blaster");
  6. Open stat category “movement-category”
    await analyzer.openStatCategory("movement-category");
Analyzer stat card
Assert
  1. Luna Blaster is a light weapon so it should have lower base swim speed than Splattershot

    base value does not read swimSpeedSplattershot
    await expect(swimSpeed.baseValue).not.toHaveText(swimSpeedSplattershot);
  2. build value title is not visible
    await isNotVisible(swimSpeed.buildValueTitle);
Analyzer page
Act
  1. Add ability “SSU”
    await analyzer.addAbility("SSU");
Analyzer stat card
Assert
  1. build value title is visible
    await expect(swimSpeed.buildValueTitle).toBeVisible();
Analyzer page
Act
  1. Open new build prompt → buildForm
    const buildForm = await analyzer.openNewBuildPrompt();
Build form page
Assert
  1. gear select “HEAD” is visible
    await expect(buildForm.gearSelect("HEAD")).toBeVisible();
  2. weapon pool item “Luna Blaster” is visible
    await expect(buildForm.weaponPoolItem("Luna Blaster")).toBeVisible();
  3. ability “SSU” is visible
    await expect(buildForm.ability("SSU")).toBeVisible();
Source
test("analyzes a build and links to new build page with same abilities", async ({
	page,
}) => {
	await impersonate(page, NZAP_TEST_ID);

	const analyzer = new AnalyzerPage(page);
	await analyzer.goto();

	await isNotVisible(analyzer.locators.newBuildPrompt);

	await analyzer.pickWeapon("Splattershot");

	await analyzer.openStatCategory("movement-category");

	const swimSpeed = analyzer.statCard("swim-speed");
	const swimSpeedSplattershot = (await swimSpeed.baseValue.textContent())!;

	await analyzer.changeWeapon("Luna Blaster");
	await analyzer.openStatCategory("movement-category");

	// Luna Blaster is a light weapon so it should have lower base swim speed than Splattershot
	await expect(swimSpeed.baseValue).not.toHaveText(swimSpeedSplattershot);

	await isNotVisible(swimSpeed.buildValueTitle);
	await analyzer.addAbility("SSU");
	await expect(swimSpeed.buildValueTitle).toBeVisible();

	const buildForm = await analyzer.openNewBuildPrompt();
	await expect(buildForm.gearSelect("HEAD")).toBeVisible();
	await expect(buildForm.weaponPoolItem("Luna Blaster")).toBeVisible();
	await expect(buildForm.ability("SSU")).toBeVisible();
})

compares builds

Renders/analyzer

LOLogged out
Analyzer page
Act
  1. Open the analyzer page
    await analyzer.goto();
  2. Pick weapon “Splattershot”
    await analyzer.pickWeapon("Splattershot");
  3. Select tab “build2”
    await analyzer.selectTab("build2");
  4. Selected ability “SSU” → swimSpeedAbility
    const swimSpeedAbility = analyzer.selectedAbility("SSU");
  5. Add ability “SSU”
    await analyzer.addAbility("SSU");
Assert
  1. swimSpeedAbility is visible
    await expect(swimSpeedAbility).toBeVisible();
Act
  1. can't add abilities to build 2 if build 1 is empty -> they automatically go to build 1

    Select tab “build2”
    await analyzer.selectTab("build2");
Assert
  1. swimSpeedAbility is not visible
    await isNotVisible(swimSpeedAbility);
Act
  1. Add ability “SSU”
    await analyzer.addAbility("SSU");
Assert
  1. swimSpeedAbility is visible
    await expect(swimSpeedAbility).toBeVisible();
Act
  1. Add ability “SSU”
    await analyzer.addAbility("SSU");
Assert
  1. swimSpeedAbility count is 2
    await expect(swimSpeedAbility).toHaveCount(2);
Act
  1. Select tab “ap”
    await analyzer.selectTab("ap");
Assert
  1. first ap comparison 1 contains “10AP”
    await expect(analyzer.apComparison(1).first()).toContainText("10AP");
  2. first ap comparison 2 contains “13AP”
    await expect(analyzer.apComparison(2).first()).toContainText("13AP");
  3. build value title contains “Build 2”
    await expect(analyzer.statCard("swim-speed").buildValueTitle).toContainText(
    	"Build 2",
    );
Source
test("compares builds", async ({ page }) => {
	const analyzer = new AnalyzerPage(page);
	await analyzer.goto();
	await analyzer.pickWeapon("Splattershot");

	await analyzer.selectTab("build2");

	const swimSpeedAbility = analyzer.selectedAbility("SSU");

	await analyzer.addAbility("SSU");
	await expect(swimSpeedAbility).toBeVisible();

	// can't add abilities to build 2 if build 1 is empty
	// -> they automatically go to build 1
	await analyzer.selectTab("build2");
	await isNotVisible(swimSpeedAbility);

	await analyzer.addAbility("SSU");
	await expect(swimSpeedAbility).toBeVisible();
	await analyzer.addAbility("SSU");
	await expect(swimSpeedAbility).toHaveCount(2);

	await analyzer.selectTab("ap");
	await expect(analyzer.apComparison(1).first()).toContainText("10AP");
	await expect(analyzer.apComparison(2).first()).toContainText("13AP");

	await expect(analyzer.statCard("swim-speed").buildValueTitle).toContainText(
		"Build 2",
	);
})

keeps ability effects switched on while either build is edited

Renders/analyzer

LOLogged out
Analyzer page
Act
  1. Open the analyzer page
    await analyzer.goto();
  2. Pick weapon “Splattershot”
    await analyzer.pickWeapon("Splattershot");
  3. Effect switch “Opening Gambit” → openingGambit
    const openingGambit = analyzer.effectSwitch("Opening Gambit");
  4. Effect switch “Drop Roller” → dropRoller
    const dropRoller = analyzer.effectSwitch("Drop Roller");
  5. Add ability “OG”
    await analyzer.addAbility("OG");
  6. Toggle effect “Opening Gambit”
    await analyzer.toggleEffect("Opening Gambit");
Assert
  1. openingGambit is checked
    await expect(openingGambit).toBeChecked();
Act
  1. Select tab “build2”
    await analyzer.selectTab("build2");
  2. Add ability “DR”
    await analyzer.addAbility("DR");
  3. Toggle effect “Drop Roller”
    await analyzer.toggleEffect("Drop Roller");
Assert
  1. dropRoller is checked
    await expect(dropRoller).toBeChecked();
Act
  1. Add ability “SSU”
    await analyzer.addAbility("SSU");
Assert
  1. selected ability “SSU” is visible
    await expect(analyzer.selectedAbility("SSU")).toBeVisible();
  2. openingGambit is checked
    await expect(openingGambit).toBeChecked();
  3. dropRoller is checked
    await expect(dropRoller).toBeChecked();
Act
  1. Select tab “build1”
    await analyzer.selectTab("build1");
  2. Add ability “SSU”
    await analyzer.addAbility("SSU");
Assert
  1. selected ability “SSU” is visible
    await expect(analyzer.selectedAbility("SSU")).toBeVisible();
  2. openingGambit is checked
    await expect(openingGambit).toBeChecked();
  3. dropRoller is checked
    await expect(dropRoller).toBeChecked();
Act
  1. Drop Roller's 30AP on top of the SSU main build 2 has

    Select tab “ap”
    await analyzer.selectTab("ap");
Assert
  1. filter has text /^40AP$/ count is 1
    await expect(
    	analyzer.apComparison(2).filter({ hasText: /^40AP$/ }),
    ).toHaveCount(1);
Source
test("keeps ability effects switched on while either build is edited", async ({
	page,
}) => {
	const analyzer = new AnalyzerPage(page);
	await analyzer.goto();
	await analyzer.pickWeapon("Splattershot");

	const openingGambit = analyzer.effectSwitch("Opening Gambit");
	const dropRoller = analyzer.effectSwitch("Drop Roller");

	await analyzer.addAbility("OG");
	await analyzer.toggleEffect("Opening Gambit");
	await expect(openingGambit).toBeChecked();

	await analyzer.selectTab("build2");
	await analyzer.addAbility("DR");
	await analyzer.toggleEffect("Drop Roller");
	await expect(dropRoller).toBeChecked();

	await analyzer.addAbility("SSU");
	await expect(analyzer.selectedAbility("SSU")).toBeVisible();
	await expect(openingGambit).toBeChecked();
	await expect(dropRoller).toBeChecked();

	await analyzer.selectTab("build1");
	await analyzer.addAbility("SSU");
	await expect(analyzer.selectedAbility("SSU")).toBeVisible();
	await expect(openingGambit).toBeChecked();
	await expect(dropRoller).toBeChecked();

	// Drop Roller's 30AP on top of the SSU main build 2 has
	await analyzer.selectTab("ap");
	await expect(
		analyzer.apComparison(2).filter({ hasText: /^40AP$/ }),
	).toHaveCount(1);
})