mirror of
https://github.com/documenso/documenso.git
synced 2026-07-14 23:07:13 +10:00
82 lines
2.9 KiB
TypeScript
82 lines
2.9 KiB
TypeScript
import { RecipientRole } from '@prisma/client';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
getRecipientSigningOrder,
|
|
isAssistantLastSigner,
|
|
normalizeRecipientSigningOrders,
|
|
sortRecipientsForSigningOrder,
|
|
} from './recipients';
|
|
|
|
describe('recipient signing order helpers', () => {
|
|
it('sorts CC recipients after ordered active recipients', () => {
|
|
const recipients = [
|
|
{ id: 1, role: RecipientRole.CC, signingOrder: 1 },
|
|
{ id: 2, role: RecipientRole.SIGNER, signingOrder: 2 },
|
|
{ id: 3, role: RecipientRole.APPROVER, signingOrder: 1 },
|
|
];
|
|
|
|
expect(sortRecipientsForSigningOrder(recipients).map((recipient) => recipient.id)).toEqual([3, 2, 1]);
|
|
});
|
|
|
|
it('keeps original order when recipients have the same signing order', () => {
|
|
const recipients = [
|
|
{ id: 2, role: RecipientRole.SIGNER, signingOrder: 1 },
|
|
{ id: 1, role: RecipientRole.APPROVER, signingOrder: 1 },
|
|
];
|
|
|
|
expect(sortRecipientsForSigningOrder(recipients).map((recipient) => recipient.id)).toEqual([2, 1]);
|
|
});
|
|
|
|
it('sorts and normalizes active recipient signing order and removes it from CC recipients', () => {
|
|
const recipients = [
|
|
{ id: 1, role: RecipientRole.CC, signingOrder: 1 },
|
|
{ id: 2, role: RecipientRole.SIGNER, signingOrder: 4 },
|
|
{ id: 3, role: RecipientRole.APPROVER, signingOrder: 2 },
|
|
];
|
|
|
|
expect(normalizeRecipientSigningOrders(sortRecipientsForSigningOrder(recipients))).toEqual([
|
|
{ id: 3, role: RecipientRole.APPROVER, signingOrder: 1 },
|
|
{ id: 2, role: RecipientRole.SIGNER, signingOrder: 2 },
|
|
{ id: 1, role: RecipientRole.CC, signingOrder: undefined },
|
|
]);
|
|
});
|
|
|
|
it('preserves caller order while normalizing signing order', () => {
|
|
const recipients = [
|
|
{ id: 2, role: RecipientRole.ASSISTANT, signingOrder: 2 },
|
|
{ id: 1, role: RecipientRole.SIGNER, signingOrder: 1 },
|
|
{ id: 3, role: RecipientRole.CC, signingOrder: 1 },
|
|
];
|
|
|
|
expect(normalizeRecipientSigningOrders(recipients)).toEqual([
|
|
{ id: 2, role: RecipientRole.ASSISTANT, signingOrder: 1 },
|
|
{ id: 1, role: RecipientRole.SIGNER, signingOrder: 2 },
|
|
{ id: 3, role: RecipientRole.CC, signingOrder: undefined },
|
|
]);
|
|
});
|
|
|
|
it('coerces CC signing order to null for persistence', () => {
|
|
expect(getRecipientSigningOrder({ role: RecipientRole.CC, signingOrder: 1 })).toBeNull();
|
|
expect(getRecipientSigningOrder({ role: RecipientRole.SIGNER, signingOrder: 1 })).toBe(1);
|
|
});
|
|
|
|
it('checks whether the last non-CC recipient is an assistant', () => {
|
|
expect(
|
|
isAssistantLastSigner([
|
|
{ role: RecipientRole.SIGNER },
|
|
{ role: RecipientRole.ASSISTANT },
|
|
{ role: RecipientRole.CC },
|
|
]),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
isAssistantLastSigner([
|
|
{ role: RecipientRole.ASSISTANT },
|
|
{ role: RecipientRole.SIGNER },
|
|
{ role: RecipientRole.CC },
|
|
]),
|
|
).toBe(false);
|
|
});
|
|
});
|