diff --git a/tests/SaveRelationsBehaviorTest.php b/tests/SaveRelationsBehaviorTest.php index d62450e..d0f9841 100644 --- a/tests/SaveRelationsBehaviorTest.php +++ b/tests/SaveRelationsBehaviorTest.php @@ -41,6 +41,7 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase $db->createCommand()->dropTable('tags')->execute(); $db->createCommand()->dropTable('project_link')->execute(); $db->createCommand()->dropTable('project_contact')->execute(); + $db->createCommand()->dropTable('project_image')->execute(); $db->createCommand()->dropTable('dummy')->execute(); parent::tearDown(); } @@ -124,11 +125,18 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase // Project Contact $db->createCommand()->createTable('project_contact', [ 'project_id' => $migration->integer()->notNull(), - 'email' => $migration->text()->notNull(), - 'phone' => $migration->text(), + 'email' => $migration->string()->notNull(), + 'phone' => $migration->string(), 'PRIMARY KEY(project_id, email)' ])->execute(); + // Project Image + $db->createCommand()->createTable('project_image', [ + 'id' => $migration->primaryKey(), + 'project_id' => $migration->integer()->notNull(), + 'path' => $migration->string()->notNull() + ])->execute(); + // Dummy $db->createCommand()->createTable('dummy', [ 'id' => $migration->primaryKey(), @@ -183,6 +191,12 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase ['admin@apple.com', '(123) 456–7890', 1] ])->execute(); + $db->createCommand()->batchInsert('project_image', ['id', 'project_id', 'path'], [ + [1, 1, '/images/macosx.png'], + [2, 1, '/images/macosx_icon.png'], + [3, 2, '/images/windows.png'] + ])->execute(); + $db->createCommand()->batchInsert('project_user', ['project_id', 'user_id'], [ [1, 1], [1, 4], @@ -538,6 +552,28 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase $this->assertEquals($project->contacts[1]->phone, '(987) 654–3210'); } + public function testLoadHasManyWithoutReferenceKeyShouldSucceed() + { + $project = Project::findOne(1); + $data = [ + 'ProjectImage' => [ + [ + 'path' => '/images/macosx_new.png' + ], + [ + 'id' => 2, + 'path' => '/images/macosx_updated.png' + ] + ] + ]; + $project->loadRelations($data); + $this->assertTrue($project->save(), 'Project could not be saved'); + $this->assertCount(2, $project->images, "Project should have 2 images"); + $this->assertEquals($project->images[0]->id, 2); + $this->assertEquals($project->images[0]->path, '/images/macosx_updated.png'); + $this->assertEquals($project->images[1]->path, '/images/macosx_new.png'); + } + public function testAssignSingleObjectToHasManyRelationShouldSucceed() { $project = new Project(); diff --git a/tests/models/Project.php b/tests/models/Project.php index d1b6bcd..dc0b32a 100644 --- a/tests/models/Project.php +++ b/tests/models/Project.php @@ -26,6 +26,7 @@ class Project extends \yii\db\ActiveRecord 'company', 'users', 'contacts', + 'images', 'links' => ['scenario' => Link::SCENARIO_FIRST], 'projectLinks' => ['cascadeDelete' => true], 'tags' => [ @@ -107,6 +108,14 @@ class Project extends \yii\db\ActiveRecord /** * @return \yii\db\ActiveQuery */ + public function getImages() + { + return $this->hasMany(ProjectImage::className(), ['project_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ public function getLinks() { return $this->hasMany(Link::className(), ['language' => 'language', 'name' => 'name'])->via('projectLinks'); diff --git a/tests/models/ProjectImage.php b/tests/models/ProjectImage.php new file mode 100644 index 0000000..a8fdb5c --- /dev/null +++ b/tests/models/ProjectImage.php @@ -0,0 +1,29 @@ +