QueryTest.php 8.34 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1 2
<?php

3
class QueryTest extends TestCase {
Jens Segers's avatar
Jens Segers committed
4

5 6 7
	protected static $started = false;

	public function setUp()
Jens Segers's avatar
Jens Segers committed
8
	{
9 10 11
		parent::setUp();

		// only run this stuff once
12 13 14 15 16 17 18 19 20 21
		if (self::$started) return;

		User::create(array('name' => 'John Doe', 'age' => 35, 'title' => 'admin'));
		User::create(array('name' => 'Jane Doe', 'age' => 33, 'title' => 'admin'));
		User::create(array('name' => 'Harry Hoe', 'age' => 13, 'title' => 'user'));
		User::create(array('name' => 'Robert Roe', 'age' => 37, 'title' => 'user'));
		User::create(array('name' => 'Mark Moe', 'age' => 23, 'title' => 'user'));
		User::create(array('name' => 'Brett Boe', 'age' => 35, 'title' => 'user'));
		User::create(array('name' => 'Tommy Toe', 'age' => 33, 'title' => 'user'));
		User::create(array('name' => 'Yvonne Yoe', 'age' => 35, 'title' => 'admin'));
22
		User::create(array('name' => 'Error', 'age' => null, 'title' => null));
23 24

		self::$started = true;
Jens Segers's avatar
Jens Segers committed
25 26
	}

Jens Segers's avatar
Jens Segers committed
27
	public static function tearDownAfterClass()
Jens Segers's avatar
Jens Segers committed
28
	{
29
		User::truncate();
30 31
	}

32
	public function testWhere()
33
	{
34 35 36 37 38 39 40 41
		$users = User::where('age', 35)->get();
		$this->assertEquals(3, count($users));

		$users = User::where('age', '=', 35)->get();
		$this->assertEquals(3, count($users));

		$users = User::where('age', '>=', 35)->get();
		$this->assertEquals(4, count($users));
42

43
		$users = User::where('age', '<=', 18)->get();
Jens Segers's avatar
Jens Segers committed
44
		$this->assertEquals(1, count($users));
45

46 47 48 49 50
		$users = User::where('age', '!=', 35)->get();
		$this->assertEquals(6, count($users));

		$users = User::where('age', '<>', 35)->get();
		$this->assertEquals(6, count($users));
51 52
	}

53
	public function testAndWhere()
54
	{
55
		$users = User::where('age', 35)->where('title', 'admin')->get();
56 57
		$this->assertEquals(2, count($users));

58 59
		$users = User::where('age', '>=', 35)->where('title', 'user')->get();
		$this->assertEquals(2, count($users));
60 61
	}

62
	public function testLike()
63
	{
64 65
		$users = User::where('name', 'like', '%doe')->get();
		$this->assertEquals(2, count($users));
66

67 68
		$users = User::where('name', 'like', '%y%')->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
69

70 71 72
		$users = User::where('name', 'LIKE', '%y%')->get();
		$this->assertEquals(3, count($users));

73 74
		$users = User::where('name', 'like', 't%')->get();
		$this->assertEquals(1, count($users));
75 76
	}

77
	public function testSelect()
Jens Segers's avatar
Jens Segers committed
78
	{
79
		$user = User::where('name', 'John Doe')->select('name')->first();
Jens Segers's avatar
Jens Segers committed
80

81 82
		$this->assertEquals('John Doe', $user->name);
		$this->assertEquals(null, $user->age);
83
		$this->assertEquals(null, $user->title);
Jens Segers's avatar
Jens Segers committed
84

85
		$user = User::where('name', 'John Doe')->select('name', 'title')->first();
Jens Segers's avatar
Jens Segers committed
86

87 88 89
		$this->assertEquals('John Doe', $user->name);
		$this->assertEquals('admin', $user->title);
		$this->assertEquals(null, $user->age);
Jens Segers's avatar
Jens Segers committed
90

91 92 93 94 95 96
		$user = User::where('name', 'John Doe')->select(array('name', 'title'))->get()->first();

		$this->assertEquals('John Doe', $user->name);
		$this->assertEquals('admin', $user->title);
		$this->assertEquals(null, $user->age);

97
		$user = User::where('name', 'John Doe')->get(array('name'))->first();
Jens Segers's avatar
Jens Segers committed
98

99 100
		$this->assertEquals('John Doe', $user->name);
		$this->assertEquals(null, $user->age);
Jens Segers's avatar
Jens Segers committed
101 102
	}

103
	public function testOrWhere()
Jens Segers's avatar
Jens Segers committed
104
	{
105 106
		$users = User::where('age', 13)->orWhere('title', 'admin')->get();
		$this->assertEquals(4, count($users));
Jens Segers's avatar
Jens Segers committed
107

108 109 110
		$users = User::where('age', 13)->orWhere('age', 23)->get();
		$this->assertEquals(2, count($users));
	}
Jens Segers's avatar
Jens Segers committed
111

112 113 114 115
	public function testBetween()
	{
		$users = User::whereBetween('age', array(0, 25))->get();
		$this->assertEquals(2, count($users));
Jens Segers's avatar
Jens Segers committed
116

117 118
		$users = User::whereBetween('age', array(13, 23))->get();
		$this->assertEquals(2, count($users));
119 120 121 122

		// testing whereNotBetween for version 4.1
		$users = User::whereBetween('age', array(0, 25), 'and', true)->get();
		$this->assertEquals(6, count($users));
Jens Segers's avatar
Jens Segers committed
123 124
	}

125
	public function testIn()
Jens Segers's avatar
Jens Segers committed
126
	{
127 128
		$users = User::whereIn('age', array(13, 23))->get();
		$this->assertEquals(2, count($users));
Jens Segers's avatar
Jens Segers committed
129

130 131
		$users = User::whereIn('age', array(33, 35, 13))->get();
		$this->assertEquals(6, count($users));
Jens Segers's avatar
Jens Segers committed
132

133 134
		$users = User::whereNotIn('age', array(33, 35))->get();
		$this->assertEquals(4, count($users));
Jens Segers's avatar
Jens Segers committed
135

136 137 138
		$users = User::whereNotNull('age')
		             ->whereNotIn('age', array(33, 35))->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
139 140
	}

141
	public function testWhereNull()
142
	{
143 144 145
		$users = User::whereNull('age')->get();
		$this->assertEquals(1, count($users));
	}
146

147 148 149 150 151
	public function testWhereNotNull()
	{
		$users = User::whereNotNull('age')->get();
		$this->assertEquals(8, count($users));
	}
152

153 154 155 156
	public function testOrder()
	{
		$user = User::whereNotNull('age')->orderBy('age', 'asc')->first();
		$this->assertEquals(13, $user->age);
157

158 159 160
		$user = User::whereNotNull('age')->orderBy('age', 'ASC')->first();
		$this->assertEquals(13, $user->age);

161 162
		$user = User::whereNotNull('age')->orderBy('age', 'desc')->first();
		$this->assertEquals(37, $user->age);
163

164
		$user = User::whereNotNull('age')->orderBy('natural', 'asc')->first();
165
		$this->assertEquals(35, $user->age);
166

167 168
		$user = User::whereNotNull('age')->orderBy('natural', 'ASC')->first();
		$this->assertEquals(35, $user->age);
169

170
		$user = User::whereNotNull('age')->orderBy('natural', 'desc')->first();
171
		$this->assertEquals(35, $user->age);
172 173
	}

174 175 176 177
	public function testGroupBy()
	{
		$users = User::groupBy('title')->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
178

179 180
		$users = User::groupBy('age')->get();
		$this->assertEquals(6, count($users));
Jens Segers's avatar
Jens Segers committed
181

182 183
		$users = User::groupBy('age')->skip(1)->get();
		$this->assertEquals(5, count($users));
Jens Segers's avatar
Jens Segers committed
184

185 186
		$users = User::groupBy('age')->take(2)->get();
		$this->assertEquals(2, count($users));
Jens Segers's avatar
Jens Segers committed
187

188 189 190 191
		$users = User::groupBy('age')->orderBy('age', 'desc')->get();
		$this->assertEquals(37, $users[0]->age);
		$this->assertEquals(35, $users[1]->age);
		$this->assertEquals(33, $users[2]->age);
Jens Segers's avatar
Jens Segers committed
192

193
		$users = User::groupBy('age')->skip(1)->take(2)->orderBy('age', 'desc')->get();
194
		$this->assertEquals(2, count($users));
195 196
		$this->assertEquals(35, $users[0]->age);
		$this->assertEquals(33, $users[1]->age);
197 198 199 200 201
		$this->assertNull($users[0]->name);

		$users = User::select('name')->groupBy('age')->skip(1)->take(2)->orderBy('age', 'desc')->get();
		$this->assertEquals(2, count($users));
		$this->assertNotNull($users[0]->name);
202
	}
Jens Segers's avatar
Jens Segers committed
203

204 205 206 207 208 209 210 211 212 213
	public function testCount()
	{
		$count = User::where('age', '<>', 35)->count();
		$this->assertEquals(6, $count);

		// Test for issue #165
		$count = User::select('_id', 'age', 'title')->where('age', '<>', 35)->count();
		$this->assertEquals(6, $count);
	}

214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
	public function testSubquery()
	{
		$users = User::where('title', 'admin')->orWhere(function($query)
            {
                $query->where('name', 'Tommy Toe')
                      ->orWhere('name', 'Error');
            })
            ->get();

        $this->assertEquals(5, count($users));

        $users = User::where('title', 'user')->where(function($query)
            {
                $query->where('age', 35)
                      ->orWhere('name', 'like', '%harry%');
            })
            ->get();

        $this->assertEquals(2, count($users));

        $users = User::where('age', 35)->orWhere(function($query)
            {
                $query->where('title', 'admin')
                      ->orWhere('name', 'Error');
            })
            ->get();

        $this->assertEquals(5, count($users));
Jens Segers's avatar
Jens Segers committed
242 243
	}

244
	public function testWhereRaw()
245
	{
246 247 248 249
		$where = array('age' => array('$gt' => 30, '$lt' => 40));
		$users = User::whereRaw($where)->get();

		$this->assertEquals(6, count($users));
250

251 252 253
		$where1 = array('age' => array('$gt' => 30, '$lte' => 35));
		$where2 = array('age' => array('$gt' => 35, '$lt' => 40));
		$users = User::whereRaw($where1)->orWhereRaw($where2)->get();
254

255
		$this->assertEquals(6, count($users));
256 257
	}

258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
	public function testMultipleOr()
	{
		$users = User::where(function($query)
		{
			$query->where('age', 35)->orWhere('age', 33);
		})
		->where(function($query)
		{
			$query->where('name', 'John Doe')->orWhere('name', 'Jane Doe');
		})->get();

		$this->assertEquals(2, count($users));

		$users = User::where(function($query)
		{
			$query->orWhere('age', 35)->orWhere('age', 33);
		})
		->where(function($query)
		{
			$query->orWhere('name', 'John Doe')->orWhere('name', 'Jane Doe');
		})->get();

		$this->assertEquals(2, count($users));
	}

Jens Segers's avatar
Jens Segers committed
283 284 285 286 287 288 289 290 291 292 293
	public function testPaginate()
	{
		$results = User::paginate(2);
		$this->assertEquals(2, $results->count());
		$this->assertNotNull($results->first()->title);

		$results = User::paginate(2, array('name', 'age'));
		$this->assertEquals(2, $results->count());
		$this->assertNull($results->first()->title);
	}

294
}