QueryTest.php 6.18 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 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
	}

152 153 154 155
	public function testGroupBy()
	{
		$users = User::groupBy('title')->get();
		$this->assertEquals(3, count($users));
Jens Segers's avatar
Jens Segers committed
156

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

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

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

166 167 168 169
		$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
170

171 172 173 174
		$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
175

176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
	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
204 205
	}

206
	public function testRaw()
207
	{
208 209 210 211
		$where = array('age' => array('$gt' => 30, '$lt' => 40));
		$users = User::whereRaw($where)->get();

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

213 214 215
		$where1 = array('age' => array('$gt' => 30, '$lte' => 35));
		$where2 = array('age' => array('$gt' => 35, '$lt' => 40));
		$users = User::whereRaw($where1)->orWhereRaw($where2)->get();
216

217
		$this->assertEquals(6, count($users));
218 219
	}

220
}