UNPKG

superdata

Version:

A lightweight data layer module motivated by extjs' data layer. It can be used with any client-side framework.

368 lines (290 loc) 6.58 kB
module.exports = function proxyBehaviour(name, proxy) { describe(name + " proxy", function() { var numOfItems = 100; it("proxy should have the following functions", function() { expect(typeof proxy.read).toBe("function"); expect(typeof proxy.createOne).toBe("function"); expect(typeof proxy.readOneById).toBe("function"); expect(typeof proxy.updateOneById).toBe("function"); expect(typeof proxy.destroyOneById).toBe("function"); }); it("createOne", function(done) { var createdNum = 0; var createOneCallback = function() { createdNum += 1; if (createdNum >= numOfItems) { done(); } }; for (var idx = 0; idx < numOfItems; idx += 1) { proxy.createOne({ id: idx, str: "str" + idx, //we could generate different strings, so it would be easier to test find user: { name: "user" + idx, email: "email" + idx + "@gmail.com" } }, createOneCallback); } }); /** read tests - limit - skip - sort - find */ function createReadTest(config) { var find = config.find; var sort = config.sort; var skip = config.skip; var limit = config.limit; var expectedNum = config.expectedNum; var expectedIds = config.expectedIds; var findStr = {}; if (find) { for (var prop in find) { var act = find[prop]; if (act instanceof RegExp) { act = act.toString(); } findStr[prop] = act; } } it("find: " + JSON.stringify(findStr) + ", sort: " + JSON.stringify(sort) + ", skip: " + skip + ", limit: " + limit, function(done) { skip = skip || 0; limit = limit || 10; if (skip < 0) { skip = 0; } if (limit < 1) { limit = 10; } proxy.read({ find: find, sort: sort, skip: skip, limit: limit }, function(err, result) { expect(err).toBeNull(); var numOfItems = limit < expectedNum ? limit : expectedNum; expect(result.items.length).toBe(numOfItems); expect(result.count).toBe(expectedNum); for (var idx = 0; idx < numOfItems; idx += 1) { expect(result.items[idx].id).toBe(expectedIds[idx]); } done(); }); }); } describe("read", function() { //limit createReadTest({ skip: 0, limit: 10, expectedNum: 100, expectedIds: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], proxy: proxy }); createReadTest({ skip: 0, limit: 7, expectedNum: 100, expectedIds: [0, 1, 2, 3, 4, 5, 6], proxy: proxy }); //skip createReadTest({ skip: 3, limit: 13, expectedNum: 100, expectedIds: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], proxy: proxy }); //sort createReadTest({ sort: { id: 1 }, expectedNum: 100, expectedIds: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], proxy: proxy }); createReadTest({ sort: { id: -1 }, expectedNum: 100, expectedIds: [99, 98, 97, 96, 95, 94, 93, 92, 91, 90], proxy: proxy }); createReadTest({ sort: { str: 1 }, expectedNum: 100, expectedIds: [0, 1, 10, 11, 12, 13, 14, 15, 16, 17], proxy: proxy }); createReadTest({ sort: { str: -1 }, expectedNum: 100, expectedIds: [99, 98, 97, 96, 95, 94, 93, 92, 91, 90], proxy: proxy }); //find createReadTest({ find: { id: 16 }, sort: { id: 1 }, expectedNum: 1, expectedIds: [16], proxy: proxy }); createReadTest({ find: { "user.email": /gmail/ }, sort: { id: 1 }, limit: 10, expectedNum: 100, expectedIds: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], proxy: proxy }); createReadTest({ find: { "user.email": /5/ }, sort: { id: -1 }, limit: 7, expectedNum: 19, expectedIds: [95, 85, 75, 65, 59, 58, 57], proxy: proxy }); createReadTest({ find: { "user.name": /0/ }, sort: { id: 1 }, expectedNum: 10, expectedIds: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90], proxy: proxy }); createReadTest({ find: { "user.name": /16/ }, sort: { id: 1 }, expectedNum: 1, expectedIds: [16], proxy: proxy }); createReadTest({ find: { str: /0/ }, sort: { id: 1 }, expectedNum: 10, expectedIds: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90], proxy: proxy }); createReadTest({ find: { str: /1/ }, sort: { id: 1 }, limit: 3, expectedNum: 19, expectedIds: [1, 10, 11], proxy: proxy }); }); describe("read - defaults & invalid config", function() { createReadTest({ expectedNum: 100, expectedIds: [99, 98, 97, 96, 95, 94, 93, 92, 91, 90], proxy: proxy }); createReadTest({ skip: -3, limit: -10, expectedNum: 100, expectedIds: [99, 98, 97, 96, 95, 94, 93, 92, 91, 90], proxy: proxy }); }); describe("readOneById", function() { it("with valid id", function(done) { proxy.readOneById(18, function(err, result) { expect(err).toBeNull(); expect(result.id).toBe(18); expect(result.str).toBe("str18"); done(); }); }); it("with invalid id", function(done) { proxy.readOneById(108, function(err) { expect(err).toBe("NOT_FOUND"); done(); }); }); }); describe("updateOneById", function() { it("with valid id", function(done) { proxy.updateOneById(18, {str: "str18 - modified"}, function(err, result) { expect(err).toBeNull(); expect(result.id).toBe(18); expect(result.str).toBe("str18 - modified"); proxy.readOneById(18, function(err, result) { expect(err).toBeNull(); expect(result.id).toBe(18); expect(result.str).toBe("str18 - modified"); done(); }); }); }); it("with invalid id", function(done) { proxy.updateOneById(108, {str: "won't work"}, function(err) { expect(err).toBe("NOT_FOUND"); done(); }); }); }); describe("destroyOneById", function() { it("with valid id", function(done) { proxy.destroyOneById(18, function(err, result) { expect(err).toBeNull(); expect(result.id).toBe(18); expect(result.str).toBe("str18 - modified"); proxy.readOneById(18, function(err) { expect(err).toBe("NOT_FOUND"); done(); }); }); }); it("with invalid id", function(done) { proxy.destroyOneById(108, function(err) { expect(err).toBe("NOT_FOUND"); done(); }); }); }); }); };