/test/basic-querying.test.js

https://bitbucket.org/allmas/jugglingdb · JavaScript · 280 lines · 236 code · 43 blank · 1 comment · 1 complexity · e27917dbcedf5c2acb55d25e2b07ad28 MD5 · raw file

  1. // This test written in mocha+should.js
  2. var should = require('./init.js');
  3. var db, User;
  4. describe('basic-querying', function() {
  5. before(function(done) {
  6. db = getSchema();
  7. User = db.define('User', {
  8. name: {type: String, sort: true},
  9. email: {type: String, index: true},
  10. role: {type: String, index: true},
  11. order: {type: Number, index: true, sort: true}
  12. });
  13. db.automigrate(done);
  14. });
  15. describe('find', function() {
  16. before(function(done) {
  17. User.destroyAll(done);
  18. });
  19. it('should query by id: not found', function(done) {
  20. User.find(1, function(err, u) {
  21. should.not.exist(u);
  22. should.not.exist(err);
  23. done();
  24. });
  25. });
  26. it('should query by id: found', function(done) {
  27. User.create(function(err, u) {
  28. should.not.exist(err);
  29. should.exist(u.id);
  30. User.find(u.id, function(err, u) {
  31. should.exist(u);
  32. should.not.exist(err);
  33. u.should.be.an.instanceOf(User);
  34. done();
  35. });
  36. });
  37. });
  38. });
  39. describe('all', function() {
  40. before(seed);
  41. it('should query collection', function(done) {
  42. User.all(function(err, users) {
  43. should.exists(users);
  44. should.not.exists(err);
  45. users.should.have.lengthOf(6);
  46. done();
  47. });
  48. });
  49. it('should query limited collection', function(done) {
  50. User.all({limit: 3}, function(err, users) {
  51. should.exists(users);
  52. should.not.exists(err);
  53. users.should.have.lengthOf(3);
  54. done();
  55. });
  56. });
  57. it('should query offset collection with limit', function(done) {
  58. User.all({skip: 1, limit: 4}, function(err, users) {
  59. should.exists(users);
  60. should.not.exists(err);
  61. users.should.have.lengthOf(4);
  62. done();
  63. });
  64. });
  65. it('should query filtered collection', function(done) {
  66. User.all({where: {role: 'lead'}}, function(err, users) {
  67. should.exists(users);
  68. should.not.exists(err);
  69. users.should.have.lengthOf(2);
  70. done();
  71. });
  72. });
  73. it('should query collection sorted by numeric field', function(done) {
  74. User.all({order: 'order'}, function(err, users) {
  75. should.exists(users);
  76. should.not.exists(err);
  77. users.forEach(function(u, i) {
  78. u.order.should.eql(i + 1);
  79. });
  80. done();
  81. });
  82. });
  83. it('should query collection desc sorted by numeric field', function(done) {
  84. User.all({order: 'order DESC'}, function(err, users) {
  85. should.exists(users);
  86. should.not.exists(err);
  87. users.forEach(function(u, i) {
  88. u.order.should.eql(users.length - i);
  89. });
  90. done();
  91. });
  92. });
  93. it('should query collection sorted by string field', function(done) {
  94. User.all({order: 'name'}, function(err, users) {
  95. should.exists(users);
  96. should.not.exists(err);
  97. users.shift().name.should.equal('George Harrison');
  98. users.shift().name.should.equal('John Lennon');
  99. users.pop().name.should.equal('Stuart Sutcliffe');
  100. done();
  101. });
  102. });
  103. it('should query collection desc sorted by string field', function(done) {
  104. User.all({order: 'name DESC'}, function(err, users) {
  105. should.exists(users);
  106. should.not.exists(err);
  107. users.pop().name.should.equal('George Harrison');
  108. users.pop().name.should.equal('John Lennon');
  109. users.shift().name.should.equal('Stuart Sutcliffe');
  110. done();
  111. });
  112. });
  113. });
  114. describe('count', function() {
  115. before(seed);
  116. it('should query total count', function(done) {
  117. User.count(function(err, n) {
  118. should.not.exist(err);
  119. should.exist(n);
  120. n.should.equal(6);
  121. done();
  122. });
  123. });
  124. it('should query filtered count', function(done) {
  125. User.count({role: 'lead'}, function(err, n) {
  126. should.not.exist(err);
  127. should.exist(n);
  128. n.should.equal(2);
  129. done();
  130. });
  131. });
  132. });
  133. describe('findOne', function() {
  134. before(seed);
  135. it('should find first record (default sort by id)', function(done) {
  136. User.all({order: 'id'}, function(err, users) {
  137. User.findOne(function(e, u) {
  138. should.not.exist(e);
  139. should.exist(u);
  140. u.id.toString().should.equal(users[0].id.toString());
  141. done();
  142. });
  143. });
  144. });
  145. it('should find first record', function(done) {
  146. User.findOne({order: 'order'}, function(e, u) {
  147. should.not.exist(e);
  148. should.exist(u);
  149. u.order.should.equal(1);
  150. u.name.should.equal('Paul McCartney');
  151. done();
  152. });
  153. });
  154. it('should find last record', function(done) {
  155. User.findOne({order: 'order DESC'}, function(e, u) {
  156. should.not.exist(e);
  157. should.exist(u);
  158. u.order.should.equal(6);
  159. u.name.should.equal('Ringo Starr');
  160. done();
  161. });
  162. });
  163. it('should find last record in filtered set', function(done) {
  164. User.findOne({
  165. where: {role: 'lead'},
  166. order: 'order DESC'
  167. }, function(e, u) {
  168. should.not.exist(e);
  169. should.exist(u);
  170. u.order.should.equal(2);
  171. u.name.should.equal('John Lennon');
  172. done();
  173. });
  174. });
  175. it('should work even when find by id', function(done) {
  176. User.findOne(function(e, u) {
  177. User.findOne({where: {id: u.id}}, function(err, user) {
  178. should.not.exist(err);
  179. should.exist(user);
  180. done();
  181. });
  182. });
  183. });
  184. });
  185. describe('exists', function() {
  186. before(seed);
  187. it('should check whether record exist', function(done) {
  188. User.findOne(function(e, u) {
  189. User.exists(u.id, function(err, exists) {
  190. should.not.exist(err);
  191. should.exist(exists);
  192. exists.should.be.ok;
  193. done();
  194. });
  195. });
  196. });
  197. it('should check whether record not exist', function(done) {
  198. User.destroyAll(function() {
  199. User.exists(42, function(err, exists) {
  200. should.not.exist(err);
  201. exists.should.not.be.ok;
  202. done();
  203. });
  204. });
  205. });
  206. });
  207. });
  208. function seed(done) {
  209. var count = 0;
  210. var beatles = [
  211. {
  212. name: 'John Lennon',
  213. mail: 'john@b3atl3s.co.uk',
  214. role: 'lead',
  215. order: 2
  216. }, {
  217. name: 'Paul McCartney',
  218. mail: 'paul@b3atl3s.co.uk',
  219. role: 'lead',
  220. order: 1
  221. },
  222. {name: 'George Harrison', order: 5},
  223. {name: 'Ringo Starr', order: 6},
  224. {name: 'Pete Best', order: 4},
  225. {name: 'Stuart Sutcliffe', order: 3}
  226. ];
  227. User.destroyAll(function() {
  228. beatles.forEach(function(beatle) {
  229. User.create(beatle, ok);
  230. });
  231. });
  232. function ok() {
  233. if (++count === beatles.length) {
  234. done();
  235. }
  236. }
  237. }