UNPKG

updraft

Version:

Javascript ORM-like storage in SQLite (WebSQL or other), synced to the cloud

122 lines (112 loc) 2.87 kB
"use strict"; require("./updraft_loader"); var expect = require("chai").expect; var Column = Updraft.Column; var ColumnType = Updraft.ColumnType; var Q = Updraft.Query; var D = Updraft.Delta; var OrderBy = Updraft.OrderBy; var update = Updraft.update; function createDb(inMemory, trace) { if (typeof window != "undefined") { var traceCallback = trace ? function(str) { console.log(str); } : null; var db = Updraft.createWebsqlWrapper("testdb", "1.0", "updraft test database", 5 * 1024 * 1024, traceCallback); return { db: db, close: function() { return db.transaction(function (transaction) { return transaction.executeSql("select name from sqlite_master where type='table'", [], (tx2, rows) => { var p = Promise.resolve(); rows.forEach(function(row) { var name = row.name; if (name[0] != "_") { p = p.then(function() { return tx2.executeSql("drop table " + name); }); } }); return p; }); }) } }; } else { var sqlite3 = require("sqlite3"); var db = new sqlite3.Database(inMemory ? ":memory:" : "test.db"); if (trace) { db.on("trace", function(sql) { console.log(sql); }); } return { db: Updraft.createSQLiteWrapper(db), close: function() { return db.close(); } }; } } // Todo item format var todoTableSpec = { name: "jstodos", columns: { id: Column.Int().Key(), created: Column.DateTime(), progress: Column.Real(), completed: Column.Bool().Index(), due: Column.Date(), text: Column.String(), history: Column.JSON() } }; describe("works in pure javascript", function() { function runChanges(changes, expectedResults, debug) { var w = createDb(true, debug); var store = Updraft.createStore({ db: w.db }); var todoTable = store.createTable(todoTableSpec); return Promise.resolve() .then(function() { return store.open(); }) .then(function() { var p = Promise.resolve(); changes.forEach(function(change) { p = p.then(function() { return todoTable.add(change); }); }); return p; }) .then(function() { return todoTable.find({}); }) .then(function(results) { expect(results).to.deep.equal(expectedResults); }) .then(function() { return w.close(); }); } it("simple change progression", function() { var changes = [ { time: 1, create: { id: 1, text: "base text", created: undefined, completed: false }, }, { time: 2, update: { id: 1, text: { $set: "modified at time 2" } } }, { time: 3, update: { id: 1, created: { $set: new Date(2005) }, text: { $set: "modified at time 3" } } }, { time: 4, update: { id: 1, completed: { $set: true } } }, ]; return runChanges(changes, [{ id: 1, text: "modified at time 3", created: new Date(2005), completed: true }]); }); });