QueryTest.php 6.89 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1
<?php
2
require_once('tests/app.php');
Jens Segers's avatar
Jens Segers committed
3 4 5

class QueryTest extends PHPUnit_Framework_TestCase {

6 7 8
	protected static $started = false;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

105 106
		$users = User::whereBetween('age', array(13, 23))->get();
		$this->assertEquals(2, count($users));
Jens Segers's avatar
Jens Segers committed
107 108
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

196 197 198 199
		$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
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 228
	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
229 230
	}

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

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

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

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

Jens Segers's avatar
Jens Segers committed
245
}