53 lines
1.4 KiB
JavaScript
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}`);
|
|
}
|
|
}
|