- Add syncIdentities() to auth store to propagate identity changes from identity store, fixing stale data that caused save failures and duplicates - Call syncIdentities() after every create, update, and delete in the identity manager modal - Switch email composer to read identities from identity store for consistency with the rest of the app - Append identity text signature (with RFC 3676 separator) to email body when sending from the composer and quick reply paths - Add tests for syncIdentities and signature appending logic
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
|
|
/**
|
|
* Tests for the signature appending logic used in the email composer
|
|
* and quick-reply paths. These test the pure transformation that should
|
|
* be applied when an identity has a textSignature.
|
|
*/
|
|
|
|
function appendSignature(body: string, textSignature: string | undefined): string {
|
|
if (textSignature) {
|
|
return body + '\n\n-- \n' + textSignature;
|
|
}
|
|
return body;
|
|
}
|
|
|
|
describe('signature appending', () => {
|
|
it('should append text signature with standard separator', () => {
|
|
const result = appendSignature('Hello world', 'Best regards,\nAlice');
|
|
expect(result).toBe('Hello world\n\n-- \nBest regards,\nAlice');
|
|
});
|
|
|
|
it('should not modify body when signature is undefined', () => {
|
|
const result = appendSignature('Hello world', undefined);
|
|
expect(result).toBe('Hello world');
|
|
});
|
|
|
|
it('should not modify body when signature is empty string', () => {
|
|
const result = appendSignature('Hello world', '');
|
|
expect(result).toBe('Hello world');
|
|
});
|
|
|
|
it('should handle empty body with signature', () => {
|
|
const result = appendSignature('', 'My Signature');
|
|
expect(result).toBe('\n\n-- \nMy Signature');
|
|
});
|
|
|
|
it('should handle multiline body and signature', () => {
|
|
const body = 'Dear Bob,\n\nHow are you?\n\nCheers';
|
|
const sig = 'Alice Smith\nCompany Inc.\nhttp://example.com';
|
|
const result = appendSignature(body, sig);
|
|
expect(result).toContain('Dear Bob,');
|
|
expect(result).toContain('-- \n');
|
|
expect(result).toContain('Alice Smith');
|
|
expect(result).toContain('Company Inc.');
|
|
});
|
|
|
|
it('should use RFC 3676 signature separator (dash dash space newline)', () => {
|
|
const result = appendSignature('body', 'sig');
|
|
// The separator should be "-- \n" (two dashes, a space, then newline)
|
|
expect(result).toContain('-- \n');
|
|
});
|
|
|
|
it('should place signature after two blank lines from body', () => {
|
|
const result = appendSignature('body text', 'sig');
|
|
expect(result).toBe('body text\n\n-- \nsig');
|
|
// Verify the structure: body + \n\n + "-- \n" + signature
|
|
const parts = result.split('\n\n');
|
|
expect(parts[0]).toBe('body text');
|
|
expect(parts[1]).toBe('-- \nsig');
|
|
});
|
|
|
|
it('should handle body that already ends with newlines', () => {
|
|
const result = appendSignature('body\n\n', 'sig');
|
|
// Still adds the separator - this matches the composer behavior
|
|
expect(result).toBe('body\n\n\n\n-- \nsig');
|
|
});
|
|
});
|