QueryTest.php 6.6 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::where('name', 'John Doe')->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::where('name', 'John Doe')->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::where('name', 'John Doe')->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 147
		$user = User::whereNotNull('age')->orderBy('age', 'ASC')->first();
		$this->assertEquals(13, $user->age);

148 149
		$user = User::whereNotNull('age')->orderBy('age', 'desc')->first();
		$this->assertEquals(37, $user->age);
150

151
		$user = User::whereNotNull('age')->orderBy('natural', 'asc')->first();
152
		$this->assertEquals(35, $user->age);
153 154 155 156 157 158
		
		$user = User::whereNotNull('age')->orderBy('natural', 'ASC')->first();
		$this->assertEquals(35, $user->age);
		
		$user = User::whereNotNull('age')->orderBy('natural', 'desc')->first();
		$this->assertEquals(35, $user->age);		
159 160
	}

161 162 163 164
	public function testGroupBy()
	{
		$users = User::groupBy('title')->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
165

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

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

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

175 176 177 178
		$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
179

180 181 182 183
		$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
184

185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
	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
213 214
	}

215
	public function testRaw()
216
	{
217 218 219 220
		$where = array('age' => array('$gt' => 30, '$lt' => 40));
		$users = User::whereRaw($where)->get();

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

222 223 224
		$where1 = array('age' => array('$gt' => 30, '$lte' => 35));
		$where2 = array('age' => array('$gt' => 35, '$lt' => 40));
		$users = User::whereRaw($where1)->orWhereRaw($where2)->get();
225

226
		$this->assertEquals(6, count($users));
227 228
	}

229
}