68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
import http from 'k6/http';
|
|
import { check } from 'k6';
|
|
import { BASE_URL, httpConfig } from '../config.js';
|
|
|
|
export function chessUserJourney() {
|
|
const username = `user_${Date.now()}_${__VU}_${Math.random().toString(36).substring(2, 10)}`;
|
|
const email = `${username}@test.com`;
|
|
const password = 'Password123!';
|
|
|
|
// Register
|
|
const registerRes = http.post(`${BASE_URL}/api/account`, JSON.stringify({
|
|
username,
|
|
email,
|
|
password,
|
|
}), httpConfig);
|
|
check(registerRes, { 'Register: status 200': (r) => r.status === 200 });
|
|
|
|
// Login
|
|
const loginRes = http.post(`${BASE_URL}/api/account/login`, JSON.stringify({
|
|
username,
|
|
password,
|
|
}), httpConfig);
|
|
check(loginRes, { 'Login: status 200': (r) => r.status === 200 });
|
|
|
|
const jwt = loginRes.json('token');
|
|
if (!jwt) {
|
|
console.error('Failed to get JWT token');
|
|
return;
|
|
}
|
|
|
|
const authHeaders = {
|
|
...httpConfig.headers,
|
|
'Authorization': `Bearer ${jwt}`,
|
|
};
|
|
|
|
// Import Game
|
|
const importRes = http.post(`${BASE_URL}/api/board/game/import/fen`, JSON.stringify({
|
|
fen: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1',
|
|
white: { id: username, displayName: username },
|
|
black: { id: `opponent_${__VU}`, displayName: 'Opponent' },
|
|
timeControl: { limitSeconds: 300, incrementSeconds: 3 },
|
|
}), { headers: authHeaders, timeout: '30s' });
|
|
check(importRes, { 'Import Game: status 200/201': (r) => r.status === 200 || r.status === 201 });
|
|
|
|
const gameId = importRes.json('gameId');
|
|
if (!gameId) {
|
|
console.error('Failed to get gameId');
|
|
return;
|
|
}
|
|
|
|
// Make moves
|
|
const moves = ['e2e4', 'e7e5', 'g1f3'];
|
|
for (const uci of moves) {
|
|
const moveRes = http.post(`${BASE_URL}/api/board/game/${gameId}/move/${uci}`, null, {
|
|
headers: authHeaders,
|
|
timeout: '30s',
|
|
});
|
|
check(moveRes, { [`Move ${uci}: status 200/201`]: (r) => r.status === 200 || r.status === 201 });
|
|
}
|
|
|
|
// Resign
|
|
const resignRes = http.post(`${BASE_URL}/api/board/game/${gameId}/resign`, null, {
|
|
headers: authHeaders,
|
|
timeout: '30s',
|
|
});
|
|
check(resignRes, { 'Resign: status 200/201/204': (r) => [200, 201, 204].includes(r.status) });
|
|
}
|