/** * Testing method validateData() * - return true for valid data * - model has no errors for valid data * - return false for invalid data * - model has errors for invalid data * @see RelationBehavior::validateData */ public function testValidateData() { $behavior = new RelationBehavior(['relationalFields' => ['file', 'images']]); /** @var FakeNewsModel|\PHPUnit_Framework_MockObject_MockObject $mockModel */ $mockModel = $this->getMock(FakeNewsModel::className(), ['getErrors', 'addError', 'getFile', 'getImages']); $mockModel->expects($this->any())->method('addError'); $mockModel->expects($this->any())->method('getErrors')->willReturn([]); $activeQuery = $mockModel->hasOne(FakeFilesModel::className(), ['id' => 'file_id']); $mockModel->expects($this->any())->method('getFile')->willReturn($activeQuery); $activeQuery = $mockModel->hasMany(FakeFilesModel::className(), ['entity_id' => 'id']); $mockModel->expects($this->any())->method('getImages')->willReturn($activeQuery); $mockModel->id = 1; $behavior->owner = $mockModel; // success $validData = ['file' => ['src' => '/images/file.png'], 'images' => [['src' => '/images/image2.png'], ['src' => '/images/image2.png']]]; foreach ($validData as $field => $data) { $behavior->{$field} = $data; $method = new \ReflectionMethod($behavior, 'loadData'); $method->setAccessible(true); $method->invoke($behavior); $method = new \ReflectionMethod($behavior, 'validateData'); $method->setAccessible(true); $this->assertTrue($method->invoke($behavior)); } $this->assertEmpty($behavior->owner->getErrors()); // fail $mockModel = $this->getMock(FakeNewsModel::className(), ['getErrors', 'addError', 'getFile', 'getImages']); $mockModel->expects($this->any())->method('addError'); $mockModel->expects($this->any())->method('getErrors')->willReturn(['file' => ['File is invalid'], 'images' => ['Images is invalid']]); $activeQuery = $mockModel->hasOne(FakeFilesModel::className(), ['id' => 'file_id']); $mockModel->expects($this->any())->method('getFile')->willReturn($activeQuery); $activeQuery = $mockModel->hasMany(FakeFilesModel::className(), ['entity_id' => 'id']); $mockModel->expects($this->any())->method('getImages')->willReturn($activeQuery); $mockModel->id = 1; $behavior->owner = $mockModel; $invalidData = ['file' => ['src' => ''], 'images' => [['src' => '/images/image1.png'], ['src' => '']]]; foreach ($invalidData as $field => $data) { $behavior->{$field} = $data; $method = new \ReflectionMethod($behavior, 'loadData'); $method->setAccessible(true); $method->invoke($behavior); $method = new \ReflectionMethod($behavior, 'validateData'); $method->setAccessible(true); $this->assertFalse($method->invoke($behavior)); } $this->assertNotEmpty($behavior->owner->getErrors()); }
/** * @return $this */ public function getNews_files() { return $this->hasMany(FakeFilesModel::className(), ['id' => 'file_id'])->via('newsFiles'); }