From f07bd4ba4be415a7ad4e4773c28e37228ddfabab Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Mon, 25 Jan 2016 10:15:58 +1100 Subject: [PATCH] Write tests for morphTo simple value get/set --- .../plugins/database/tester/models/Author.php | 6 +- .../database/tester/models/EventLog.php | 31 ++++++++++ .../plugins/database/tester/models/Post.php | 6 +- .../tester/updates/create_event_log_table.php | 28 +++++++++ .../database/tester/updates/version.yaml | 1 + .../plugins/database/BelongsToModelTest.php | 4 +- .../plugins/database/MorphToModelTest.php | 62 +++++++++++++++++++ 7 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/plugins/database/tester/models/EventLog.php create mode 100644 tests/fixtures/plugins/database/tester/updates/create_event_log_table.php create mode 100644 tests/unit/plugins/database/MorphToModelTest.php diff --git a/tests/fixtures/plugins/database/tester/models/Author.php b/tests/fixtures/plugins/database/tester/models/Author.php index 3f1c6d2a2..7379eb6a1 100644 --- a/tests/fixtures/plugins/database/tester/models/Author.php +++ b/tests/fixtures/plugins/database/tester/models/Author.php @@ -35,9 +35,13 @@ class Author extends Model 'roles' => ['Database\Tester\Models\Role', 'table' => 'database_tester_authors_roles'] ]; + public $morphMany = [ + 'event_log' => ['Database\Tester\Models\EventLog', 'name' => 'related', 'delete' => true, 'softDelete' => true], + ]; + } class SoftDeleteAuthor extends Author { use \October\Rain\Database\Traits\SoftDelete; -} \ No newline at end of file +} diff --git a/tests/fixtures/plugins/database/tester/models/EventLog.php b/tests/fixtures/plugins/database/tester/models/EventLog.php new file mode 100644 index 000000000..6e093a249 --- /dev/null +++ b/tests/fixtures/plugins/database/tester/models/EventLog.php @@ -0,0 +1,31 @@ + [] + ]; + +} diff --git a/tests/fixtures/plugins/database/tester/models/Post.php b/tests/fixtures/plugins/database/tester/models/Post.php index f3bde4026..73c08f5b7 100644 --- a/tests/fixtures/plugins/database/tester/models/Post.php +++ b/tests/fixtures/plugins/database/tester/models/Post.php @@ -27,6 +27,10 @@ class Post extends Model 'author' => 'Database\Tester\Models\Author', ]; + public $morphMany = [ + 'event_log' => ['Database\Tester\Models\EventLog', 'name' => 'related', 'delete' => true, 'softDelete' => true], + ]; + } class SluggablePost extends Post @@ -96,4 +100,4 @@ class RevisionablePost extends Post return 7; } -} \ No newline at end of file +} diff --git a/tests/fixtures/plugins/database/tester/updates/create_event_log_table.php b/tests/fixtures/plugins/database/tester/updates/create_event_log_table.php new file mode 100644 index 000000000..30a1d4c16 --- /dev/null +++ b/tests/fixtures/plugins/database/tester/updates/create_event_log_table.php @@ -0,0 +1,28 @@ +engine = 'InnoDB'; + $table->increments('id'); + $table->string('action', 30)->nullable(); + $table->string('related_id')->index()->nullable(); + $table->string('related_type')->index()->nullable(); + $table->softDeletes(); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('database_tester_event_log'); + } + +} diff --git a/tests/fixtures/plugins/database/tester/updates/version.yaml b/tests/fixtures/plugins/database/tester/updates/version.yaml index 29c6b2ee8..4dfc4ff9f 100644 --- a/tests/fixtures/plugins/database/tester/updates/version.yaml +++ b/tests/fixtures/plugins/database/tester/updates/version.yaml @@ -7,3 +7,4 @@ - create_categories_table.php - create_roles_table.php - create_users_table.php + - create_event_log_table.php diff --git a/tests/unit/plugins/database/BelongsToModelTest.php b/tests/unit/plugins/database/BelongsToModelTest.php index acf95f148..6d87dbd3a 100644 --- a/tests/unit/plugins/database/BelongsToModelTest.php +++ b/tests/unit/plugins/database/BelongsToModelTest.php @@ -96,6 +96,4 @@ class BelongsToModelTest extends PluginTestCase $this->assertNull($post->author_id); $this->assertNull($post->author); } - - -} \ No newline at end of file +} diff --git a/tests/unit/plugins/database/MorphToModelTest.php b/tests/unit/plugins/database/MorphToModelTest.php new file mode 100644 index 000000000..962f2d658 --- /dev/null +++ b/tests/unit/plugins/database/MorphToModelTest.php @@ -0,0 +1,62 @@ +runPluginRefreshCommand('Database.Tester'); + } + + public function testSetRelationValue() + { + Model::unguard(); + $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']); + $post1 = Post::create(['title' => "First post", 'description' => "Yay!!"]); + $post2 = Post::make(['title' => "Second post", 'description' => "Woohoo!!"]); + $event = EventLog::create(['action' => "user-created"]); + Model::reguard(); + + // Set by Model object + $event->related = $author; + $event->save(); + $this->assertEquals($author->id, $event->related_id); + $this->assertEquals('Stevie', $event->related->name); + + // Set by primary key + $event->related = [$post1->id, get_class($post1)]; + $this->assertEquals($post1->id, $event->related_id); + $this->assertEquals('First post', $event->related->title); + + // Nullify + $event->related = null; + $this->assertNull($event->related_id); + $this->assertNull($event->related); + + // Deferred in memory + $event->related = $post2; + $this->assertEquals('Second post', $event->related->title); + $this->assertNull($event->related_id); + $event->save(); + $this->assertEquals($post2->id, $event->related_id); + } + + public function testGetRelationValue() + { + Model::unguard(); + $author = Author::create(['name' => 'Stevie']); + $event = EventLog::make(['action' => "user-created", 'related_id' => $author->id, 'related_type' => get_class($author)]); + Model::reguard(); + + $this->assertEquals([$author->id, get_class($author)], $event->getRelationValue('related')); + } +}