Add shared registration invite helper and use it for admin-created users

This commit is contained in:
NeilClack
2026-09-10 14:08:51 -05:00
parent ae8d661364
commit 84c905c9ff
3 changed files with 28 additions and 23 deletions
@@ -14,12 +14,12 @@ vi.mock('$lib/db', () => ({
}
}));
const { requestPasswordReset } = vi.hoisted(() => ({
requestPasswordReset: vi.fn()
const { sendRegistrationInvite } = vi.hoisted(() => ({
sendRegistrationInvite: vi.fn()
}));
vi.mock('$lib/auth', () => ({
auth: { api: { requestPasswordReset } }
vi.mock('$lib/server/registration-invite', () => ({
sendRegistrationInvite
}));
import { prisma } from '$lib/db';
@@ -47,7 +47,7 @@ describe('users admin page server upsert', () => {
userFindUnique.mockResolvedValue({ roleId: 1 });
userCreate.mockResolvedValue({ id: 'new-user' });
userUpdate.mockResolvedValue({ id: 'user-1' });
requestPasswordReset.mockResolvedValue(undefined);
sendRegistrationInvite.mockResolvedValue(undefined);
});
it('marks a created user verified and emails a set-password link', async () => {
@@ -62,12 +62,7 @@ describe('users admin page server upsert', () => {
emailVerified: true
})
});
expect(requestPasswordReset).toHaveBeenCalledWith({
body: {
email: 'jane@example.com',
redirectTo: '/reset-password?invite=1'
}
});
expect(sendRegistrationInvite).toHaveBeenCalledWith('jane@example.com');
});
it('does not email a registration link when updating an existing user', async () => {
@@ -77,11 +72,11 @@ describe('users admin page server upsert', () => {
expect(result).toEqual({ success: true, action: 'upsert' });
expect(userUpdate).toHaveBeenCalled();
expect(userCreate).not.toHaveBeenCalled();
expect(requestPasswordReset).not.toHaveBeenCalled();
expect(sendRegistrationInvite).not.toHaveBeenCalled();
});
it('still succeeds when the registration email fails to send', async () => {
requestPasswordReset.mockRejectedValue(new Error('resend down'));
sendRegistrationInvite.mockRejectedValue(new Error('resend down'));
const locals = createLocals(mockUser() as any);
const result = await invokeUpsert(upsertRequest(), locals);