/** * Test calling handlers when delete model * * - expected one-time calling handler RelationBehavior::afterDelete */ public function testTriggerEventDelete() { $mockBehavior = $this->getMock(RelationBehavior::class, ['afterDelete']); $mockBehavior->relationalFields = ['file', 'images', 'news_files']; $mockBehavior->expects($this->once())->method('afterDelete'); $model = FakeNewsModel::findOne($this->model->id); $model->detachBehaviors(); $model->attachBehavior('rel', $mockBehavior); $model->delete(); }
/** * 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()); }