ModelTest.php 5.03 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1
<?php
Jens Segers's avatar
Jens Segers committed
2
require_once('vendor/autoload.php');
Jens Segers's avatar
Jens Segers committed
3
require_once('models/User.php');
4
require_once('models/Soft.php');
Jens Segers's avatar
Jens Segers committed
5
require_once('models/Book.php');
Jens Segers's avatar
Jens Segers committed
6 7 8

use Jenssegers\Mongodb\Connection;
use Jenssegers\Mongodb\Model;
9
use Jenssegers\Mongodb\DatabaseManager;
Jens Segers's avatar
Jens Segers committed
10 11 12 13 14

class ModelTest extends PHPUnit_Framework_TestCase {

	public function setUp()
	{
15 16
		include('tests/app.php');
		Model::setConnectionResolver(new DatabaseManager($app));
Jens Segers's avatar
Jens Segers committed
17 18 19 20 21
	}

	public function tearDown()
	{
		User::truncate();
22
		Soft::truncate();
Jens Segers's avatar
Jens Segers committed
23
		Book::truncate();
Jens Segers's avatar
Jens Segers committed
24 25 26 27
	}

	public function testNewModel()
	{
28
		$user = new User;
Jens Segers's avatar
Jens Segers committed
29 30 31 32 33 34 35 36 37
		$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()
	{
38
		$user = new User;
Jens Segers's avatar
Jens Segers committed
39 40 41
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
42

Jens Segers's avatar
Jens Segers committed
43 44 45 46 47
		$user->save();

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

48
		$this->assertTrue(isset($user->_id));
Jens Segers's avatar
Jens Segers committed
49 50
		$this->assertNotEquals('', (string) $user->_id);
		$this->assertNotEquals(0, strlen((string) $user->_id));
51
		$this->assertInstanceOf('DateTime', $user->created_at);
Jens Segers's avatar
Jens Segers committed
52 53 54 55 56 57 58

		$this->assertEquals("John Doe", $user->name);
		$this->assertEquals(35, $user->age);
	}

	public function testUpdate()
	{
59
		$user = new User;
Jens Segers's avatar
Jens Segers committed
60 61 62 63 64 65 66 67 68 69 70
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

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

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

		$this->assertEquals(true, $check->exists);
71
		$this->assertInstanceOf('DateTime', $check->created_at);
72
		$this->assertInstanceOf('DateTime', $check->updated_at);
Jens Segers's avatar
Jens Segers committed
73 74 75 76 77 78 79 80
		$this->assertEquals(1, User::count());

		$this->assertEquals("John Doe", $check->name);
		$this->assertEquals(36, $check->age);
	}

	public function testDelete()
	{
81
		$user = new User;
Jens Segers's avatar
Jens Segers committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
		$user->name = "John Doe";
		$user->title = "admin";
		$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()
	{
97
		$user = new User;
Jens Segers's avatar
Jens Segers committed
98 99 100 101 102
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

103
		$user = new User;
Jens Segers's avatar
Jens Segers committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117
		$user->name = "Jane Doe";
		$user->title = "user";
		$user->age = 32;
		$user->save();

		$all = User::all();

		$this->assertEquals(2, count($all));
		$this->assertEquals("John Doe", $all[0]->name);
		$this->assertEquals("Jane Doe", $all[1]->name);
	}

	public function testFind()
	{
118
		$user = new User;
Jens Segers's avatar
Jens Segers committed
119 120 121 122 123 124 125 126 127
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

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

		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $check);
		$this->assertEquals(true, $check->exists);
128
		$this->assertEquals($user->_id, $check->_id);
Jens Segers's avatar
Jens Segers committed
129 130 131 132 133 134 135 136 137 138

		$this->assertEquals("John Doe", $check->name);
		$this->assertEquals(35, $check->age);
	}

	/**
     * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException
     */
	public function testFindOrfail()
	{
139
		User::findOrfail('51c33d8981fec6813e00000a');
Jens Segers's avatar
Jens Segers committed
140 141 142 143 144 145 146 147 148 149 150 151 152 153
	}

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

		$this->assertInstanceOf('Jenssegers\Mongodb\Model', $user);
		$this->assertEquals(true, $user->exists);

		$this->assertEquals("Jane Poe", $user->name);
	}

	public function testDestroy()
	{
154
		$user = new User;
Jens Segers's avatar
Jens Segers committed
155 156 157 158 159 160 161 162 163 164 165 166
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

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

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

	public function testTouch()
	{
167
		$user = new User;
Jens Segers's avatar
Jens Segers committed
168 169 170 171 172 173 174
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

		$old = $user->updated_at;

Jens Segers's avatar
Jens Segers committed
175
		sleep(1);
Jens Segers's avatar
Jens Segers committed
176 177 178 179 180 181
		$user->touch();
		$check = User::find($user->_id);

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

182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
	public function testSoftDelete()
	{
		$user = new Soft;
		$user->name = "Softy";
		$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());
199 200 201 202 203 204 205 206

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

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

Jens Segers's avatar
Jens Segers committed
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
	public function testPrimaryKey()
	{
		$user = new User;
		$this->assertEquals('_id', $user->getKeyName());

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

		$book->title = "A Game of Thrones";
		$book->author = "George R. R. Martin";
		$book->save();

		$this->assertEquals("A Game of Thrones", $book->getKey());

		$check = Book::find("A Game of Thrones");
		$this->assertEquals('title', $check->getKeyName());
		$this->assertEquals("A Game of Thrones", $check->getKey());
		$this->assertEquals("A Game of Thrones", $check->title);
	}

Jens Segers's avatar
Jens Segers committed
229
}