QueryTest.php 6.86 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));
Jens Segers's avatar
Jens Segers committed
106 107
	}

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

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

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

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

124
	public function testWhereNull()
125
	{
126 127 128
		$users = User::whereNull('age')->get();
		$this->assertEquals(1, count($users));
	}
129

130 131 132 133 134
	public function testWhereNotNull()
	{
		$users = User::whereNotNull('age')->get();
		$this->assertEquals(8, count($users));
	}
135

136 137 138 139
	public function testOrder()
	{
		$user = User::whereNotNull('age')->orderBy('age', 'asc')->first();
		$this->assertEquals(13, $user->age);
140

141 142
		$user = User::whereNotNull('age')->orderBy('age', 'desc')->first();
		$this->assertEquals(37, $user->age);
143 144
	}

145
	public function testIncrements()
146
	{
147 148
		User::where('name', 'John Doe')->increment('age');
		User::where('name', 'John Doe')->increment('age', 2, array('title' => 'user'));
149

150 151 152
		$user = User::where('name', 'John Doe')->first();
		$this->assertEquals(38, $user->age);
		$this->assertEquals('user', $user->title);
153

154 155
		User::where('name', 'John Doe')->decrement('age');
		$num = User::where('name', 'John Doe')->decrement('age', 2, array('title' => 'admin'));
156

157 158 159 160
		$user = User::where('name', 'John Doe')->first();
		$this->assertEquals(35, $user->age);
		$this->assertEquals('admin', $user->title);
		$this->assertEquals(1, $num);
161

162 163
		User::increment('age');
		User::increment('age', 2);
164

165 166
		$user = User::where('name', 'Mark Moe')->first();
		$this->assertEquals(26, $user->age);
167

168 169 170 171 172 173
		User::decrement('age', 2);
		$num = User::decrement('age');

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

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

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

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

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

190 191 192 193
		$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
194

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

200 201 202 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
	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
228 229
	}

230
	public function testRaw()
231
	{
232 233 234 235
		$where = array('age' => array('$gt' => 30, '$lt' => 40));
		$users = User::whereRaw($where)->get();

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

237 238 239
		$where1 = array('age' => array('$gt' => 30, '$lte' => 35));
		$where2 = array('age' => array('$gt' => 35, '$lt' => 40));
		$users = User::whereRaw($where1)->orWhereRaw($where2)->get();
240

241
		$this->assertEquals(6, count($users));
242 243
	}

244
}