define(["sugar-web/bus", "sugar-web/env", "sugar-web/datastore"], function (bus, env, datastore) {
|
|
|
|
'use strict';
|
|
|
|
var defaultTimeoutInterval = jasmine.getEnv().defaultTimeoutInterval;
|
|
|
|
describe("datastore object", function () {
|
|
|
|
beforeEach(function () {
|
|
// FIXME: due to db initialization,
|
|
// the very first save() call may take a while
|
|
jasmine.getEnv().defaultTimeoutInterval = 10000;
|
|
spyOn(env, 'isStandalone').andReturn(false);
|
|
bus.listen();
|
|
});
|
|
|
|
afterEach(function () {
|
|
jasmine.getEnv().defaultTimeoutInterval = defaultTimeoutInterval;
|
|
bus.close();
|
|
});
|
|
|
|
it("should be able to set and get metadata", function () {
|
|
var saved;
|
|
var gotMetadata;
|
|
var datastoreObject;
|
|
var objectId;
|
|
var testTitle = "hello";
|
|
|
|
runs(function () {
|
|
saved = false;
|
|
|
|
datastoreObject = new datastore.DatastoreObject();
|
|
datastoreObject.setMetadata({
|
|
title: testTitle
|
|
});
|
|
|
|
datastoreObject.save(function () {
|
|
saved = true;
|
|
objectId = datastoreObject.objectId;
|
|
});
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return saved;
|
|
}, "should have saved the object");
|
|
|
|
runs(function () {
|
|
gotMetadata = false;
|
|
|
|
datastoreObject = new datastore.DatastoreObject(objectId);
|
|
datastoreObject.getMetadata(function (error, metadata) {
|
|
expect(metadata.title).toEqual(testTitle);
|
|
gotMetadata = true;
|
|
});
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return gotMetadata;
|
|
}, "should have got the object metadata");
|
|
});
|
|
|
|
it("should be able to save and load text", function () {
|
|
var saved;
|
|
var gotMetadata;
|
|
var datastoreObject;
|
|
var objectId;
|
|
var testText = "hello";
|
|
|
|
runs(function () {
|
|
saved = false;
|
|
|
|
datastoreObject = new datastore.DatastoreObject();
|
|
datastoreObject.setDataAsText(testText);
|
|
|
|
datastoreObject.save(function () {
|
|
saved = true;
|
|
objectId = datastoreObject.objectId;
|
|
});
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return saved;
|
|
}, "should have saved the object");
|
|
|
|
runs(function () {
|
|
gotMetadata = false;
|
|
|
|
function onLoaded(error, metadata, text) {
|
|
expect(text).toEqual(testText);
|
|
gotMetadata = true;
|
|
}
|
|
|
|
datastoreObject = new datastore.DatastoreObject(objectId);
|
|
datastoreObject.loadAsText(onLoaded);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return gotMetadata;
|
|
}, "should have got the object metadata");
|
|
});
|
|
|
|
});
|
|
|
|
describe("datastore", function () {
|
|
|
|
beforeEach(function () {
|
|
// FIXME: due to db initialization,
|
|
// the very first save() call may take a while
|
|
jasmine.getEnv().defaultTimeoutInterval = 10000;
|
|
spyOn(env, 'isStandalone').andReturn(false);
|
|
bus.listen();
|
|
});
|
|
|
|
afterEach(function () {
|
|
jasmine.getEnv().defaultTimeoutInterval = defaultTimeoutInterval;
|
|
bus.close();
|
|
});
|
|
|
|
it("should be able to create an object", function () {
|
|
var wasCreated;
|
|
|
|
runs(function () {
|
|
wasCreated = false;
|
|
|
|
function onCreated(error, objectId) {
|
|
expect(objectId).toEqual(jasmine.any(String));
|
|
wasCreated = true;
|
|
}
|
|
|
|
datastore.create({}, onCreated);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return wasCreated;
|
|
}, "the object should be created");
|
|
});
|
|
|
|
it("should be able to set object metadata", function () {
|
|
var metadataSet;
|
|
var gotMetadata;
|
|
var objectId;
|
|
var testTitle = "hello";
|
|
|
|
runs(function () {
|
|
function onMetadataSet(error) {
|
|
expect(error).toBeNull();
|
|
metadataSet = true;
|
|
}
|
|
|
|
function onCreated(error, createdObjectId) {
|
|
objectId = createdObjectId;
|
|
|
|
var metadata = {
|
|
title: testTitle
|
|
};
|
|
datastore.setMetadata(objectId, metadata, onMetadataSet);
|
|
}
|
|
|
|
metadataSet = false;
|
|
|
|
datastore.create({}, onCreated);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return metadataSet;
|
|
}, "metadata should be set");
|
|
|
|
runs(function () {
|
|
function onGotMetadata(error, metadata) {
|
|
expect(metadata.title).toEqual(testTitle);
|
|
gotMetadata = true;
|
|
}
|
|
|
|
gotMetadata = false;
|
|
|
|
datastore.getMetadata(objectId, onGotMetadata);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return gotMetadata;
|
|
}, "should have got object metadata");
|
|
});
|
|
|
|
it("should be able to get object metadata", function () {
|
|
var gotMetadata = false;
|
|
var testTitle = "hello";
|
|
|
|
runs(function () {
|
|
function onGotMetadata(error, metadata) {
|
|
expect(metadata.title).toEqual(testTitle);
|
|
gotMetadata = true;
|
|
}
|
|
|
|
function onCreated(error, objectId) {
|
|
datastore.getMetadata(objectId, onGotMetadata);
|
|
}
|
|
|
|
datastore.create({
|
|
title: testTitle
|
|
}, onCreated);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return gotMetadata;
|
|
}, "should have got object metadata");
|
|
});
|
|
|
|
it("should be able to load an object", function () {
|
|
var wasLoaded = false;
|
|
var objectId = null;
|
|
var inputStream = null;
|
|
var objectData = null;
|
|
var testData = new Uint8Array([1, 2, 3, 4]);
|
|
|
|
runs(function () {
|
|
function onStreamClose(error) {
|
|
expect(objectData).toEqual(testData.buffer);
|
|
wasLoaded = true;
|
|
}
|
|
|
|
function onStreamRead(error, data) {
|
|
objectData = data;
|
|
}
|
|
|
|
function onLoaded(error, metadata, loadedInputStream) {
|
|
inputStream = loadedInputStream;
|
|
inputStream.read(8192, onStreamRead);
|
|
inputStream.close(onStreamClose);
|
|
}
|
|
|
|
function onClosed(error) {
|
|
datastore.load(objectId, onLoaded);
|
|
}
|
|
|
|
function onSaved(error, outputStream) {
|
|
outputStream.write(testData);
|
|
outputStream.close(onClosed);
|
|
}
|
|
|
|
function onCreated(error, createdObjectId) {
|
|
objectId = createdObjectId;
|
|
datastore.save(objectId, {}, onSaved);
|
|
}
|
|
|
|
datastore.create({}, onCreated);
|
|
});
|
|
|
|
waitsFor(function () {
|
|
return wasLoaded;
|
|
}, "the object should be loaded");
|
|
});
|
|
});
|
|
});
|