mirror of
https://github.com/logto-io/logto.git
synced 2024-12-30 20:33:54 -05:00
test: add sad paths for reset password flow (#4298)
This commit is contained in:
parent
74849dde22
commit
24686cf0bb
2 changed files with 113 additions and 0 deletions
|
@ -0,0 +1,113 @@
|
||||||
|
import { ConnectorType } from '@logto/connector-kit';
|
||||||
|
import { InteractionEvent } from '@logto/schemas';
|
||||||
|
|
||||||
|
import { suspendUser } from '#src/api/admin-user.js';
|
||||||
|
import {
|
||||||
|
patchInteractionIdentifiers,
|
||||||
|
putInteraction,
|
||||||
|
putInteractionProfile,
|
||||||
|
sendVerificationCode,
|
||||||
|
} from '#src/api/interaction.js';
|
||||||
|
import { initClient } from '#src/helpers/client.js';
|
||||||
|
import {
|
||||||
|
clearConnectorsByTypes,
|
||||||
|
setEmailConnector,
|
||||||
|
setSmsConnector,
|
||||||
|
} from '#src/helpers/connector.js';
|
||||||
|
import { expectRejects, readVerificationCode } from '#src/helpers/index.js';
|
||||||
|
import { generateNewUser, generateNewUserProfile } from '#src/helpers/user.js';
|
||||||
|
import { generatePassword } from '#src/utils.js';
|
||||||
|
|
||||||
|
describe('reset password flow sad path', () => {
|
||||||
|
it('Should fail to reset password with email if related user is not exist', async () => {
|
||||||
|
await setEmailConnector();
|
||||||
|
|
||||||
|
const { primaryEmail } = generateNewUserProfile({ primaryEmail: true });
|
||||||
|
|
||||||
|
const client = await initClient();
|
||||||
|
|
||||||
|
await client.successSend(putInteraction, { event: InteractionEvent.ForgotPassword });
|
||||||
|
await client.successSend(sendVerificationCode, {
|
||||||
|
email: primaryEmail,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { code: verificationCode } = await readVerificationCode();
|
||||||
|
await client.successSend(patchInteractionIdentifiers, {
|
||||||
|
email: primaryEmail,
|
||||||
|
verificationCode,
|
||||||
|
});
|
||||||
|
|
||||||
|
await client.successSend(putInteractionProfile, { password: generatePassword() });
|
||||||
|
await expectRejects(client.submitInteraction(), {
|
||||||
|
code: 'user.user_not_exist',
|
||||||
|
statusCode: 404,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Clear
|
||||||
|
await clearConnectorsByTypes([ConnectorType.Email]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should fail to reset password with phone if related user is not exist', async () => {
|
||||||
|
await setSmsConnector();
|
||||||
|
|
||||||
|
const { primaryPhone } = generateNewUserProfile({ primaryPhone: true });
|
||||||
|
|
||||||
|
const client = await initClient();
|
||||||
|
|
||||||
|
await client.successSend(putInteraction, { event: InteractionEvent.ForgotPassword });
|
||||||
|
await client.successSend(sendVerificationCode, {
|
||||||
|
phone: primaryPhone,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { code: verificationCode } = await readVerificationCode();
|
||||||
|
await client.successSend(patchInteractionIdentifiers, {
|
||||||
|
phone: primaryPhone,
|
||||||
|
verificationCode,
|
||||||
|
});
|
||||||
|
|
||||||
|
await client.successSend(putInteractionProfile, { password: generatePassword() });
|
||||||
|
await expectRejects(client.submitInteraction(), {
|
||||||
|
code: 'user.user_not_exist',
|
||||||
|
statusCode: 404,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Clear
|
||||||
|
await clearConnectorsByTypes([ConnectorType.Sms]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should fail to reset password if related user is suspended', async () => {
|
||||||
|
await setSmsConnector();
|
||||||
|
|
||||||
|
const {
|
||||||
|
user,
|
||||||
|
userProfile: { primaryPhone },
|
||||||
|
} = await generateNewUser({
|
||||||
|
primaryPhone: true,
|
||||||
|
password: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
await suspendUser(user.id, true);
|
||||||
|
|
||||||
|
const client = await initClient();
|
||||||
|
|
||||||
|
await client.successSend(putInteraction, { event: InteractionEvent.ForgotPassword });
|
||||||
|
await client.successSend(sendVerificationCode, {
|
||||||
|
phone: primaryPhone,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { code: verificationCode } = await readVerificationCode();
|
||||||
|
await client.successSend(patchInteractionIdentifiers, {
|
||||||
|
phone: primaryPhone,
|
||||||
|
verificationCode,
|
||||||
|
});
|
||||||
|
|
||||||
|
await client.successSend(putInteractionProfile, { password: generatePassword() });
|
||||||
|
await expectRejects(client.submitInteraction(), {
|
||||||
|
code: 'user.suspended',
|
||||||
|
statusCode: 401,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Clear
|
||||||
|
await clearConnectorsByTypes([ConnectorType.Sms]);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue