diff --git a/packages/lib/models/Note.test.ts b/packages/lib/models/Note.test.ts index 6ba5d96df..2b15dc824 100644 --- a/packages/lib/models/Note.test.ts +++ b/packages/lib/models/Note.test.ts @@ -387,7 +387,7 @@ describe('models/Note', () => { expect(conflictedNote.conflict_original_id).toBe(origNote.id); expect(conflictedNote.parent_id).toBe(folder.id); expect(conflictedNote.is_shared).toBeUndefined(); - expect(conflictedNote.share_id).toBeUndefined(); + expect(conflictedNote.share_id).toBe(''); }); it('should copy conflicted note to target folder and cancel conflict', (async () => { diff --git a/packages/lib/models/Note.ts b/packages/lib/models/Note.ts index bc93f781b..b456b4677 100644 --- a/packages/lib/models/Note.ts +++ b/packages/lib/models/Note.ts @@ -828,9 +828,15 @@ export default class Note extends BaseItem { void ItemChange.add(BaseModel.TYPE_NOTE, savedNote.id, isNew ? ItemChange.TYPE_CREATE : ItemChange.TYPE_UPDATE, changeSource, beforeNoteJson); if (dispatchUpdateAction) { + // The UI requires share_id -- if a new note, it will always be the empty string in the database + // until processed by the share service. At present, loading savedNote from the database in this case + // breaks tests. + if (!('share_id' in savedNote) && isNew) { + savedNote.share_id = ''; + } // Ensures that any note added to the state has all the required // properties for the UI to work. - if (!('deleted_time' in savedNote)) { + if (!('deleted_time' in savedNote) || !('share_id' in savedNote)) { const fields = removeElement(unique(this.previewFields().concat(Object.keys(savedNote))), 'type_'); savedNote = await this.load(savedNote.id, { fields,