/**
  * 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());
 }
Exemplo n.º 2
0
 /**
  * @return $this
  */
 public function getNews_files()
 {
     return $this->hasMany(FakeFilesModel::className(), ['id' => 'file_id'])->via('newsFiles');
 }