From ce30885d4fd35ba6b8f2f026b39dedbb72d14346 Mon Sep 17 00:00:00 2001 From: callumalpass Date: Mon, 8 Sep 2025 01:15:26 +1000 Subject: [PATCH] fix: automatically sanitize forbidden characters in task titles - Remove validation that rejects tasks with forbidden filename characters - Allow automatic sanitization via existing sanitizeForFilename() function - Remove "invalid characters" error message from instant task convert - Enable previously skipped test for invalid characters handling - Fixes inconsistent behavior between instant convert and manual creation Fixes #590, Fixes #436 --- src/services/InstantTaskConvertService.ts | 14 -------------- tests/integration/task-creation-workflow.test.ts | 4 +--- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/src/services/InstantTaskConvertService.ts b/src/services/InstantTaskConvertService.ts index a0fc1f7e..fcb4b3b1 100644 --- a/src/services/InstantTaskConvertService.ts +++ b/src/services/InstantTaskConvertService.ts @@ -238,8 +238,6 @@ export class InstantTaskConvertService { console.error('Error during instant task conversion:', error); if (error.message.includes('file already exists')) { new Notice('A file with this name already exists. Please try again or rename the task.'); - } else if (error.message.includes('invalid characters')) { - new Notice('Task title contains invalid characters for filename.'); } else { new Notice('Failed to convert task. Please try again.'); } @@ -323,18 +321,6 @@ export class InstantTaskConvertService { return { isValid: false, error: 'Task title cannot be empty.' }; } - - // Validate against dangerous characters for file operations - const basicDangerousChars = /[<>:"/\\|?*]/; - const hasControlChars = parsedData.title.split('').some(char => { - const code = char.charCodeAt(0); - return code <= 31 || code === 127; - }); - - if (basicDangerousChars.test(parsedData.title) || hasControlChars) { - return { isValid: false, error: 'Task title contains invalid characters for file operations.' }; - } - // Validate date formats if present const dateFields = ['dueDate', 'scheduledDate', 'startDate', 'createdDate', 'doneDate']; for (const field of dateFields) { diff --git a/tests/integration/task-creation-workflow.test.ts b/tests/integration/task-creation-workflow.test.ts index b2e75fa4..e13673c5 100644 --- a/tests/integration/task-creation-workflow.test.ts +++ b/tests/integration/task-creation-workflow.test.ts @@ -452,9 +452,7 @@ describe('Task Creation Workflow Integration', () => { expect(result.cacheUpdated).toBe(false); }); - it.skip('should handle invalid characters in task titles', async () => { - // TODO: This test has test isolation issues - passes individually but fails in suite - // The functionality works correctly, but the test environment has mock pollution + it('should handle invalid characters in task titles', async () => { const taskData = { title: 'Task with invalid chars: <>:"|?*\\/[]' };