yjs/src/OperationStores/IndexedDB.spec.js

117 lines
3.1 KiB
JavaScript

/* global Y */
/* eslint-env browser,jasmine */
if (typeof window !== 'undefined' && false) {
describe('IndexedDB', function () {
var ob
beforeAll(function () {
ob = new Y.IndexedDB(null, {namespace: 'Test', gcTimeout: -1})
})
it('can add and get operation', function (done) {
ob.requestTransaction(function *() {
var op = yield* this.setOperation({
'id': ['1', 0],
'stuff': true
})
expect(yield* this.getOperation(['1', 0]))
.toEqual(op)
done()
})
})
it('can remove operation', function (done) {
ob.requestTransaction(function *() {
var op = yield* this.setOperation({
'id': ['1', 0],
'stuff': true
})
expect(yield* this.getOperation(['1', 0]))
.toEqual(op)
yield* this.removeOperation(['1', 0])
expect(yield* this.getOperation(['1', 0]))
.toBeUndefined()
done()
})
})
it('getOperation(op) returns undefined if op does not exist', function (done) {
ob.requestTransaction(function *() {
var op = yield* this.getOperation("plzDon'tBeThere")
expect(op).toBeUndefined()
done()
})
})
it('yield throws if request is unknown', function (done) {
ob.requestTransaction(function *() {
try {
yield* this.setOperation()
} catch (e) {
expect(true).toEqual(true)
done()
return
}
expect('Expected an Error!').toEqual(true)
done()
})
})
it('sets and gets stateVector', function (done) {
ob.requestTransaction(function *() {
var s1 = {user: '1', clock: 1}
var s2 = {user: '2', clock: 3}
yield* this.setState(s1)
yield* this.setState(s2)
var sv = yield* this.getStateVector()
expect(sv).not.toBeUndefined()
expect(sv).toEqual([s1, s2])
done()
})
})
it('gets stateSet', function (done) {
ob.requestTransaction(function *() {
var s1 = {user: '1', clock: 1}
var s2 = {user: '2', clock: 3}
yield* this.setState(s1)
yield* this.setState(s2)
var sv = yield* this.getStateSet()
expect(sv).not.toBeUndefined()
expect(sv).toEqual({
'1': 1,
'2': 3
})
done()
})
})
it('getOperations returns operations (no parameters)', function (done) {
ob.requestTransaction(function *() {
var s1 = {user: '1', clock: 55}
yield* this.setState(s1)
var op1 = yield* this.setOperation({
'id': ['1', 0],
'stuff': true
})
var op2 = yield* this.setOperation({
'id': ['1', 3],
'stuff': true
})
var ops = yield* this.getOperations()
expect(ops.length).toBeGreaterThan(1)
expect(ops[0]).toEqual(op1)
expect(ops[1]).toEqual(op2)
done()
})
})
afterAll(function (done) {
ob.requestTransaction(function *() {
yield* ob.removeDatabase()
ob = null
done()
})
})
})
}