From 8538b4c885d03789061161772233ea60be8bbe37 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 23 Mar 2026 18:18:16 +0100 Subject: [PATCH] test: add failing tests for quote-escaped task text parsing --- .../parseTaskText/parseTaskText.test.ts | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/frontend/src/modules/parseTaskText/parseTaskText.test.ts b/frontend/src/modules/parseTaskText/parseTaskText.test.ts index 1137567e1..f1a6cc20c 100644 --- a/frontend/src/modules/parseTaskText/parseTaskText.test.ts +++ b/frontend/src/modules/parseTaskText/parseTaskText.test.ts @@ -51,6 +51,66 @@ describe('Parse Task Text', () => { expect(result.text).toBe(text) }) + describe('Quote-escaped text', () => { + it('should skip all parsing when text is wrapped in double quotes', () => { + const result = parseTaskText('"delete mails up to january 30th"') + + expect(result.text).toBe('delete mails up to january 30th') + expect(result.date).toBeNull() + expect(result.labels).toHaveLength(0) + expect(result.project).toBeNull() + expect(result.priority).toBeNull() + expect(result.assignees).toHaveLength(0) + expect(result.repeats).toBeNull() + }) + + it('should skip all parsing when text is wrapped in single quotes', () => { + const result = parseTaskText("'buy mass tomorrow *label !2 @user'") + + expect(result.text).toBe('buy mass tomorrow *label !2 @user') + expect(result.date).toBeNull() + expect(result.labels).toHaveLength(0) + expect(result.project).toBeNull() + expect(result.priority).toBeNull() + expect(result.assignees).toHaveLength(0) + expect(result.repeats).toBeNull() + }) + + it('should not skip parsing for unmatched quotes', () => { + const result = parseTaskText('"delete mails today') + + expect(result.date).not.toBeNull() + }) + + it('should not skip parsing for mismatched quote types', () => { + const result = parseTaskText('"delete mails today\'') + + expect(result.date).not.toBeNull() + }) + + it('should not skip parsing when quotes are in the middle', () => { + const result = parseTaskText('delete "mails" today') + + expect(result.date).not.toBeNull() + }) + + it('should handle empty quoted string', () => { + const result = parseTaskText('""') + + expect(result.text).toBe('') + expect(result.date).toBeNull() + }) + + it('should skip parsing in todoist mode too', () => { + const result = parseTaskText('"task today @label #project"', PrefixMode.Todoist) + + expect(result.text).toBe('task today @label #project') + expect(result.date).toBeNull() + expect(result.labels).toHaveLength(0) + expect(result.project).toBeNull() + }) + }) + describe('Date Parsing', () => { it('should not return any date if none was provided', () => { const result = parseTaskText('Lorem Ipsum')