From bec91863e28d7549ff45132595b68e181fc7e3ac Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 19 May 2020 23:17:56 +0100 Subject: [PATCH] All: Fixes #3234: Sync would fail in some cases due to a database error --- CliClient/tests/database.js | 36 ++++++++++++++++++++++++ ReactNativeClient/lib/joplin-database.js | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 CliClient/tests/database.js diff --git a/CliClient/tests/database.js b/CliClient/tests/database.js new file mode 100644 index 0000000000..dd2a3653cc --- /dev/null +++ b/CliClient/tests/database.js @@ -0,0 +1,36 @@ +/* eslint-disable no-unused-vars */ + +require('app-module-path').addPath(__dirname); + +const { time } = require('lib/time-utils.js'); +const { sortedIds, createNTestNotes, asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js'); +const Folder = require('lib/models/Folder.js'); +const Note = require('lib/models/Note.js'); +const Setting = require('lib/models/Setting.js'); +const BaseModel = require('lib/BaseModel.js'); +const ArrayUtils = require('lib/ArrayUtils.js'); +const { shim } = require('lib/shim'); + +process.on('unhandledRejection', (reason, p) => { + console.log('Unhandled Rejection at: Promise', p, 'reason:', reason); +}); + +describe('database', function() { + beforeEach(async (done) => { + await setupDatabaseAndSynchronizer(1); + await switchClient(1); + done(); + }); + + it('should not modify cached field names', asyncTest(async () => { + const db = BaseModel.db(); + + const fieldNames = db.tableFieldNames('notes'); + const fieldCount = fieldNames.length; + fieldNames.push('type_'); + + expect(fieldCount).toBeGreaterThan(0); + expect(db.tableFieldNames('notes').length).toBe(fieldCount); + })); + +}); diff --git a/ReactNativeClient/lib/joplin-database.js b/ReactNativeClient/lib/joplin-database.js index 5936f80e83..a681cb0f38 100644 --- a/ReactNativeClient/lib/joplin-database.js +++ b/ReactNativeClient/lib/joplin-database.js @@ -146,7 +146,7 @@ class JoplinDatabase extends Database { } this.tableFieldNames_[tableName] = output; - return output; + return output.slice(); } tableFields(tableName, options = null) {