mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-09 03:01:18 +02:00
NEW: Add SilverStripe\ORM\UnexpectedDataException class. This change provides more graceful handling of the case where a ChangeSetItem is referencing a no-longer-existing class. The new exception, SilverStripe\ORM\UnexpectedDataException, is intended to be available for throwing whenever we have unexpected data in the database. It can be trapped by the relevant UIs and more graceful errors than HTTP 500s can be provided.
41 lines
1.1 KiB
PHP
41 lines
1.1 KiB
PHP
<?php
|
|
|
|
use SilverStripe\Dev\SapphireTest;
|
|
use SilverStripe\Admin\CampaignAdmin;
|
|
use SilverStripe\ORM\Versioning\ChangeSet;
|
|
use SilverStripe\ORM\UnexpectedDataException;
|
|
|
|
class CampaignAdminTest extends SapphireTest
|
|
{
|
|
|
|
/**
|
|
* Call a protected method on an object via reflection
|
|
*
|
|
* @param object $object The object to call the method on
|
|
* @param string $method The name of the method
|
|
* @param array $args The arguments to pass to the method
|
|
*/
|
|
function callProtectedMethod($object, $method, $args = []) {
|
|
$class = new ReflectionClass(get_class($object));
|
|
$methodObj = $class->getMethod($method);
|
|
$methodObj->setAccessible(true);
|
|
return $methodObj->invokeArgs($object, $args);
|
|
}
|
|
|
|
function testInvalidDataHandling() {
|
|
$changeset = new CampaignAdminTest_InvalidChangeSet();
|
|
$admin = new CampaignAdmin();
|
|
|
|
$result = $this->callProtectedMethod($admin, 'getChangeSetResource', [$changeset] );
|
|
$this->assertEquals('Corrupt database! bad data' , $result['Description']);
|
|
}
|
|
}
|
|
|
|
class CampaignAdminTest_InvalidChangeSet extends ChangeSet
|
|
{
|
|
function sync()
|
|
{
|
|
throw new UnexpectedDataException("bad data");
|
|
}
|
|
}
|