From e5aa1d651ce1ac3328c631e1b431dc445402c2c6 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Wed, 6 Jan 2016 18:51:31 +1100 Subject: [PATCH] Prepare tests for BelongsToMany relation type --- .../plugins/database/tester/models/Author.php | 4 ++ .../plugins/database/tester/models/Role.php | 33 +++++++++++++++++ .../tester/updates/create_roles_table.php | 37 +++++++++++++++++++ .../database/tester/updates/version.yaml | 1 + .../database/BelongsToManyModelTest.php | 36 ++++++++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 tests/fixtures/plugins/database/tester/models/Role.php create mode 100644 tests/fixtures/plugins/database/tester/updates/create_roles_table.php create mode 100644 tests/unit/plugins/database/BelongsToManyModelTest.php diff --git a/tests/fixtures/plugins/database/tester/models/Author.php b/tests/fixtures/plugins/database/tester/models/Author.php index f2209551d..e1b757d55 100644 --- a/tests/fixtures/plugins/database/tester/models/Author.php +++ b/tests/fixtures/plugins/database/tester/models/Author.php @@ -29,4 +29,8 @@ class Author extends Model 'phone' => 'Database\Tester\Models\Phone', ]; + public $belongsToMany = [ + 'roles' => ['Database\Tester\Models\Role', 'table' => 'database_tester_authors_roles'] + ]; + } \ No newline at end of file diff --git a/tests/fixtures/plugins/database/tester/models/Role.php b/tests/fixtures/plugins/database/tester/models/Role.php new file mode 100644 index 000000000..74e1f4b03 --- /dev/null +++ b/tests/fixtures/plugins/database/tester/models/Role.php @@ -0,0 +1,33 @@ + ['Database\Tester\Models\User', 'table' => 'database_tester_authors_roles'] + ]; + +} diff --git a/tests/fixtures/plugins/database/tester/updates/create_roles_table.php b/tests/fixtures/plugins/database/tester/updates/create_roles_table.php new file mode 100644 index 000000000..6af4d48d6 --- /dev/null +++ b/tests/fixtures/plugins/database/tester/updates/create_roles_table.php @@ -0,0 +1,37 @@ +engine = 'InnoDB'; + $table->increments('id'); + $table->string('name')->nullable(); + $table->text('description')->nullable(); + $table->timestamps(); + }); + + Schema::create('database_tester_authors_roles', function($table) + { + $table->engine = 'InnoDB'; + $table->integer('author_id')->unsigned(); + $table->integer('role_id')->unsigned(); + $table->primary(['author_id', 'role_id']); + $table->string('clearance_level')->nullable(); + $table->boolean('is_executive')->default(false); + }); + } + + public function down() + { + Schema::dropIfExists('database_tester_roles'); + Schema::dropIfExists('database_tester_authors_roles'); + } + +} diff --git a/tests/fixtures/plugins/database/tester/updates/version.yaml b/tests/fixtures/plugins/database/tester/updates/version.yaml index 308c088b5..3897c3a8c 100644 --- a/tests/fixtures/plugins/database/tester/updates/version.yaml +++ b/tests/fixtures/plugins/database/tester/updates/version.yaml @@ -5,3 +5,4 @@ - create_authors_table.php - create_phones_table.php - create_categories_table.php + - create_roles_table.php diff --git a/tests/unit/plugins/database/BelongsToManyModelTest.php b/tests/unit/plugins/database/BelongsToManyModelTest.php new file mode 100644 index 000000000..9cff30ca8 --- /dev/null +++ b/tests/unit/plugins/database/BelongsToManyModelTest.php @@ -0,0 +1,36 @@ +runPluginRefreshCommand('Database.Tester'); + } + + public function testSetRelationValue() + { + Model::unguard(); + $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']); + $role1 = Role::create(['name' => "Designer", 'description' => "Quality"]); + $role2 = Role::create(['name' => "Programmer", 'description' => "Speed"]); + $role3 = Role::create(['name' => "Manager", 'description' => "Budget"]); + Model::reguard(); + + // Add to collection + $this->assertFalse($author->roles->contains($role1)); + $author->roles()->add($role1); + + // TODO: Should this occur as part of add() above? + $author->roles->push($role1); + + $this->assertTrue($author->roles->contains($role1)); + } +}