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

class ModelTest extends PHPUnit_Framework_TestCase {

5
	public function setUp() {}
Jens Segers's avatar
Jens Segers committed
6 7 8 9

	public function tearDown()
	{
		User::truncate();
10
		Soft::truncate();
Jens Segers's avatar
Jens Segers committed
11
		Book::truncate();
Jens Segers's avatar
Jens Segers committed
12
		Item::truncate();
Jens Segers's avatar
Jens Segers committed
13 14 15 16
	}

	public function testNewModel()
	{
17
		$user = new User;
Jens Segers's avatar
Jens Segers committed
18 19 20 21 22 23 24 25 26
		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $user);
		$this->assertEquals(false, $user->exists);
		$this->assertEquals('users', $user->getTable());
		$this->assertEquals('_id', $user->getKeyName());
		$this->assertEquals('users._id', $user->getQualifiedKeyName());
	}

	public function testInsert()
	{
27
		$user = new User;
Jens Segers's avatar
Jens Segers committed
28 29
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
30
		$user->age = 35;
31

Jens Segers's avatar
Jens Segers committed
32 33 34 35 36
		$user->save();

		$this->assertEquals(true, $user->exists);
		$this->assertEquals(1, User::count());

37
		$this->assertTrue(isset($user->_id));
Jens Segers's avatar
Jens Segers committed
38 39
		$this->assertNotEquals('', (string) $user->_id);
		$this->assertNotEquals(0, strlen((string) $user->_id));
40
		$this->assertInstanceOf('DateTime', $user->created_at);
Jens Segers's avatar
Jens Segers committed
41

Jens Segers's avatar
Jens Segers committed
42
		$this->assertEquals('John Doe', $user->name);
Jens Segers's avatar
Jens Segers committed
43 44 45 46 47
		$this->assertEquals(35, $user->age);
	}

	public function testUpdate()
	{
48
		$user = new User;
Jens Segers's avatar
Jens Segers committed
49 50
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
51 52 53 54 55 56 57 58 59
		$user->age = 35;
		$user->save();

		$check = User::find($user->_id);

		$check->age = 36;
		$check->save();

		$this->assertEquals(true, $check->exists);
60
		$this->assertInstanceOf('DateTime', $check->created_at);
61
		$this->assertInstanceOf('DateTime', $check->updated_at);
Jens Segers's avatar
Jens Segers committed
62 63
		$this->assertEquals(1, User::count());

Jens Segers's avatar
Jens Segers committed
64
		$this->assertEquals('John Doe', $check->name);
Jens Segers's avatar
Jens Segers committed
65 66 67 68 69
		$this->assertEquals(36, $check->age);
	}

	public function testDelete()
	{
70
		$user = new User;
Jens Segers's avatar
Jens Segers committed
71 72
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
73 74 75 76 77 78 79 80 81 82 83 84 85
		$user->age = 35;
		$user->save();

		$this->assertEquals(true, $user->exists);
		$this->assertEquals(1, User::count());

		$user->delete();

		$this->assertEquals(0, User::count());
	}

	public function testAll()
	{
86
		$user = new User;
Jens Segers's avatar
Jens Segers committed
87 88
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
89 90 91
		$user->age = 35;
		$user->save();

92
		$user = new User;
Jens Segers's avatar
Jens Segers committed
93 94
		$user->name = 'Jane Doe';
		$user->title = 'user';
Jens Segers's avatar
Jens Segers committed
95 96 97 98 99 100
		$user->age = 32;
		$user->save();

		$all = User::all();

		$this->assertEquals(2, count($all));
Jens Segers's avatar
Jens Segers committed
101 102
		$this->assertEquals('John Doe', $all[0]->name);
		$this->assertEquals('Jane Doe', $all[1]->name);
Jens Segers's avatar
Jens Segers committed
103 104 105 106
	}

	public function testFind()
	{
107
		$user = new User;
Jens Segers's avatar
Jens Segers committed
108 109
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
110 111 112 113 114 115 116
		$user->age = 35;
		$user->save();

		$check = User::find($user->_id);

		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $check);
		$this->assertEquals(true, $check->exists);
117
		$this->assertEquals($user->_id, $check->_id);
Jens Segers's avatar
Jens Segers committed
118

Jens Segers's avatar
Jens Segers committed
119
		$this->assertEquals('John Doe', $check->name);
Jens Segers's avatar
Jens Segers committed
120 121 122
		$this->assertEquals(35, $check->age);
	}

Jens Segers's avatar
Jens Segers committed
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
	public function testGet()
	{
		User::insert(array(
			array('name' => 'John Doe'),
			array('name' => 'Jane Doe')
		));

		$users = User::get();
		$this->assertEquals(2, count($users));
		$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $users);
		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $users[0]);
	}

	public function testFirst()
	{
		User::insert(array(
			array('name' => 'John Doe'),
			array('name' => 'Jane Doe')
		));

		$user = User::get()->first();
		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $user);
		$this->assertEquals('John Doe', $user->name);
	}

Jens Segers's avatar
Jens Segers committed
148 149 150 151 152 153 154 155 156 157 158 159 160
	public function testNoDocument()
	{
		$items = Item::where('name', 'nothing')->get();
		$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $items);
		$this->assertEquals(0, $items->count());

		$item =Item::where('name', 'nothing')->first();
		$this->assertEquals(null, $item);

		$item = Item::find('51c33d8981fec6813e00000a');
		$this->assertEquals(null, $item);
	}

Jens Segers's avatar
Jens Segers committed
161 162 163 164 165
	/**
     * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException
     */
	public function testFindOrfail()
	{
166
		User::findOrfail('51c33d8981fec6813e00000a');
Jens Segers's avatar
Jens Segers committed
167 168 169 170 171 172 173 174
	}

	public function testCreate()
	{
		$user = User::create(array('name' => 'Jane Poe'));

		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $user);
		$this->assertEquals(true, $user->exists);
Jens Segers's avatar
Jens Segers committed
175
		$this->assertEquals('Jane Poe', $user->name);
Jens Segers's avatar
Jens Segers committed
176 177 178 179
	}

	public function testDestroy()
	{
180
		$user = new User;
Jens Segers's avatar
Jens Segers committed
181 182
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
183 184 185 186 187 188 189 190 191 192
		$user->age = 35;
		$user->save();

		User::destroy((string) $user->_id);

		$this->assertEquals(0, User::count());
	}

	public function testTouch()
	{
193
		$user = new User;
Jens Segers's avatar
Jens Segers committed
194 195
		$user->name = 'John Doe';
		$user->title = 'admin';
Jens Segers's avatar
Jens Segers committed
196 197 198 199 200
		$user->age = 35;
		$user->save();

		$old = $user->updated_at;

Jens Segers's avatar
Jens Segers committed
201
		sleep(1);
Jens Segers's avatar
Jens Segers committed
202 203 204 205 206 207
		$user->touch();
		$check = User::find($user->_id);

		$this->assertNotEquals($old, $check->updated_at);
	}

208 209 210
	public function testSoftDelete()
	{
		$user = new Soft;
Jens Segers's avatar
Jens Segers committed
211
		$user->name = 'Softy';
212 213 214 215 216 217 218 219 220 221 222 223 224
		$user->save();
		$this->assertEquals(true, $user->exists);

		$user->delete();

		$check = Soft::find($user->_id);
		$this->assertEquals(null, $check);

		$all = Soft::get();
		$this->assertEquals(0, $all->count());

		$all = Soft::withTrashed()->get();
		$this->assertEquals(1, $all->count());
225 226 227 228 229 230 231 232

		$check = $all[0];
		$this->assertInstanceOf('DateTime', $check->deleted_at);
		$this->assertEquals(true, $check->trashed());

		$check->restore();
		$all = Soft::get();
		$this->assertEquals(1, $all->count());
233 234
	}

Jens Segers's avatar
Jens Segers committed
235 236 237 238 239 240 241 242
	public function testPrimaryKey()
	{
		$user = new User;
		$this->assertEquals('_id', $user->getKeyName());

		$book = new Book;
		$this->assertEquals('title', $book->getKeyName());

Jens Segers's avatar
Jens Segers committed
243 244
		$book->title = 'A Game of Thrones';
		$book->author = 'George R. R. Martin';
Jens Segers's avatar
Jens Segers committed
245 246
		$book->save();

Jens Segers's avatar
Jens Segers committed
247
		$this->assertEquals('A Game of Thrones', $book->getKey());
Jens Segers's avatar
Jens Segers committed
248

Jens Segers's avatar
Jens Segers committed
249
		$check = Book::find('A Game of Thrones');
Jens Segers's avatar
Jens Segers committed
250
		$this->assertEquals('title', $check->getKeyName());
Jens Segers's avatar
Jens Segers committed
251 252 253 254 255 256 257 258 259 260 261 262 263
		$this->assertEquals('A Game of Thrones', $check->getKey());
		$this->assertEquals('A Game of Thrones', $check->title);
	}

	public function testScope()
	{
		Item::insert(array(
			array('name' => 'knife', 'type' => 'sharp'),
			array('name' => 'spoon', 'type' => 'round')
		));

		$sharp = Item::sharp()->get();
		$this->assertEquals(1, $sharp->count());
Jens Segers's avatar
Jens Segers committed
264 265
	}

Jens Segers's avatar
Jens Segers committed
266 267 268 269 270 271 272 273 274 275 276 277 278 279
	public function testToArray()
	{
		$original = array(
			array('name' => 'knife', 'type' => 'sharp'),
			array('name' => 'spoon', 'type' => 'round')
		);

		Item::insert($original);

		$items = Item::all();
		$this->assertEquals($original, $items->toArray());
		$this->assertEquals($original[0], $items[0]->toArray());
	}

Jens Segers's avatar
Jens Segers committed
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
	public function testUnset()
	{
		$user1 = User::create(array('name' => 'John Doe', 'note1' => 'ABC', 'note2' => 'DEF'));
		$user2 = User::create(array('name' => 'Jane Doe', 'note1' => 'ABC', 'note2' => 'DEF'));

		$user1->unset('note1');

		$this->assertFalse(isset($user1->note1));
		$this->assertTrue(isset($user1->note2));
		$this->assertTrue(isset($user2->note1));
		$this->assertTrue(isset($user2->note2));

		// Re-fetch to be sure
		$user1 = User::find($user1->_id);
		$user2 = User::find($user2->_id);

		$this->assertFalse(isset($user1->note1));
		$this->assertTrue(isset($user1->note2));
		$this->assertTrue(isset($user2->note1));
		$this->assertTrue(isset($user2->note2));

		$user2->unset(array('note1', 'note2'));

		$this->assertFalse(isset($user2->note1));
		$this->assertFalse(isset($user2->note2));
	}

307
}