54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
JavaScript
// Journey: business email verification end-to-end
|
|
//
|
|
// Endpoints exercised:
|
|
// POST /api/v1/auth/register
|
|
// POST /api/v1/auth/register/confirm
|
|
// POST /api/v1/members/me/verifications/email/start
|
|
// POST /api/v1/members/me/verifications/email/confirm
|
|
// GET /api/v1/members/me (verify business_email_verified flag is true)
|
|
import { get, post, checkEnvelope } from '../lib/http.js';
|
|
import { registerAndConfirm } from '../lib/auth.js';
|
|
import { fetchEmailOTP } from '../lib/otp.js';
|
|
import { unique } from '../lib/config.js';
|
|
|
|
export const options = {
|
|
vus: 1,
|
|
iterations: 1,
|
|
thresholds: { checks: ['rate==1.0'] },
|
|
};
|
|
|
|
export default function () {
|
|
const { tokens } = registerAndConfirm();
|
|
const bearer = { Authorization: `Bearer ${tokens.access_token}` };
|
|
|
|
// Use a fresh business email distinct from the registration one so the
|
|
// verify OTP can be distinguished from the registration OTP in MailHog.
|
|
const businessEmail = `${unique('biz')}@k6.local`;
|
|
const since = Date.now() - 1000; // tolerate slight clock skew
|
|
|
|
const startRes = post(
|
|
'/api/v1/members/me/verifications/email/start',
|
|
{ target: businessEmail },
|
|
bearer,
|
|
);
|
|
const start = checkEnvelope(startRes, 'POST /me/verifications/email/start').data;
|
|
if (!start.challenge_id) throw new Error('email/start: missing challenge_id');
|
|
|
|
const code = fetchEmailOTP(businessEmail, { since });
|
|
|
|
const confirmRes = post(
|
|
'/api/v1/members/me/verifications/email/confirm',
|
|
{ challenge_id: start.challenge_id, code },
|
|
bearer,
|
|
);
|
|
checkEnvelope(confirmRes, 'POST /me/verifications/email/confirm');
|
|
|
|
const me = checkEnvelope(get('/api/v1/members/me', bearer), 'GET /members/me (post-verify)').data;
|
|
if (me.business_email !== businessEmail) {
|
|
throw new Error(`business_email not set: got=${me.business_email}`);
|
|
}
|
|
if (me.business_email_verified !== true) {
|
|
throw new Error(`business_email_verified should be true: got=${me.business_email_verified}`);
|
|
}
|
|
}
|