58 lines
2.2 KiB
JavaScript
58 lines
2.2 KiB
JavaScript
/**
|
|
* Unit tests for rules/list formatter
|
|
* Run with: node tests/rules-list.test.js
|
|
*/
|
|
const assert = require('assert');
|
|
const { formatRulesList, formatRuleActions } = require('../rules/list');
|
|
|
|
const folderMap = new Map([
|
|
['AAMkAGI5...', 'Project A'],
|
|
['AAMkAGI6...', 'Newsletters']
|
|
]);
|
|
|
|
const rules = [
|
|
{
|
|
id: 'rule-1',
|
|
displayName: 'Project A emails',
|
|
sequence: 1,
|
|
isEnabled: true,
|
|
conditions: { fromAddresses: [{ emailAddress: { address: 'team@example.com' } }] },
|
|
actions: { moveToFolder: 'AAMkAGI5...', markAsRead: true }
|
|
},
|
|
{
|
|
id: 'rule-2',
|
|
displayName: 'Newsletter rule',
|
|
sequence: 2,
|
|
isEnabled: true,
|
|
conditions: { subjectContains: ['newsletter'] },
|
|
actions: { copyToFolder: 'AAMkAGI6...' }
|
|
},
|
|
{
|
|
id: 'rule-3',
|
|
displayName: 'Unknown folder rule',
|
|
sequence: 3,
|
|
isEnabled: true,
|
|
actions: { moveToFolder: 'AAMkUNKNOWN' }
|
|
}
|
|
];
|
|
|
|
// Test action formatter resolves known IDs and falls back to raw IDs
|
|
const actions1 = formatRuleActions(rules[0], folderMap);
|
|
assert(actions1.includes('Move to folder: Project A'), `Expected "Move to folder: Project A", got: ${actions1}`);
|
|
assert(actions1.includes('Mark as read'), `Expected "Mark as read", got: ${actions1}`);
|
|
|
|
const actions2 = formatRuleActions(rules[1], folderMap);
|
|
assert(actions2.includes('Copy to folder: Newsletters'), `Expected "Copy to folder: Newsletters", got: ${actions2}`);
|
|
|
|
const actions3 = formatRuleActions(rules[2], folderMap);
|
|
assert(actions3.includes('Move to folder: AAMkUNKNOWN'), `Expected raw ID fallback, got: ${actions3}`);
|
|
console.log('✅ formatRuleActions folder-name resolution assertions passed');
|
|
|
|
// Test full detailed list includes resolved folder names
|
|
const detailed = formatRulesList(rules, true, folderMap);
|
|
assert(detailed.includes('Move to folder: Project A'), `Detailed list should contain resolved folder name, got: ${detailed}`);
|
|
assert(detailed.includes('Copy to folder: Newsletters'), `Detailed list should contain resolved folder name, got: ${detailed}`);
|
|
assert(detailed.includes('Move to folder: AAMkUNKNOWN'), `Detailed list should fall back to raw ID, got: ${detailed}`);
|
|
console.log('✅ formatRulesList detailed output assertions passed');
|
|
|
|
console.log('\nAll rules-list tests passed.');
|