From 0938dc9d522ecd085f1a812b91c8aeac0093b0f6 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Tue, 4 Jun 2024 01:52:34 -0700 Subject: [PATCH] Desktop: Fix importing completed tasks (#10528) --- .../support/test_notes/yaml/not_a_task.md | 5 +++++ .../support/test_notes/yaml/task_completed.md | 6 ++++++ ...ropService_Importer_Md_frontmatter.test.ts | 20 +++++++++++++++++++ packages/lib/utils/frontMatter.ts | 4 ++-- 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 packages/app-cli/tests/support/test_notes/yaml/not_a_task.md create mode 100644 packages/app-cli/tests/support/test_notes/yaml/task_completed.md diff --git a/packages/app-cli/tests/support/test_notes/yaml/not_a_task.md b/packages/app-cli/tests/support/test_notes/yaml/not_a_task.md new file mode 100644 index 0000000000..f351e48677 --- /dev/null +++ b/packages/app-cli/tests/support/test_notes/yaml/not_a_task.md @@ -0,0 +1,5 @@ +--- +title: Not a task +--- + +This is a note. \ No newline at end of file diff --git a/packages/app-cli/tests/support/test_notes/yaml/task_completed.md b/packages/app-cli/tests/support/test_notes/yaml/task_completed.md new file mode 100644 index 0000000000..f377f8ffa8 --- /dev/null +++ b/packages/app-cli/tests/support/test_notes/yaml/task_completed.md @@ -0,0 +1,6 @@ +--- +title: Task +completed?: yes +--- + +This is a test. This task should import as completed. diff --git a/packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.ts b/packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.ts index b0832d799f..12d97dbf04 100644 --- a/packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.ts +++ b/packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.ts @@ -184,4 +184,24 @@ describe('InteropService_Importer_Md_frontmatter: importMetadata', () => { const tags = (await Tag.tagsByNoteId(note.id)).map(tag => tag.title).sort(); expect(tags).toMatchObject(['tag1', 'tag2']); }); + + it('should import completed tasks', async () => { + const note = await importTestFile('task_completed.md'); + + expect(note.title).toBe('Task'); + expect(note.body).toBe('This is a test. This task should import as completed.\n'); + expect(note.is_todo).toBe(1); + expect(note.todo_completed).toBeGreaterThan(0); + }); + + it('should import notes that are not tasks', async () => { + const note = await importTestFile('not_a_task.md'); + + expect(note).toMatchObject({ + title: 'Not a task', + body: 'This is a note.', + is_todo: 0, + todo_completed: 0, + }); + }); }); diff --git a/packages/lib/utils/frontMatter.ts b/packages/lib/utils/frontMatter.ts index 4bb8df8d27..b7babebea5 100644 --- a/packages/lib/utils/frontMatter.ts +++ b/packages/lib/utils/frontMatter.ts @@ -101,7 +101,7 @@ export const serialize = async (modNote: NoteEntity, tagTitles: string[]) => { }; function isTruthy(str: string): boolean { - return str.toLowerCase() in ['true', 'yes']; + return ['true', 'yes'].includes(str.toLowerCase()); } // Enforces exactly 2 spaces in front of list items @@ -227,7 +227,7 @@ export const parse = (note: string): ParsedMeta => { if (metadata.is_todo) { if (isTruthy(md['completed?'])) { // Completed time isn't preserved, so we use a sane choice here - metadata['todo_completed'] = metadata['user_updated_time']; + metadata['todo_completed'] = metadata['user_updated_time'] ?? Date.now(); } if ('due' in md) { const due_date = time.anythingToMs(md['due'], null);