Skip to content

Instantly share code, notes, and snippets.

@deanlandolt
Created July 28, 2010 02:53
Show Gist options
  • Save deanlandolt/493219 to your computer and use it in GitHub Desktop.
Save deanlandolt/493219 to your computer and use it in GitHub Desktop.
require("util/narwhal-compat");
var assert = require("patr/assert"),
when = require("promised-io/promise").when,
whenPromise = require("promised-io/promise").whenPromise;
var Model = require("perstore/model").Model,
Server = require("perstore/store/couchdb").Server,
Database = require("perstore/store/couchdb").Database,
server = Server();
exports.ServerTests = (function() {
var dbName = "perstore-tests";
return {
testServer: function() {
when(server.getInfo(), function(info) {
assert.ok(info.httpd_design_handlers);
});
},
testCreate: function() {
whenPromise(server.dropDatabase(dbName), function() {
assert.equal(server.createDatabase(dbName), true);
}).then(function() {
assert.equal(server.createDatabase(dbName), false);
});
},
testDrop: function() {
whenPromise(server.dropDatabase(dbName), function(response) {
assert.equal(server.dropDatabase(dbName), true);
assert.equal(server.dropDatabase(dbName), undefined);
});
}
};
})();
exports.DatabaseTests = (function() {
var db = Database("perstore-tests");
return {
testClear: function() {
when(db.clear(), function(result) {
assert.ok(result, true);
assert.equal(db.getAllDocuments().length, 0);
});
}
};
})();
var simpleSchema = {
prototype: {
getFoo: function() {
return this.foo;
}
},
staticMethod: function(id){
return this.get(id);
},
properties: {
foo: {
type: "number"
},
bar: {
optional: true,
unique: true
}
},
links: [
{
rel: "foo",
href: "{foo}"
}
]
};
exports.DatabaseModelTests = {
NoMVCC: (function() {
var store = Database("perstore-model-tests", {
createIfNecessary: true,
mvcc: false
});
var model = require("perstore/model").Model(store, simpleSchema);
return {
testPut: function() {
when(model.put({id: "a", foo: 2}), function(object) {
assert.equal(object.id, "a");
});
},
testGet: function() {
assert.equal(model.get("a").foo, 2);
},
testLoad: function() {
var object = model.get("a");
object = object.load();
assert.equal(object.foo, 2);
},
testQuery: function() {
},
testSave: function() {
var object = model.get("a");
var newRand = Math.random();
object.rand = newRand;
object.save();
object = model.get("a");
assert.equal(object.rand, newRand);
},
testSchemaEnforcement: function() {
var object = model.get("a");
object.foo = "not a number";
assert["throws"](function() {
object.save();
});
},
testMethod: function() {
assert.equal(model.get("a").getFoo(), 2);
},
testStaticMethod: function() {
var object = model.staticMethod("a");
assert.equal(object.id, "a");
},
testDelete: function() {
assert.ok(model["delete"]("a"));
}
};
})()
};
if (require.main === module)
require("patr/runner").run(exports);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment