outlook-mcp/tests/rules-list.test.js

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.');