/** * @group Behaviour * @group AssetsOnAfterSave * @covers FOF30\Model\DataModel\Behaviour\Assets::onAfterSave * @dataProvider AssetsDataprovider::getTestOnAfterSave */ public function testOnAfterSave($test, $check) { $msg = 'Own::onAfterBuildQuery %s - Case: ' . $check['case']; $db = \JFactory::getDbo(); $config = array('idFieldName' => $test['tableid'], 'tableName' => $test['table']); $model = new DataModelStub(static::$container, $config); $dispatcher = $model->getBehavioursDispatcher(); $behavior = new Assets($dispatcher); $model->setAssetsTracked($test['track']); if ($test['load']) { $model->find($test['load']); } if ($test['rules']) { $model->setRules($test['rules']); } $query = $db->getQuery(true)->select('COUNT(*)')->from('#__assets'); $beforeTotal = $db->setQuery($query)->loadResult(); $result = $behavior->onAfterSave($model); $this->assertTrue($result, sprintf($msg, 'Should always return true')); $asset = null; if ($check['count'] == 0) { $query = $db->getQuery(true)->select('COUNT(*)')->from('#__assets'); $afterTotal = $db->setQuery($query)->loadResult(); $this->assertEquals(0, $beforeTotal - $afterTotal, sprintf($msg, 'Wrong number of assets saved')); } else { // Let's check what has been saved $query = $db->getQuery(true)->select('id, rules')->from('#__assets')->where('name = ' . $db->q($model->getAssetName())); $asset = $db->setQuery($query)->loadObject(); $this->assertEquals($check['count'], (int) (!is_null($asset)), sprintf('Wrong number of assets saved')); } if (!is_null($check['rules'])) { $this->assertEquals($check['rules'], $asset->rules, sprintf($msg, 'Wrong rule stored')); } if ($asset) { $asset_field = $model->getFieldAlias('asset_id'); $model->find($test['load']); $this->assertEquals($asset->id, $model->{$asset_field}, sprintf($msg, 'Asset id not stored inside the model')); } }