template-monorepo/test/k6/journeys/register_resume_full.js

53 lines
1.4 KiB
JavaScript

// Journey: 未完成註冊 → resume → confirm OTP
//
// Endpoints:
// POST /api/v1/auth/register
// POST /api/v1/auth/register/resume
// POST /api/v1/auth/register/confirm
// GET /api/v1/members/me
import { sleep } from 'k6';
import { get, checkEnvelope } from '../lib/http.js';
import { cfg } from '../lib/config.js';
import {
makeIdentity,
registerEmail,
registerResume,
confirmRegister,
} from '../lib/auth.js';
export const options = {
vus: 1,
iterations: 1,
thresholds: { checks: ['rate==1.0'] },
};
export default function () {
const identity = makeIdentity('resume-journey');
registerEmail({
email: identity.email,
password: identity.password,
displayName: identity.displayName,
});
sleep(cfg.resendCooldownSeconds + 1);
const resumed = registerResume({ email: identity.email });
const tokens = confirmRegister({
email: identity.email,
challengeId: resumed.challenge_id,
});
if (!tokens.access_token) {
throw new Error('register/resume journey: missing access_token after confirm');
}
const me = checkEnvelope(
get('/api/v1/members/me', { Authorization: `Bearer ${tokens.access_token}` }),
'GET /members/me (after resume confirm)',
).data;
if (me.uid !== tokens.uid) {
throw new Error('register/resume journey: me.uid mismatch');
}
if (me.status !== 'active') {
throw new Error(`register/resume journey: expected active status, got ${me.status}`);
}
}