mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 04:25:31 +08:00
cab654ec48
Summary: - We now build sqlite3 manually from source in script/bootstrap - We now allow queries to run in parallel outside of transaction blocks - When signining in and out, the main window creates the database file and then advances the database "phase", which allows all the windows to connect to the initialized database. This diff also fixes T2411 where popout drafts opened twice, and several issues around Windows icons and install. Test Plan: Run existing tests Reviewers: evan Reviewed By: evan Maniphest Tasks: T2411 Differential Revision: https://phab.nylas.com/D1815
57 lines
2.8 KiB
CoffeeScript
57 lines
2.8 KiB
CoffeeScript
ipc = require 'ipc'
|
|
TestModel = require '../fixtures/db-test-model'
|
|
Attributes = require '../../src/flux/attributes'
|
|
DatabaseSetupQueryBuilder = require '../../src/flux/stores/database-setup-query-builder'
|
|
|
|
describe "DatabaseSetupQueryBuilder", ->
|
|
beforeEach ->
|
|
@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'
|
|
queries = @builder.setupQueriesForTable(TestModel)
|
|
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`)'
|
|
]
|
|
for query,i in queries
|
|
expect(query).toBe(expected[i])
|
|
|
|
it "should correctly create join tables for models that have queryable collections", ->
|
|
TestModel.configureWithCollectionAttribute()
|
|
queries = @builder.setupQueriesForTable(TestModel)
|
|
expected = [
|
|
'CREATE TABLE IF NOT EXISTS `TestModel` (id TEXT PRIMARY KEY,data BLOB)',
|
|
'CREATE UNIQUE INDEX IF NOT EXISTS `TestModel_id` ON `TestModel` (`id`)',
|
|
'CREATE TABLE IF NOT EXISTS `TestModel-Label` (id TEXT KEY, `value` TEXT)'
|
|
'CREATE UNIQUE INDEX IF NOT EXISTS `TestModel_Label_id_val` ON `TestModel-Label` (`id`,`value`)',
|
|
]
|
|
for query,i in queries
|
|
expect(query).toBe(expected[i])
|
|
|
|
it "should use the correct column type for each attribute", ->
|
|
TestModel.configureWithAllAttributes()
|
|
queries = @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()
|
|
queries = @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, namespace_id, id)')
|
|
|
|
it "should not fail if additional config is present, but setup is undefined", ->
|
|
delete TestModel.additionalSQLiteConfig['setup']
|
|
@m = new TestModel(id: 'local-6806434c-b0cd', body: 'hello world')
|
|
expect( => @builder.setupQueriesForTable(TestModel)).not.toThrow()
|