-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
24 changed files
with
2,530 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"presets": ["electron", "react"], | ||
"sourceMaps": "inline" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
var execSync = require('child_process').execSync; | ||
var nodeGypPath = '"' + require('path').resolve(__dirname, 'node_modules', '.bin', 'node-gyp') + '"'; | ||
var targetElectronVersion = '1.4.3'; | ||
var targetArch = require('os').arch(); | ||
var targetPlatform = process.platform; | ||
|
||
if (targetPlatform == "win32") { | ||
var targetArch = "ia32" | ||
} | ||
|
||
var cmd = "cd node_modules/better-sqlite3 && "+nodeGypPath+" configure rebuild --msvs_version=2013 --target="+targetElectronVersion+" --arch="+targetArch+" --target_platform="+targetPlatform+" --dist-url=https://atom.io/download/atom-shell"; | ||
console.log(cmd); | ||
execSync(cmd); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* eslint quote-props: 0 */ | ||
import Model from '../lib/model'; | ||
import Attributes from '../lib/attributes'; | ||
import DatabaseObjectRegistry from '../lib/database-object-registry'; | ||
|
||
class GoodTest extends Model { | ||
static attributes = Object.assign({}, Model.attributes, { | ||
"foo": Attributes.String({ | ||
modelKey: 'foo', | ||
jsonKey: 'foo', | ||
}), | ||
}); | ||
} | ||
|
||
describe('DatabaseObjectRegistry', function DatabaseObjectRegistrySpecs() { | ||
beforeEach(() => DatabaseObjectRegistry.unregister("GoodTest")); | ||
|
||
it("can register constructors", () => { | ||
const testFn = () => GoodTest; | ||
expect(() => DatabaseObjectRegistry.register("GoodTest", testFn)).not.toThrow(); | ||
expect(DatabaseObjectRegistry.get("GoodTest")).toBe(GoodTest); | ||
}); | ||
|
||
it("Tests if a constructor is in the registry", () => { | ||
DatabaseObjectRegistry.register("GoodTest", () => GoodTest); | ||
expect(DatabaseObjectRegistry.isInRegistry("GoodTest")).toBe(true); | ||
}); | ||
|
||
it("deserializes the objects for a constructor", () => { | ||
DatabaseObjectRegistry.register("GoodTest", () => GoodTest); | ||
const obj = DatabaseObjectRegistry.deserialize("GoodTest", {foo: "bar"}); | ||
expect(obj instanceof GoodTest).toBe(true); | ||
expect(obj.foo).toBe("bar"); | ||
}); | ||
|
||
it("throws an error if the object can't be deserialized", () => | ||
expect(() => DatabaseObjectRegistry.deserialize("GoodTest", {foo: "bar"})).toThrow() | ||
); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* eslint quote-props: 0 */ | ||
import TestModel from './fixtures/db-test-model'; | ||
import Attributes from '../lib/attributes'; | ||
import DatabaseSetupQueryBuilder from '../lib/database-setup-query-builder'; | ||
|
||
describe("DatabaseSetupQueryBuilder", function DatabaseSetupQueryBuilderSpecs() { | ||
beforeEach(() => { | ||
this.builder = new DatabaseSetupQueryBuilder(); | ||
}); | ||
|
||
describe("setupQueriesForTable", () => { | ||
it("should return the queries for creating the table and the primary unique index", () => { | ||
TestModel.attributes = { | ||
'attrQueryable': Attributes.DateTime({ | ||
queryable: true, | ||
modelKey: 'attrQueryable', | ||
jsonKey: 'attr_queryable', | ||
}), | ||
|
||
'attrNonQueryable': Attributes.Collection({ | ||
modelKey: 'attrNonQueryable', | ||
jsonKey: 'attr_non_queryable', | ||
}), | ||
}; | ||
const queries = this.builder.setupQueriesForTable(TestModel); | ||
const expected = [ | ||
'CREATE TABLE IF NOT EXISTS `TestModel` (id TEXT PRIMARY KEY,data BLOB,attr_queryable INTEGER)', | ||
'CREATE UNIQUE INDEX IF NOT EXISTS `TestModel_id` ON `TestModel` (`id`)', | ||
]; | ||
queries.map((query, i) => | ||
expect(query).toBe(expected[i]) | ||
); | ||
}); | ||
|
||
it("should correctly create join tables for models that have queryable collections", () => { | ||
TestModel.configureWithCollectionAttribute(); | ||
const queries = this.builder.setupQueriesForTable(TestModel); | ||
const expected = [ | ||
'CREATE TABLE IF NOT EXISTS `TestModel` (id TEXT PRIMARY KEY,data BLOB,client_id TEXT,server_id TEXT,other TEXT)', | ||
'CREATE UNIQUE INDEX IF NOT EXISTS `TestModel_id` ON `TestModel` (`id`)', | ||
'CREATE TABLE IF NOT EXISTS `TestModelCategory` (id TEXT KEY,`value` TEXT,other TEXT)', | ||
'CREATE INDEX IF NOT EXISTS `TestModelCategory_id` ON `TestModelCategory` (`id` ASC)', | ||
'CREATE UNIQUE INDEX IF NOT EXISTS `TestModelCategory_val_id` ON `TestModelCategory` (`value` ASC, `id` ASC)', | ||
]; | ||
queries.map((query, i) => | ||
expect(query).toBe(expected[i]) | ||
); | ||
}); | ||
|
||
it("should use the correct column type for each attribute", () => { | ||
TestModel.configureWithAllAttributes(); | ||
const queries = this.builder.setupQueriesForTable(TestModel); | ||
expect(queries[0]).toBe('CREATE TABLE IF NOT EXISTS `TestModel` (id TEXT PRIMARY KEY,data BLOB,datetime INTEGER,string-json-key TEXT,boolean INTEGER,number INTEGER)'); | ||
}); | ||
|
||
describe("when the model provides additional sqlite config", () => { | ||
it("the setup method should return these queries", () => { | ||
TestModel.configureWithAdditionalSQLiteConfig(); | ||
spyOn(TestModel.additionalSQLiteConfig, 'setup').andCallThrough(); | ||
const queries = this.builder.setupQueriesForTable(TestModel); | ||
expect(TestModel.additionalSQLiteConfig.setup).toHaveBeenCalledWith(); | ||
expect(queries.pop()).toBe('CREATE INDEX IF NOT EXISTS ThreadListIndex ON Thread(last_message_received_timestamp DESC, account_id, id)'); | ||
}); | ||
|
||
it("should not fail if additional config is present, but setup is undefined", () => { | ||
delete TestModel.additionalSQLiteConfig.setup; | ||
this.m = new TestModel({id: 'local-6806434c-b0cd', body: 'hello world'}); | ||
expect(() => this.builder.setupQueriesForTable(TestModel)).not.toThrow(); | ||
}); | ||
}); | ||
}); | ||
}); |
Oops, something went wrong.