1 | var should = require('./init.js');
|
2 | var Schema = require('jugglingdb').Schema;
|
3 | var db, UserData;
|
4 |
|
5 | describe('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 |
|
146 | function 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 |
|
180 | function setup(done) {
|
181 | require('./init.js');
|
182 | db = getSchema();
|
183 |
|
184 | blankDatabase(db, done);
|
185 | }
|
186 |
|
187 | var query = function (sql, cb) {
|
188 | db.adapter.query(sql, cb);
|
189 | };
|
190 |
|
191 | var 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 | };
|