mirror of
https://github.com/toeverything/AFFiNE.git
synced 2024-12-24 15:51:55 +03:00
110 lines
2.8 KiB
TypeScript
110 lines
2.8 KiB
TypeScript
import {
|
|
getCurrentMailMessageCount,
|
|
getLatestMailMessage,
|
|
} from '@affine-test/kit/utils/cloud';
|
|
import type { INestApplication } from '@nestjs/common';
|
|
import type { TestFn } from 'ava';
|
|
import ava from 'ava';
|
|
|
|
import { AuthService } from '../src/core/auth/service';
|
|
import { MailService } from '../src/fundamentals/mailer';
|
|
import {
|
|
changeEmail,
|
|
createTestingApp,
|
|
sendChangeEmail,
|
|
sendVerifyChangeEmail,
|
|
signUp,
|
|
} from './utils';
|
|
|
|
const test = ava as TestFn<{
|
|
app: INestApplication;
|
|
auth: AuthService;
|
|
mail: MailService;
|
|
}>;
|
|
|
|
test.beforeEach(async t => {
|
|
const { app } = await createTestingApp();
|
|
const auth = app.get(AuthService);
|
|
const mail = app.get(MailService);
|
|
t.context.app = app;
|
|
t.context.auth = auth;
|
|
t.context.mail = mail;
|
|
});
|
|
|
|
test.afterEach.always(async t => {
|
|
await t.context.app.close();
|
|
});
|
|
|
|
test('change email', async t => {
|
|
const { mail, app } = t.context;
|
|
if (mail.hasConfigured()) {
|
|
const u1Email = 'u1@affine.pro';
|
|
const u2Email = 'u2@affine.pro';
|
|
const tokenRegex = /token=3D([^"&]+)/;
|
|
|
|
const u1 = await signUp(app, 'u1', u1Email, '1');
|
|
|
|
const primitiveMailCount = await getCurrentMailMessageCount();
|
|
|
|
await sendChangeEmail(app, u1.token.token, u1Email, 'affine.pro');
|
|
|
|
const afterSendChangeMailCount = await getCurrentMailMessageCount();
|
|
t.is(
|
|
primitiveMailCount + 1,
|
|
afterSendChangeMailCount,
|
|
'failed to send change email'
|
|
);
|
|
const changeEmailContent = await getLatestMailMessage();
|
|
|
|
const changeTokenMatch = changeEmailContent.Content.Body.match(tokenRegex);
|
|
const changeEmailToken = changeTokenMatch
|
|
? decodeURIComponent(changeTokenMatch[1].replace(/=\r\n/, ''))
|
|
: null;
|
|
|
|
t.not(
|
|
changeEmailToken,
|
|
null,
|
|
'fail to get change email token from email content'
|
|
);
|
|
|
|
await sendVerifyChangeEmail(
|
|
app,
|
|
u1.token.token,
|
|
changeEmailToken as string,
|
|
u2Email,
|
|
'affine.pro'
|
|
);
|
|
|
|
const afterSendVerifyMailCount = await getCurrentMailMessageCount();
|
|
|
|
t.is(
|
|
afterSendChangeMailCount + 1,
|
|
afterSendVerifyMailCount,
|
|
'failed to send verify email'
|
|
);
|
|
const verifyEmailContent = await getLatestMailMessage();
|
|
|
|
const verifyTokenMatch = verifyEmailContent.Content.Body.match(tokenRegex);
|
|
const verifyEmailToken = verifyTokenMatch
|
|
? decodeURIComponent(verifyTokenMatch[1].replace(/=\r\n/, ''))
|
|
: null;
|
|
|
|
t.not(
|
|
verifyEmailToken,
|
|
null,
|
|
'fail to get verify change email token from email content'
|
|
);
|
|
|
|
await changeEmail(app, u1.token.token, verifyEmailToken as string, u2Email);
|
|
|
|
const afterNotificationMailCount = await getCurrentMailMessageCount();
|
|
|
|
t.is(
|
|
afterSendVerifyMailCount + 1,
|
|
afterNotificationMailCount,
|
|
'failed to send notification email'
|
|
);
|
|
}
|
|
t.pass();
|
|
});
|