1
+ <?php
2
+ require_once ('vendor/autoload.php ' );
3
+ require_once ('models/User.php ' );
4
+
5
+ use Jenssegers \Mongodb \Connection ;
6
+ use Jenssegers \Mongodb \Model ;
7
+ use Jenssegers \Mongodb \DatabaseManager ;
8
+
9
+ class ModelQueryTest extends PHPUnit_Framework_TestCase {
10
+
11
+ public function setUp ()
12
+ {
13
+ include ('tests/app.php ' );
14
+
15
+ // test data
16
+ User::create (array ('name ' => 'John Doe ' , 'age ' => 35 , 'title ' => 'admin ' ));
17
+ User::create (array ('name ' => 'Jane Doe ' , 'age ' => 33 , 'title ' => 'admin ' ));
18
+ User::create (array ('name ' => 'Harry Hoe ' , 'age ' => 13 , 'title ' => 'user ' ));
19
+ User::create (array ('name ' => 'Robert Roe ' , 'age ' => 37 , 'title ' => 'user ' ));
20
+ User::create (array ('name ' => 'Mark Moe ' , 'age ' => 23 , 'title ' => 'user ' ));
21
+ User::create (array ('name ' => 'Brett Boe ' , 'age ' => 35 , 'title ' => 'user ' ));
22
+ User::create (array ('name ' => 'Tommy Toe ' , 'age ' => 33 , 'title ' => 'user ' ));
23
+ User::create (array ('name ' => 'Yvonne Yoe ' , 'age ' => 35 , 'title ' => 'admin ' ));
24
+ User::create (array ('name ' => 'Error ' , 'age ' => null , 'title ' => null ));
25
+ }
26
+
27
+ public function tearDown ()
28
+ {
29
+ User::truncate ();
30
+ }
31
+
32
+ public function testGet ()
33
+ {
34
+ $ users = User::get ();
35
+
36
+ $ this ->assertEquals (9 , count ($ users ));
37
+ $ this ->assertInstanceOf ('Jenssegers\Mongodb\Model ' , $ users [0 ]);
38
+ }
39
+
40
+ public function testFirst ()
41
+ {
42
+ $ user = User::get ()->first ();
43
+ $ this ->assertInstanceOf ('Jenssegers\Mongodb\Model ' , $ user );
44
+ $ this ->assertEquals ('John Doe ' , $ user ->name );
45
+ }
46
+
47
+ public function testWhere ()
48
+ {
49
+ $ users = User::where ('age ' , 35 )->get ();
50
+ $ this ->assertEquals (3 , count ($ users ));
51
+
52
+ $ users = User::where ('age ' , '= ' , 35 )->get ();
53
+ $ this ->assertEquals (3 , count ($ users ));
54
+
55
+ $ users = User::where ('age ' , '>= ' , 35 )->get ();
56
+ $ this ->assertEquals (4 , count ($ users ));
57
+
58
+ $ users = User::where ('age ' , '<= ' , 18 )->get ();
59
+ $ this ->assertEquals (1 , count ($ users ));
60
+
61
+ $ users = User::where ('age ' , '!= ' , 35 )->get ();
62
+ $ this ->assertEquals (6 , count ($ users ));
63
+
64
+ $ users = User::where ('age ' , '<> ' , 35 )->get ();
65
+ $ this ->assertEquals (6 , count ($ users ));
66
+ }
67
+
68
+ public function testAndWhere ()
69
+ {
70
+ $ users = User::where ('age ' , 35 )->where ('title ' , 'admin ' )->get ();
71
+ $ this ->assertEquals (2 , count ($ users ));
72
+
73
+ $ users = User::where ('age ' , '>= ' , 35 )->where ('title ' , 'user ' )->get ();
74
+ $ this ->assertEquals (2 , count ($ users ));
75
+ }
76
+
77
+ public function testLike ()
78
+ {
79
+ $ users = User::where ('name ' , 'like ' , '%doe ' )->get ();
80
+ $ this ->assertEquals (2 , count ($ users ));
81
+
82
+ $ users = User::where ('name ' , 'like ' , '%y% ' )->get ();
83
+ $ this ->assertEquals (3 , count ($ users ));
84
+
85
+ $ users = User::where ('name ' , 'like ' , 't% ' )->get ();
86
+ $ this ->assertEquals (1 , count ($ users ));
87
+ }
88
+
89
+ public function testPluck ()
90
+ {
91
+ $ name = User::where ('name ' , 'John Doe ' )->pluck ('name ' );
92
+ $ this ->assertEquals ('John Doe ' , $ name );
93
+ }
94
+
95
+ public function testList ()
96
+ {
97
+ $ list = User::lists ('title ' );
98
+ $ this ->assertEquals (9 , count ($ list ));
99
+ $ this ->assertEquals ('admin ' , $ list [0 ]);
100
+
101
+ $ list = User::lists ('title ' , 'name ' );
102
+ $ this ->assertEquals (9 , count ($ list ));
103
+ $ this ->assertEquals ('John Doe ' , key ($ list ));
104
+ $ this ->assertEquals ('admin ' , $ list ['John Doe ' ]);
105
+ }
106
+
107
+ public function testSelect ()
108
+ {
109
+ $ user = User::select ('name ' )->first ();
110
+
111
+ $ this ->assertEquals ('John Doe ' , $ user ->name );
112
+ $ this ->assertEquals (null , $ user ->age );
113
+
114
+ $ user = User::select ('name ' , 'title ' )->first ();
115
+
116
+ $ this ->assertEquals ('John Doe ' , $ user ->name );
117
+ $ this ->assertEquals ('admin ' , $ user ->title );
118
+ $ this ->assertEquals (null , $ user ->age );
119
+
120
+ $ user = User::get (array ('name ' ))->first ();
121
+
122
+ $ this ->assertEquals ('John Doe ' , $ user ->name );
123
+ $ this ->assertEquals (null , $ user ->age );
124
+ }
125
+
126
+ public function testOrWhere ()
127
+ {
128
+ $ users = User::where ('age ' , 13 )->orWhere ('title ' , 'admin ' )->get ();
129
+ $ this ->assertEquals (4 , count ($ users ));
130
+
131
+ $ users = User::where ('age ' , 13 )->orWhere ('age ' , 23 )->get ();
132
+ $ this ->assertEquals (2 , count ($ users ));
133
+ }
134
+
135
+ public function testBetween ()
136
+ {
137
+ $ users = User::whereBetween ('age ' , array (0 , 25 ))->get ();
138
+ $ this ->assertEquals (2 , count ($ users ));
139
+
140
+ $ users = User::whereBetween ('age ' , array (13 , 23 ))->get ();
141
+ $ this ->assertEquals (2 , count ($ users ));
142
+ }
143
+
144
+ public function testIn ()
145
+ {
146
+ $ users = User::whereIn ('age ' , array (13 , 23 ))->get ();
147
+ $ this ->assertEquals (2 , count ($ users ));
148
+
149
+ $ users = User::whereIn ('age ' , array (33 , 35 , 13 ))->get ();
150
+ $ this ->assertEquals (6 , count ($ users ));
151
+
152
+ $ users = User::whereNotIn ('age ' , array (33 , 35 ))->get ();
153
+ $ this ->assertEquals (4 , count ($ users ));
154
+
155
+ $ users = User::whereNotNull ('age ' )
156
+ ->whereNotIn ('age ' , array (33 , 35 ))->get ();
157
+ $ this ->assertEquals (3 , count ($ users ));
158
+ }
159
+
160
+ public function testWhereNull ()
161
+ {
162
+ $ users = User::whereNull ('age ' )->get ();
163
+ $ this ->assertEquals (1 , count ($ users ));
164
+ }
165
+
166
+ public function testWhereNotNull ()
167
+ {
168
+ $ users = User::whereNotNull ('age ' )->get ();
169
+ $ this ->assertEquals (8 , count ($ users ));
170
+ }
171
+
172
+ public function testOrder ()
173
+ {
174
+ $ user = User::whereNotNull ('age ' )->orderBy ('age ' , 'asc ' )->first ();
175
+ $ this ->assertEquals (13 , $ user ->age );
176
+
177
+ $ user = User::whereNotNull ('age ' )->orderBy ('age ' , 'desc ' )->first ();
178
+ $ this ->assertEquals (37 , $ user ->age );
179
+ }
180
+
181
+ public function testTake ()
182
+ {
183
+ $ users = User::take (3 )->get ();
184
+ $ this ->assertEquals (3 , count ($ users ));
185
+ }
186
+
187
+ public function testOffset ()
188
+ {
189
+ $ users = User::skip (1 )->take (2 )->get ();
190
+ $ this ->assertEquals (2 , count ($ users ));
191
+ $ this ->assertEquals ('Jane Doe ' , $ users [0 ]->name );
192
+ }
193
+
194
+ public function testIncrements ()
195
+ {
196
+ User::where ('name ' , 'John Doe ' )->increment ('age ' );
197
+ User::where ('name ' , 'John Doe ' )->increment ('age ' , 2 , array ('title ' => 'user ' ));
198
+
199
+ $ user = User::where ('name ' , 'John Doe ' )->first ();
200
+ $ this ->assertEquals (38 , $ user ->age );
201
+ $ this ->assertEquals ('user ' , $ user ->title );
202
+
203
+ User::where ('name ' , 'John Doe ' )->decrement ('age ' );
204
+ $ num = User::where ('name ' , 'John Doe ' )->decrement ('age ' , 2 , array ('title ' => 'admin ' ));
205
+
206
+ $ user = User::where ('name ' , 'John Doe ' )->first ();
207
+ $ this ->assertEquals (35 , $ user ->age );
208
+ $ this ->assertEquals ('admin ' , $ user ->title );
209
+ $ this ->assertEquals (1 , $ num );
210
+
211
+ User::increment ('age ' );
212
+ User::increment ('age ' , 2 );
213
+
214
+ $ user = User::where ('name ' , 'Mark Moe ' )->first ();
215
+ $ this ->assertEquals (26 , $ user ->age );
216
+
217
+ User::decrement ('age ' , 2 );
218
+ $ num = User::decrement ('age ' );
219
+
220
+ $ user = User::where ('name ' , 'Mark Moe ' )->first ();
221
+ $ this ->assertEquals (23 , $ user ->age );
222
+ $ this ->assertEquals (8 , $ num );
223
+ }
224
+
225
+ public function testAggregates ()
226
+ {
227
+ $ this ->assertEquals (9 , User::count ());
228
+ $ this ->assertEquals (37 , User::max ('age ' ));
229
+ $ this ->assertEquals (13 , User::min ('age ' ));
230
+ $ this ->assertEquals (30.5 , User::avg ('age ' ));
231
+ $ this ->assertEquals (244 , User::sum ('age ' ));
232
+
233
+ $ this ->assertEquals (35 , User::where ('title ' , 'admin ' )->max ('age ' ));
234
+ $ this ->assertEquals (37 , User::where ('title ' , 'user ' )->max ('age ' ));
235
+
236
+ $ this ->assertEquals (33 , User::where ('title ' , 'admin ' )->min ('age ' ));
237
+ $ this ->assertEquals (13 , User::where ('title ' , 'user ' )->min ('age ' ));
238
+ }
239
+
240
+ public function testGroupBy ()
241
+ {
242
+ $ users = User::groupBy ('title ' )->get ();
243
+ $ this ->assertEquals (3 , count ($ users ));
244
+
245
+ $ users = User::groupBy ('age ' )->get ();
246
+ $ this ->assertEquals (6 , count ($ users ));
247
+
248
+ $ users = User::groupBy ('age ' )->orderBy ('age ' , 'desc ' )->get ();
249
+ $ this ->assertEquals (37 , $ users [0 ]->age );
250
+ $ this ->assertEquals (35 , $ users [1 ]->age );
251
+ $ this ->assertEquals (33 , $ users [2 ]->age );
252
+ }
253
+
254
+ public function testSubquery ()
255
+ {
256
+ $ users = User::where ('title ' , 'admin ' )->orWhere (function ($ query )
257
+ {
258
+ $ query ->where ('name ' , 'Tommy Toe ' )
259
+ ->orWhere ('name ' , 'Error ' );
260
+ })
261
+ ->get ();
262
+
263
+ $ this ->assertEquals (5 , count ($ users ));
264
+
265
+ $ users = User::where ('title ' , 'user ' )->where (function ($ query )
266
+ {
267
+ $ query ->where ('age ' , 35 )
268
+ ->orWhere ('name ' , 'like ' , '%harry% ' );
269
+ })
270
+ ->get ();
271
+
272
+ $ this ->assertEquals (2 , count ($ users ));
273
+
274
+ $ users = User::where ('age ' , 35 )->orWhere (function ($ query )
275
+ {
276
+ $ query ->where ('title ' , 'admin ' )
277
+ ->orWhere ('name ' , 'Error ' );
278
+ })
279
+ ->get ();
280
+
281
+ $ this ->assertEquals (5 , count ($ users ));
282
+ }
283
+
284
+ public function testUpdate ()
285
+ {
286
+ User::where ('name ' , 'John Doe ' )
287
+ ->update (array ('age ' => 100 ));
288
+
289
+ $ user = User::where ('name ' , 'John Doe ' )->first ();
290
+ $ this ->assertEquals (100 , $ user ->age );
291
+ }
292
+
293
+ public function testDelete ()
294
+ {
295
+ User::where ('age ' , '> ' , 30 )->delete ();
296
+ $ this ->assertEquals (3 , User::count ());
297
+ }
298
+
299
+ public function testInsert ()
300
+ {
301
+ User::insert (
302
+ array ('name ' => 'Francois ' , 'age ' => 59 , 'title ' => 'Senior ' )
303
+ );
304
+
305
+ $ this ->assertEquals (10 , User::count ());
306
+
307
+ User::insert (array (
308
+ array ('name ' => 'Gaston ' , 'age ' => 60 , 'title ' => 'Senior ' ),
309
+ array ('name ' => 'Jaques ' , 'age ' => 61 , 'title ' => 'Senior ' )
310
+ ));
311
+
312
+ $ this ->assertEquals (12 , User::count ());
313
+ }
314
+
315
+ public function testInsertGetId ()
316
+ {
317
+ $ id = User::insertGetId (
318
+ array ('name ' => 'Gaston ' , 'age ' => 60 , 'title ' => 'Senior ' )
319
+ );
320
+
321
+ $ this ->assertEquals (10 , User::count ());
322
+ $ this ->assertNotNull ($ id );
323
+ $ this ->assertTrue (is_string ($ id ));
324
+ }
325
+
326
+ }
0 commit comments