Top search views different x rank placements Renders/xsearch
Top search page Arrange
Create user → player
const player = await factories.UserFactory .create ();Create X rank placement ...MONTH_YEAR player user id player.id name “Brasario” mode “TC” region “WEST”
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: player.id,
name: PLACED_PLAYER_NAME ,
mode: "TC" ,
region: "WEST" ,
});Top search page Act
Open the top search page
await topSearch.goto ();Select leaderboard ...MONTH_YEAR mode “TC” region “WEST”
await topSearch.selectLeaderboard ({
...MONTH_YEAR ,
mode: "TC" ,
region: "WEST" ,
});Assert
row 0 contains “Brasario”
await expect (topSearch.placements.row (0 )).toContainText (PLACED_PLAYER_NAME );Source test ("views different x rank placements" , async ({ page, factories }) => {
const player = await factories.UserFactory .create ();
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: player.id,
name: PLACED_PLAYER_NAME ,
mode: "TC" ,
region: "WEST" ,
});
const topSearch = new TopSearchPage (page);
await topSearch.goto ();
await topSearch.selectLeaderboard ({
...MONTH_YEAR ,
mode: "TC" ,
region: "WEST" ,
});
await expect (topSearch.placements.row (0 )).toContainText (PLACED_PLAYER_NAME );
})navigates from user page to x search player page to x search Renders/u/:identifier /u/:identifier /xsearch /*
User page Top search player page Top search page Arrange
Create user → rival
const rival = await factories.UserFactory .create ();the admin places first, so their row is the one the leaderboard opens on
Create X rank placement ...MONTH_YEAR player Sendou name “Sendou” mode “SZ” region “WEST”
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: ADMIN_ID ,
name: "Sendou" ,
mode: "SZ" ,
region: "WEST" ,
});Create X rank placement ...MONTH_YEAR player user id rival.id name “Twig?” mode “SZ” region “WEST”
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: rival.id,
name: RIVAL_NAME ,
mode: "SZ" ,
region: "WEST" ,
});User page Act
Open the user page Sendou
await user.goto (ADMIN_ID );Open placements → playerPlacements
const playerPlacements = await user.openPlacements ();Top search player page Assert
heading contains “Sendou”
await expect (playerPlacements.locators.heading).toContainText ("Sendou" );Act
Open leaderboard 0 → topSearch
const topSearch = await playerPlacements.openLeaderboard (0 );Top search page Assert
row 1 contains “Twig?”
await expect (topSearch.placements.row (1 )).toContainText (RIVAL_NAME );Source test ("navigates from user page to x search player page to x search" , async ({
page,
factories,
}) => {
const rival = await factories.UserFactory .create ();
// the admin places first, so their row is the one the leaderboard opens on
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: ADMIN_ID ,
name: "Sendou" ,
mode: "SZ" ,
region: "WEST" ,
});
await factories.XRankPlacementFactory .create ({
...MONTH_YEAR ,
playerUserId: rival.id,
name: RIVAL_NAME ,
mode: "SZ" ,
region: "WEST" ,
});
const user = new UserPage (page);
await user.goto (ADMIN_ID );
const playerPlacements = await user.openPlacements ();
await expect (playerPlacements.locators.heading).toContainText ("Sendou" );
const topSearch = await playerPlacements.openLeaderboard (0 );
await expect (topSearch.placements.row (1 )).toContainText (RIVAL_NAME );
})TopSearchPage.gotoe2e/pages/top-search/top-search-page.ts:41
No JSDoc
async goto () {
await navigate ({ page: this .page, url: topSearchPage () });
}TopSearchPage.selectLeaderboarde2e/pages/top-search/top-search-page.ts:45
No JSDoc
async selectLeaderboard ({ month, year, mode, region }: Leaderboard ) {
await this .locators.seasonMonthsSelect.click ();
// the trigger renders a copy of the selected option, so scope to the listbox
await this .page
.getByRole ("listbox" )
.getByTestId (`xsearch-select-option-${month}-${year}` )
.click ();
await this .page.getByText (MODE_NAMES [mode], { exact: true }).click ();
await this .page.getByText (DIVISION_NAMES [region], { exact: true }).click ();
}TopSearchPagee2e/pages/top-search/top-search-page.ts:28
UserPage.gotoe2e/pages/user/user-page.ts:35
No JSDoc
async goto (userId: number ) {
await navigate ({ page: this .page, url: userPage ({ id: userId }) });
}UserPage.openPlacementse2e/pages/user/user-page.ts:117
async openPlacements () {
await this .widget ("x-rank-peaks" ).getByRole ("link" ).click ();
return new TopSearchPlayerPage (this .page);
}TopSearchPlayerPage.locators.headinge2e/pages/top-search/top-search-player-page.ts:18
No JSDoc
this .page.getByRole ("heading" , { name: /placements$/ })TopSearchPlayerPage.openLeaderboarde2e/pages/top-search/top-search-player-page.ts:27
async openLeaderboard (nth: number ) {
await this .placements.row (nth).click ();
return new TopSearchPage (this .page);
}UserPagee2e/pages/user/user-page.ts:12
No JSDoc
TopSearchPlayerPagee2e/pages/top-search/top-search-player-page.ts:8