2015-06-26 22:42:41 +08:00
ipc = require ' ipc '
TestModel = require ' ../fixtures/db-test-model '
Attributes = require ' ../../src/flux/attributes '
2015-07-31 09:09:20 +08:00
DatabaseSetupQueryBuilder = require ' ../../src/flux/stores/database-setup-query-builder '
2015-06-26 22:42:41 +08:00
2015-07-31 09:09:20 +08:00
describe " DatabaseSetupQueryBuilder " , ->
2015-06-26 22:42:41 +08:00
beforeEach ->
2015-07-31 09:09:20 +08:00
@builder = new DatabaseSetupQueryBuilder ( )
2015-06-26 22:42:41 +08:00
2015-07-31 09:09:20 +08:00
describe " setupQueriesForTable " , ->
2015-06-26 22:42:41 +08:00
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 '
2015-07-31 09:09:20 +08:00
queries = @ builder . setupQueriesForTable ( TestModel )
2015-06-26 22:42:41 +08:00
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 ( )
2015-07-31 09:09:20 +08:00
queries = @ builder . setupQueriesForTable ( TestModel )
2015-06-26 22:42:41 +08:00
expected = [
' CREATE TABLE IF NOT EXISTS `TestModel` (id TEXT PRIMARY KEY,data BLOB) ' ,
' CREATE UNIQUE INDEX IF NOT EXISTS `TestModel_id` ON `TestModel` (`id`) ' ,
2015-07-16 23:54:20 +08:00
' 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`) ' ,
2015-06-26 22:42:41 +08:00
]
for query , i in queries
expect ( query ) . toBe ( expected [ i ] )
it " should use the correct column type for each attribute " , ->
TestModel . configureWithAllAttributes ( )
2015-07-31 09:09:20 +08:00
queries = @ builder . setupQueriesForTable ( TestModel )
2015-06-26 22:42:41 +08:00
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 ( )
2015-07-31 09:09:20 +08:00
queries = @ builder . setupQueriesForTable ( TestModel )
2015-06-26 22:42:41 +08:00
expect ( TestModel . additionalSQLiteConfig . setup ) . toHaveBeenCalledWith ( )
2015-07-29 05:03:55 +08:00
expect ( queries . pop ( ) ) . toBe ( ' CREATE INDEX IF NOT EXISTS ThreadListIndex ON Thread(last_message_received_timestamp DESC, namespace_id, id) ' )
2015-06-26 22:42:41 +08:00
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 ' )
2015-07-31 09:09:20 +08:00
expect ( => @ builder . setupQueriesForTable ( TestModel ) ) . not . toThrow ( )