Public Access
fix(stats): open game detail pages from stat lists, perfect games clickable
Add perfect games click-through on the dashboard. Remove Steam store links from game lists. Stat numbers with count 0 are not clickable. Tests cover the perfect-games click, zero guards, and owner versus visitor behavior.
This commit is contained in:
1 parent
777ba87fd6
commit
8b94a25844
27 files changed
+270
-51
No files matched your search
@@ -290,4 +290,69 @@ describe('PublicProfilePage', () => {
|
||||
delete library.stats;
|
||||
}
|
||||
});
|
||||
|
||||
const gamesRoute = {'GET /api/public/profiles/library/stats/games': json(200, {
|
||||
content: [{appid: 1, name: 'Backlogged', status: 'BACKLOG', playtimeMinutes: 0}], page: 0, size: 40, totalElements: 1, totalPages: 1})};
|
||||
const topGamesStats = {pile: null, trend: null, taste: null, finished: null, habits: null,
|
||||
topGames: {mostPlayed: [{appid: 620, name: 'Portal 2', imageUrl: null, minutes: 900}], mostLoyal: null}};
|
||||
|
||||
it('theOwnerOpensTheDetailPageFromTheList', async () => {
|
||||
localStorage.setItem('tbp_session', '1');
|
||||
try {
|
||||
mockBackends({me: {displayName: 'lobo', role: 'USER'}, extra: gamesRoute});
|
||||
renderPage();
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', {name: 'BACKLOG.STATUS.BACKLOG: 142'}));
|
||||
|
||||
expect((await screen.findByRole('link', {name: /Backlogged/})).getAttribute('href')).toBe('/library/1');
|
||||
} finally {
|
||||
localStorage.clear();
|
||||
}
|
||||
});
|
||||
|
||||
it('theOwnerTileRowsOpenTheDetailPage', async () => {
|
||||
localStorage.setItem('tbp_session', '1');
|
||||
library.stats = topGamesStats;
|
||||
try {
|
||||
mockBackends({me: {displayName: 'lobo', role: 'USER'}, style: {tiles: [{id: 'STATS_TOP_GAMES', size: 'M'}]}});
|
||||
renderPage();
|
||||
|
||||
expect((await screen.findByRole('link', {name: /Portal 2/})).getAttribute('href')).toBe('/library/620');
|
||||
} finally {
|
||||
delete library.stats;
|
||||
localStorage.clear();
|
||||
}
|
||||
});
|
||||
|
||||
it('aVisitorSeesTileRowsWithoutLinks', async () => {
|
||||
library.stats = topGamesStats;
|
||||
try {
|
||||
mockBackends({style: {tiles: [{id: 'STATS_TOP_GAMES', size: 'M'}]}});
|
||||
const {container} = renderPage();
|
||||
|
||||
await screen.findByText('Portal 2');
|
||||
|
||||
expect(screen.queryByRole('link', {name: /Portal 2/})).toBeNull();
|
||||
expect(container.querySelector('a[href*="steampowered"]')).toBeNull();
|
||||
} finally {
|
||||
delete library.stats;
|
||||
}
|
||||
});
|
||||
|
||||
it('opensTheGamesBehindPerfectGames', async () => {
|
||||
library.perfectGames = 12;
|
||||
library.averageCompletion = 64.5;
|
||||
try {
|
||||
mockBackends({extra: gamesRoute});
|
||||
renderPage();
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', {name: /PROFILE\.PERFECT_GAMES: 12/}));
|
||||
|
||||
await screen.findByText('Backlogged');
|
||||
expect(fetch.mock.calls.find(([url]) => url.includes('/stats/games'))[0]).toContain('key=PERFECT');
|
||||
} finally {
|
||||
delete library.perfectGames;
|
||||
delete library.averageCompletion;
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user