UNPKG

4.4 kBJavaScriptView Raw
1var should = require('./init.js');
2var Schema = require('jugglingdb').Schema;
3var db, UserData;
4
5describe('basic-query-mysql', function () {
6 before(setup);
7 before(function (done) {
8 db = getSchema();
9 UserData = db.define('UserData', {
10 name : String,
11 email : String,
12 role : String,
13 order : Number
14 });
15
16 db.automigrate(done);
17 });
18
19 before(seed);
20
21 it('should query collection', function (done) {
22 UserData.all(function (err, users) {
23 users.should.have.lengthOf(6);
24 done();
25 });
26 });
27
28 it('should query collection where order is 1 or 5', function (done) {
29 UserData.all({
30 where : {
31 or : [{
32 order : 1
33 }, {
34 order : 5
35 }]
36 }
37 }, function (err, users) {
38 should.exists(users);
39 should.not.exists(err);
40 users.should.have.lengthOf(2);
41 done();
42 });
43 });
44
45 it('should count collection where order is 1 or 5', function (done) {
46 UserData.count({
47 or : [{
48 order : 1
49 }, {
50 order : 5
51 }]
52 }, function (err, count) {
53 should.not.exists(err);
54 should.exists(count);
55 count.should.eql(2);
56 done();
57 });
58 });
59
60 it('should query collection where name like Len', function (done) {
61 UserData.all({
62 where : {
63 name : {
64 like : '%Len%'
65 }
66 }
67 }, function (err, users) {
68 should.exists(users);
69 should.not.exists(err);
70 users.should.have.lengthOf(1);
71 done();
72 });
73 });
74
75 it('should query collection using or operator', function (done) {
76 UserData.all({
77 where : {
78 or : [{
79 name : 'Paul McCartney'
80 }, {
81 name : 'John Lennon'
82 }]
83 }
84 }, function (err, users) {
85 should.exists(users);
86 should.not.exists(err);
87 users.should.have.lengthOf(2);
88 users.forEach(function (u) {
89 u.role.should.eql('lead');
90 });
91 done();
92 });
93 });
94
95 it('should query collection using or operator on different fields', function (done) {
96 UserData.all({
97 where : {
98 or : [{
99 name : 'Not a User'
100 }, {
101 order : '5'
102 }]
103 }
104 }, function (err, users) {
105 should.exists(users);
106 should.not.exists(err);
107 users.should.have.lengthOf(1);
108 users[0].order.should.eql(5);
109 done();
110 });
111 });
112
113 it('should query collection using or operator combined with and operator', function (done) {
114 UserData.all({
115 where : {
116 name : 'Ringo Starr',
117 or : [{
118 role : 'lead'
119 }, {
120 order : '6'
121 }]
122 }
123 }, function (err, users) {
124 should.exists(users);
125 should.not.exists(err);
126 users.should.have.lengthOf(1);
127 users[0].name.should.equal('Ringo Starr');
128 done();
129 });
130 });
131
132 it('should query collection using IN operation', function (done) {
133 UserData.all({
134 where : {
135 order : [ 4, 6 ]
136 }
137 }, function (err, users) {
138 should.exists(users);
139 should.not.exists(err);
140 users.should.have.lengthOf(2);
141 done();
142 });
143 });
144});
145
146function seed(done) {
147 var count = 0;
148 var beatles = [{
149 name : 'John Lennon',
150 mail : 'john@b3atl3s.co.uk',
151 role : 'lead',
152 order : 2
153 }, {
154 name : 'Paul McCartney',
155 mail : 'paul@b3atl3s.co.uk',
156 role : 'lead',
157 order : 1
158 }, {
159 name : 'George Harrison', order : 5
160 }, {
161 name : 'Ringo Starr', order : 6
162 }, {
163 name : 'Pete Best', order : 4
164 }, {
165 name : 'Stuart Sutcliffe', order : 3
166 }];
167 UserData.destroyAll(function () {
168 beatles.forEach(function (beatle) {
169 UserData.create(beatle, ok);
170 });
171 });
172
173 function ok(err) {
174 if (++count === beatles.length) {
175 done();
176 }
177 }
178}
179
180function setup(done) {
181 require('./init.js');
182 db = getSchema();
183
184 blankDatabase(db, done);
185}
186
187var query = function (sql, cb) {
188 db.adapter.query(sql, cb);
189};
190
191var blankDatabase = function (db, cb) {
192 var dbn = db.settings.database;
193 var cs = db.settings.charset;
194 var co = db.settings.collation;
195 query('DROP DATABASE IF EXISTS ' + dbn, function (err) {
196 var q = 'CREATE DATABASE ' + dbn;
197 if (cs) {
198 q += ' CHARACTER SET ' + cs;
199 }
200 if (co) {
201 q += ' COLLATE ' + co;
202 }
203 query(q, function (err) {
204 query('USE ' + dbn, cb);
205 });
206 });
207};