diff --git a/jrnl/DayOneJournal.py b/jrnl/DayOneJournal.py index e65ca8d9..b97ea060 100644 --- a/jrnl/DayOneJournal.py +++ b/jrnl/DayOneJournal.py @@ -74,6 +74,7 @@ class DayOne(Journal.Journal): self.config["tagsymbols"][0] + tag.lower() for tag in dict_entry.get("Tags", []) ] + if entry._tags: entry._tags.sort() """Extended DayOne attributes""" # just ignore it if the keys don't exist @@ -167,7 +168,7 @@ class DayOne(Journal.Journal): return "\n".join([f"{str(e)}\n# {e.uuid}\n" for e in self.entries]) def _update_old_entry(self, entry: Entry, new_entry: Entry) -> None: - for attr in ("title", "body", "date"): + for attr in ("title", "body", "date", "tags"): old_attr = getattr(entry, attr) new_attr = getattr(new_entry, attr) if old_attr != new_attr: @@ -195,6 +196,7 @@ class DayOne(Journal.Journal): for entry in entries_from_editor: entry = self._get_and_remove_uuid_from_entry(entry) + if entry._tags: entry._tags.sort() # Remove deleted entries edited_uuids = [e.uuid for e in entries_from_editor] @@ -204,5 +206,9 @@ class DayOne(Journal.Journal): for entry in entries_from_editor: for old_entry in self.entries: if entry.uuid == old_entry.uuid: + if old_entry._tags: + tags_not_in_body = [tag for tag in old_entry._tags if(tag not in entry._body)] + if tags_not_in_body: + entry._tags.extend(tags_not_in_body.sort()) self._update_old_entry(old_entry, entry) break diff --git a/tests/bdd/features/write.feature b/tests/bdd/features/write.feature index 33b81cdd..1fb6b42a 100644 --- a/tests/bdd/features/write.feature +++ b/tests/bdd/features/write.feature @@ -334,3 +334,20 @@ Feature: Writing new entries. When we run "jrnl work This is a new entry" Then the output should contain "Entry added to work journal" And we should get no error + + Scenario Outline: Tags are saved when an entry is edited with --edit and can be searched afterward + Given we use the config "" + And we use the password "test" if prompted + And we append to the editor if opened + @newtag + When we run "jrnl --edit -1" + When we run "jrnl --tags @newtag" + Then the output should contain + 1 entry found + + Examples: configs + | config_file | + | basic_onefile.yaml | + | basic_encrypted.yaml | + | basic_folder.yaml | + | basic_dayone.yaml |