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

class QueryTest extends PHPUnit_Framework_TestCase {

5 6 7
	protected static $started = false;

	public function setUp()
Jens Segers's avatar
Jens Segers committed
8
	{
9 10 11 12 13 14 15 16 17 18
		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'));
19
		User::create(array('name' => 'Error', 'age' => null, 'title' => null));
20 21

		self::$started = true;
Jens Segers's avatar
Jens Segers committed
22 23
	}

Jens Segers's avatar
Jens Segers committed
24
	public static function tearDownAfterClass()
Jens Segers's avatar
Jens Segers committed
25
	{
26
		User::truncate();
27 28
	}

29
	public function testWhere()
30
	{
31 32 33 34 35 36 37 38
		$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));
39

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

43 44 45 46 47
		$users = User::where('age', '!=', 35)->get();
		$this->assertEquals(6, count($users));

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

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

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

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

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

67 68
		$users = User::where('name', 'like', 't%')->get();
		$this->assertEquals(1, count($users));
69 70
	}

71
	public function testSelect()
Jens Segers's avatar
Jens Segers committed
72
	{
73
		$user = User::select('name')->first();
Jens Segers's avatar
Jens Segers committed
74

75 76
		$this->assertEquals('John Doe', $user->name);
		$this->assertEquals(null, $user->age);
Jens Segers's avatar
Jens Segers committed
77

78
		$user = User::select('name', 'title')->first();
Jens Segers's avatar
Jens Segers committed
79

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

84
		$user = User::get(array('name'))->first();
Jens Segers's avatar
Jens Segers committed
85

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

90
	public function testOrWhere()
Jens Segers's avatar
Jens Segers committed
91
	{
92 93
		$users = User::where('age', 13)->orWhere('title', 'admin')->get();
		$this->assertEquals(4, count($users));
Jens Segers's avatar
Jens Segers committed
94

95 96 97
		$users = User::where('age', 13)->orWhere('age', 23)->get();
		$this->assertEquals(2, count($users));
	}
Jens Segers's avatar
Jens Segers committed
98

99 100 101 102
	public function testBetween()
	{
		$users = User::whereBetween('age', array(0, 25))->get();
		$this->assertEquals(2, count($users));
Jens Segers's avatar
Jens Segers committed
103

104 105
		$users = User::whereBetween('age', array(13, 23))->get();
		$this->assertEquals(2, count($users));
106 107 108 109

		// 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
110 111
	}

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

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

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

123 124 125
		$users = User::whereNotNull('age')
		             ->whereNotIn('age', array(33, 35))->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
126 127
	}

128
	public function testWhereNull()
129
	{
130 131 132
		$users = User::whereNull('age')->get();
		$this->assertEquals(1, count($users));
	}
133

134 135 136 137 138
	public function testWhereNotNull()
	{
		$users = User::whereNotNull('age')->get();
		$this->assertEquals(8, count($users));
	}
139

140 141 142 143
	public function testOrder()
	{
		$user = User::whereNotNull('age')->orderBy('age', 'asc')->first();
		$this->assertEquals(13, $user->age);
144

145 146
		$user = User::whereNotNull('age')->orderBy('age', 'desc')->first();
		$this->assertEquals(37, $user->age);
147 148
	}

149
	public function testIncrements()
150
	{
151 152
		User::where('name', 'John Doe')->increment('age');
		User::where('name', 'John Doe')->increment('age', 2, array('title' => 'user'));
153

154 155 156
		$user = User::where('name', 'John Doe')->first();
		$this->assertEquals(38, $user->age);
		$this->assertEquals('user', $user->title);
157

158 159
		User::where('name', 'John Doe')->decrement('age');
		$num = User::where('name', 'John Doe')->decrement('age', 2, array('title' => 'admin'));
160

161 162 163 164
		$user = User::where('name', 'John Doe')->first();
		$this->assertEquals(35, $user->age);
		$this->assertEquals('admin', $user->title);
		$this->assertEquals(1, $num);
165

166 167
		User::increment('age');
		User::increment('age', 2);
168

169 170
		$user = User::where('name', 'Mark Moe')->first();
		$this->assertEquals(26, $user->age);
171

172 173 174 175 176 177
		User::decrement('age', 2);
		$num = User::decrement('age');

		$user = User::where('name', 'Mark Moe')->first();
		$this->assertEquals(23, $user->age);
		$this->assertEquals(8, $num);
178 179
	}

180 181 182 183
	public function testGroupBy()
	{
		$users = User::groupBy('title')->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
184

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

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

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

194 195 196 197
		$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
198

199 200 201 202
		$users = User::groupBy('age')->skip(1)->take(2)->orderBy('age', 'desc')->get();
		$this->assertEquals(35, $users[0]->age);
		$this->assertEquals(33, $users[1]->age);
	}
Jens Segers's avatar
Jens Segers committed
203

204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
	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
232 233
	}

234
	public function testRaw()
235
	{
236 237 238 239
		$where = array('age' => array('$gt' => 30, '$lt' => 40));
		$users = User::whereRaw($where)->get();

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

241 242 243
		$where1 = array('age' => array('$gt' => 30, '$lte' => 35));
		$where2 = array('age' => array('$gt' => 35, '$lt' => 40));
		$users = User::whereRaw($where1)->orWhereRaw($where2)->get();
244

245
		$this->assertEquals(6, count($users));
246 247
	}

248
}