Focus player records and add squad leaderboards
This commit is contained in:
@@ -1,15 +1,38 @@
|
||||
import { expect, it, vi } from 'vitest';
|
||||
import { beforeEach, expect, it, vi } from 'vitest';
|
||||
import { GET } from '../../src/routes/api/leaderboard/+server.js';
|
||||
import { load } from '../../src/routes/leaderboard/+page.server.js';
|
||||
import { defaultLeaderboardMap } from '../../src/lib/server/fleet/leaderboard.js';
|
||||
vi.mock('../../src/routes/api/leaderboard/+server.js', () => ({ GET: vi.fn() }));
|
||||
vi.mock('../../src/lib/server/fleet/leaderboard.js', () => ({ defaultLeaderboardMap: vi.fn() }));
|
||||
beforeEach(() => { vi.clearAllMocks(); });
|
||||
it('requests the same 25-player page on initial load and preserves filters without mutating the page URL', async () => {
|
||||
vi.mocked(GET).mockResolvedValueOnce(new Response(JSON.stringify({ entries: [], limit: 25, offset: 25 })));
|
||||
const url = new URL('http://localhost/leaderboard?game=t5&map=theater&metric=kills&q=123&offset=25&limit=100');
|
||||
const url = new URL('http://localhost/leaderboard?game=t5&map=theater&players=2&metric=kills&q=123&offset=25&limit=100');
|
||||
const original = url.href;
|
||||
const data = await load({ url });
|
||||
const requested = vi.mocked(GET).mock.calls[0][0].url;
|
||||
expect(requested.searchParams.get('limit')).toBe('25');
|
||||
for (const key of ['game', 'map', 'metric', 'q', 'offset']) expect(requested.searchParams.get(key)).toBe(url.searchParams.get(key));
|
||||
for (const key of ['game', 'map', 'players', 'metric', 'q', 'offset']) expect(requested.searchParams.get(key)).toBe(url.searchParams.get(key));
|
||||
expect(url.href).toBe(original);
|
||||
expect(data.leaderboard.limit).toBe(25);
|
||||
});
|
||||
|
||||
it('opens a missing map at a recorded map in the selected game and squad without a whole-fleet report', async () => {
|
||||
vi.mocked(defaultLeaderboardMap).mockReturnValue('t6:town');
|
||||
const url = new URL('http://localhost/leaderboard?game=t6&players=2&metric=kills&q=Cherry&offset=25');
|
||||
const original = url.href;
|
||||
await expect(load({ url })).rejects.toMatchObject({ status: 307, location: '/leaderboard?game=t6&players=2&metric=kills&q=Cherry&map=t6%3Atown' });
|
||||
expect(defaultLeaderboardMap).toHaveBeenCalledWith({ game: 't6', players: 2 });
|
||||
expect(GET).not.toHaveBeenCalled(); expect(url.href).toBe(original);
|
||||
});
|
||||
|
||||
it('honors explicit All maps and handles an empty recorded-map catalog without redirecting', async () => {
|
||||
vi.mocked(GET).mockResolvedValue(new Response(JSON.stringify({ entries: [], maps: [], limit: 25 })));
|
||||
await load({ url: new URL('http://localhost/leaderboard?map=&players=3') });
|
||||
expect(defaultLeaderboardMap).not.toHaveBeenCalled();
|
||||
expect(vi.mocked(GET).mock.calls[0][0].url.searchParams.get('map')).toBe('');
|
||||
vi.mocked(defaultLeaderboardMap).mockReturnValue(null);
|
||||
vi.mocked(GET).mockResolvedValueOnce(new Response(JSON.stringify({ entries: [], maps: [], limit: 25 })));
|
||||
expect(await load({ url: new URL('http://localhost/leaderboard') })).toMatchObject({ leaderboard: { entries: [], maps: [] } });
|
||||
expect(defaultLeaderboardMap).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user