101 lines
3.3 KiB
JavaScript
101 lines
3.3 KiB
JavaScript
describe("Zotero.Schema", function() {
|
|
describe("#initializeSchema()", function () {
|
|
it("should set last client version", function* () {
|
|
yield resetDB({
|
|
thisArg: this,
|
|
skipBundledFiles: true
|
|
});
|
|
|
|
var sql = "SELECT value FROM settings WHERE setting='client' AND key='lastVersion'";
|
|
var lastVersion = yield Zotero.DB.valueQueryAsync(sql);
|
|
yield assert.eventually.equal(Zotero.DB.valueQueryAsync(sql), Zotero.version);
|
|
});
|
|
});
|
|
|
|
describe("#updateSchema()", function () {
|
|
it("should set last client version", function* () {
|
|
var sql = "REPLACE INTO settings (setting, key, value) VALUES ('client', 'lastVersion', ?)";
|
|
yield Zotero.DB.queryAsync(sql, "5.0old");
|
|
|
|
yield Zotero.Schema.updateSchema();
|
|
|
|
var sql = "SELECT value FROM settings WHERE setting='client' AND key='lastVersion'";
|
|
var lastVersion = yield Zotero.DB.valueQueryAsync(sql);
|
|
yield assert.eventually.equal(Zotero.DB.valueQueryAsync(sql), Zotero.version);
|
|
});
|
|
});
|
|
|
|
describe("Global Schema", function () {
|
|
var schemaJSON, schema;
|
|
|
|
before(async function () {
|
|
schemaJSON = await Zotero.File.getResourceAsync('resource://zotero/schema/global/schema.json');
|
|
});
|
|
|
|
beforeEach(async function () {
|
|
await resetDB({
|
|
thisArg: this,
|
|
skipBundledFiles: true
|
|
});
|
|
schema = JSON.parse(schemaJSON);
|
|
});
|
|
|
|
after(async function() {
|
|
await resetDB({
|
|
thisArg: this,
|
|
skipBundledFiles: true
|
|
});
|
|
});
|
|
|
|
describe("#migrateExtraFields()", function () {
|
|
it("should add a new field and migrate values from Extra", async function () {
|
|
var item = await createDataObject('item', { itemType: 'book' });
|
|
item.setField('numPages', "10");
|
|
item.setField('extra', 'Foo Bar: This is a value.\nnumber-of-pages: 11\nThis is another line.');
|
|
item.synced = true;
|
|
await item.saveTx();
|
|
|
|
schema.version++;
|
|
schema.itemTypes.find(x => x.itemType == 'book').fields.splice(0, 1, { field: 'fooBar' })
|
|
var newLocales = {};
|
|
Object.keys(schema.locales).forEach((locale) => {
|
|
var o = schema.locales[locale];
|
|
o.fields.fooBar = 'Foo Bar';
|
|
newLocales[locale] = o;
|
|
});
|
|
await Zotero.Schema._updateGlobalSchemaForTest(schema);
|
|
await Zotero.Schema.migrateExtraFields();
|
|
|
|
assert.isNumber(Zotero.ItemFields.getID('fooBar'));
|
|
assert.equal(Zotero.ItemFields.getLocalizedString('fooBar'), 'Foo Bar');
|
|
assert.equal(item.getField('fooBar'), 'This is a value.');
|
|
// Existing fields shouldn't be overwritten and should be left in Extra
|
|
assert.equal(item.getField('numPages'), '10');
|
|
assert.equal(item.getField('extra'), 'number-of-pages: 11\nThis is another line.');
|
|
assert.isFalse(item.synced);
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
describe("#integrityCheck()", function () {
|
|
before(function* () {
|
|
yield resetDB({
|
|
thisArg: this,
|
|
skipBundledFiles: true
|
|
});
|
|
})
|
|
|
|
it("should repair a foreign key violation", function* () {
|
|
yield assert.eventually.isTrue(Zotero.Schema.integrityCheck());
|
|
|
|
yield Zotero.DB.queryAsync("PRAGMA foreign_keys = OFF");
|
|
yield Zotero.DB.queryAsync("INSERT INTO itemTags VALUES (1234,1234,0)");
|
|
yield Zotero.DB.queryAsync("PRAGMA foreign_keys = ON");
|
|
|
|
yield assert.eventually.isFalse(Zotero.Schema.integrityCheck());
|
|
yield assert.eventually.isTrue(Zotero.Schema.integrityCheck(true));
|
|
yield assert.eventually.isTrue(Zotero.Schema.integrityCheck());
|
|
})
|
|
})
|
|
})
|