UNPKG

simple-odata-server

Version:
399 lines (345 loc) 12.9 kB
var assert = require("assert"); var should = require("should"); var request = require("supertest"); var http = require("http"); var ODataServer = require("../index.js"); var model = require("./model.js"); describe("odata server", function () { var odataServer; var server; beforeEach(function () { odataServer = ODataServer("http://localhost:1234"); odataServer.model(model); server = http.createServer(function (req, res) { odataServer.handle(req, res); }); }); it("get collection", function (done) { odataServer.query(function (col, query, cb) { cb(null, [ { test: "a"}]); }); odataServer.on("odata-error", done); request(server) .get("/users") .expect("Content-Type", /application\/json/) .expect(200) .expect(function(res) { res.body.value.should.be.ok; res.body.value.length.should.be.eql(1); res.body.value[0].test.should.be.eql("a"); }) .end(function(err, res) { done(err); }); }); it("get should ignore invalid query string", function (done) { odataServer.query(function (col, query, cb) { cb(null, [ { test: "a"}]); }); odataServer.on("odata-error", done); request(server) .get("/users?foo=a") .expect("Content-Type", /application\/json/) .expect(200) .expect(function(res) { res.body.value.should.be.ok; res.body.value.length.should.be.eql(1); res.body.value[0].test.should.be.eql("a"); }) .end(function(err, res) { done(err); }); }); it("get should prune properties", function (done) { odataServer.query(function (col, query, cb) { cb(null, [{ test: "a", "a": "b"}]); }); odataServer.on("odata-error", done); request(server) .get("/users") .expect(200) .expect(function(res) { res.body.value.should.be.ok; res.body.value[0].should.have.property("test"); res.body.value[0].should.not.have.property("a"); }) .end(function(err, res) { done(err); }); }); it("post should prune properties", function (done) { odataServer.insert(function (collection, doc, cb) { cb(null, { test: "foo", _id: "aa", a: "a" }); }); request(server) .post("/users") .expect("Content-Type", /application\/json/) .send({ test: "foo" }) .expect(201) .expect(function(res) { res.body.should.be.ok; res.body._id.should.be.ok; res.body.should.not.have.property("a"); }) .end(function(err, res) { done(err); }); }); it("get should prune properties also with by id query", function (done) { odataServer.query(function (col, query, cb) { cb(null, [{ test: "a", "a": "b", _id: "foo"}]); }); odataServer.on("odata-error", done); request(server) .get("/users('foo')") .expect(200) .expect(function(res) { res.body.value.should.be.ok; res.body.value[0].should.have.property("test"); res.body.value[0].should.not.have.property("a"); }) .end(function(err, res) { done(err); }); }); it("get should prune properties also with count enabled", function (done) { odataServer.query(function (col, query, cb) { cb(null, { count: 1, value: [{ test: "a", "a": "b"}] }); }); odataServer.on("odata-error", done); request(server) .get("/users?$count=true") .expect(200) .expect(function(res) { res.body.value.should.be.ok; res.body.value[0].should.have.property("test"); res.body.value[0].should.not.have.property("a"); }) .end(function(err, res) { done(err); }); }); it("get with error should be propagated to response", function (done) { odataServer.query(function (query, cb) { cb(new Error("test")); }); request(server) .get("/users") .expect(500) .end(function(err, res) { done(err); }); }); it("post document", function (done) { odataServer.insert(function (collection, doc, cb) { cb(null, { test: "foo", _id: "aa" }); }); request(server) .post("/users") .expect("Content-Type", /application\/json/) .send({ test: "foo" }) .expect(201) .expect(function(res) { res.body.should.be.ok; res.body._id.should.be.ok; res.body.test.should.be.eql("foo"); }) .end(function(err, res) { done(err); }); }); it("post with base64 should store buffer and return base64", function (done) { odataServer.insert(function (collection, doc, cb) { doc.image.should.be.instanceOf(Buffer); doc._id = "xx"; cb(null, doc); }); request(server) .post("/users") .expect("Content-Type", /application\/json/) .send({ image: "aaaa" }) .expect(201) .expect(function(res) { res.body.should.be.ok; res.body.image.should.be.instanceOf(String); }) .end(function(err, res) { done(err); }); }); it("patch with base64 should store buffer", function (done) { odataServer.update(function (collection, query, update, cb) { update.$set.image.should.be.instanceOf(Buffer); cb(null); }); request(server) .patch("/users('1')") .send({ image: "aaaa" }) .expect(204) .end(function(err, res) { done(err); }); }); it("post with error should be propagated to the response", function (done) { odataServer.insert(function (collection, doc, cb) { cb(new Error("test")); }); request(server) .post("/users") .send({ test: "foo" }) .expect(500) .end(function(err, res) { done(err); }); }); it("patch document", function (done) { odataServer.update(function (collection, query, update, cb) { query._id.should.be.eql("1"); update.$set.test.should.be.eql("foo"); cb(null, { test: "foo" }); }); request(server) .patch("/users('1')") .send({ test: "foo" }) .expect(204) .end(function(err, res) { done(err); }); }); it("patch error should be propagated to response", function (done) { odataServer.update(function (query, update, cb) { cb(new Error("test")); }); request(server) .patch("/users(1)") .send({ test: "foo" }) .expect(500) .end(function(err, res) { done(err); }); }); it("delete document", function (done) { odataServer.remove(function (collection, query, cb) { cb(null); }); request(server) .delete("/users('1')") .expect(204) .end(function(err, res) { done(err); }); }); it("$metadata should response xml", function (done) { request(server) .get("/$metadata") .expect("Content-Type", /application\/xml/) .expect(200) .end(function(err, res) { done(err); }); }); it("/ should response collections json", function (done) { request(server) .get("/") .expect("Content-Type", /application\/json/) .expect(200) .expect(function(res) { res.body.value.length.should.be.eql(1); res.body.value[0].name.should.be.eql("users"); res.body.value[0].name.should.be.eql("users"); res.body.value[0].kind.should.be.eql("EntitySet"); }) .end(function(err, res) { done(err); }); }); it("executeQuery should fire beforeQuery listener", function (done) { odataServer.beforeQuery(function(col, query, req, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; req.isReq.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeQuery('users', {isQuery: true}, { isReq: true}, function () { }); }); it("executeQuery should fire beforeQuery listener when no request param is accepted", function (done) { odataServer.beforeQuery(function(col, query, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeQuery('users', {isQuery: true}, { isReq: true}, function () { }); }); it("executeInsert should fire beforeInsert listener", function (done) { odataServer.beforeInsert(function(col, doc, req, cb) { col.should.be.eql('users'); doc.isDoc.should.be.ok; req.isReq.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeInsert('users', {isDoc: true}, { isReq: true}, function () { }); }); it("executeInsert should fire beforeInsert listener when no request param is accepted", function (done) { odataServer.beforeInsert(function(col, doc, cb) { col.should.be.eql('users'); doc.isDoc.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeInsert('users', {isDoc: true}, { isReq: true}, function () { }); }); it("executeRemove should fire beforeRemove listener", function (done) { odataServer.beforeRemove(function(col, query, req, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; req.isReq.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeRemove('users', {isQuery: true}, { isReq: true}, function () { }); }); it("executeRemove should fire beforeRemove listener when no request param is accepted", function (done) { odataServer.beforeRemove(function(col, query, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeRemove('users', {isQuery: true}, { isReq: true}, function () { }); }); it("executeUpdate should fire beforeUpdate listener", function (done) { odataServer.beforeUpdate(function(col, query, update, req, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; update.isUpdate.should.be.ok; req.isReq.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeUpdate('users', {isQuery: true}, {isUpdate: true}, { isReq: true}, function () { }); }); it("executeUpdate should fire beforeUpdate listener when no request param is accepted", function (done) { odataServer.beforeUpdate(function(col, query, update, cb) { col.should.be.eql('users'); query.isQuery.should.be.ok; update.isUpdate.should.be.ok; cb.should.be.a.Function; done(); }); odataServer.executeUpdate('users', {isQuery: true}, {isUpdate: true}, { isReq: true}, function () { }); }); });