ModelTest.php 4.97 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
		include('tests/app.php');
Jens Segers's avatar
Jens Segers committed
16 17 18 19 20
	}

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

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

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

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

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

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

	public function testUpdate()
	{
58
		$user = new User;
Jens Segers's avatar
Jens Segers committed
59 60 61 62 63 64 65 66 67 68 69
		$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);
70
		$this->assertInstanceOf('DateTime', $check->created_at);
71
		$this->assertInstanceOf('DateTime', $check->updated_at);
Jens Segers's avatar
Jens Segers committed
72 73 74 75 76 77 78 79
		$this->assertEquals(1, User::count());

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

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

102
		$user = new User;
Jens Segers's avatar
Jens Segers committed
103 104 105 106 107 108 109 110 111 112 113 114 115 116
		$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()
	{
117
		$user = new User;
Jens Segers's avatar
Jens Segers committed
118 119 120 121 122 123 124 125 126
		$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);
127
		$this->assertEquals($user->_id, $check->_id);
Jens Segers's avatar
Jens Segers committed
128 129 130 131 132 133 134 135 136 137

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

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

	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()
	{
153
		$user = new User;
Jens Segers's avatar
Jens Segers committed
154 155 156 157 158 159 160 161 162 163 164 165
		$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()
	{
166
		$user = new User;
Jens Segers's avatar
Jens Segers committed
167 168 169 170 171 172 173
		$user->name = "John Doe";
		$user->title = "admin";
		$user->age = 35;
		$user->save();

		$old = $user->updated_at;

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

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

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
	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());
198 199 200 201 202 203 204 205

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

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

Jens Segers's avatar
Jens Segers committed
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
	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
228
}