mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-27 04:56:02 +02:00
API Improved support for versioned DataObject API GridField extensions for versioned dataobjects API De-couple File and ErrorPage API File::handle_shortcode now respects canView() API AssetControlExtension is now able to delete, publish, or protect files API Upload now protects new assets by default
80 lines
4.0 KiB
PHP
80 lines
4.0 KiB
PHP
<?php
|
|
use SilverStripe\Filesystem\AssetManipulationList;
|
|
|
|
/**
|
|
* Tests set manipulations of groups of assets of differing visibilities
|
|
*/
|
|
class AssetManipulationListTest extends SapphireTest {
|
|
|
|
public function testVisibility() {
|
|
$set = new AssetManipulationList();
|
|
$file1 = ['Filename' => 'Test1.jpg', 'Hash' => '975677589962604d9e16b700cf84734f9dda2817'];
|
|
$file2 = ['Filename' => 'Test2.jpg', 'Hash' => '22af86a45ea56287437a12cf83aded5c077a5db5'];
|
|
$file3 = ['Filename' => 'DupeHash1.jpg', 'Hash' => 'f167433dd318e738281b845a07d7be2053b8c997'];
|
|
$file4 = ['Filename' => 'DupeName.jpg', 'Hash' => 'afde6577a034323959b7915f41ac8d1f53bc597f'];
|
|
$file5 = ['Filename' => 'DupeName.jpg', 'Hash' => '1e94b066e5aa16907d0e5e32556c7a2a0b692eb9'];
|
|
$file6 = ['Filename' => 'DupeHash2.jpg', 'Hash' => 'f167433dd318e738281b845a07d7be2053b8c997'];
|
|
|
|
// Non-overlapping assets remain in assigned sets
|
|
$this->assertTrue($set->addDeletedAsset($file1));
|
|
$this->assertTrue($set->addDeletedAsset($file2));
|
|
$this->assertTrue($set->addProtectedAsset($file3));
|
|
$this->assertTrue($set->addProtectedAsset($file4));
|
|
$this->assertTrue($set->addPublicAsset($file5));
|
|
$this->assertTrue($set->addPublicAsset($file6));
|
|
|
|
// Check initial state of list
|
|
$this->assertEquals(6, $this->countItems($set));
|
|
$this->assertContains($file1, $set->getDeletedAssets());
|
|
$this->assertContains($file2, $set->getDeletedAssets());
|
|
$this->assertContains($file3, $set->getProtectedAssets());
|
|
$this->assertContains($file4, $set->getProtectedAssets());
|
|
$this->assertContains($file5, $set->getPublicAssets());
|
|
$this->assertContains($file6, $set->getPublicAssets());
|
|
|
|
// Public or Protected assets will not be deleted
|
|
$this->assertFalse($set->addDeletedAsset($file3));
|
|
$this->assertFalse($set->addDeletedAsset($file4));
|
|
$this->assertFalse($set->addDeletedAsset($file5));
|
|
$this->assertFalse($set->addDeletedAsset($file6));
|
|
$this->assertEquals(6, $this->countItems($set));
|
|
$this->assertNotContains($file3, $set->getDeletedAssets());
|
|
$this->assertNotContains($file4, $set->getDeletedAssets());
|
|
$this->assertNotContains($file5, $set->getDeletedAssets());
|
|
$this->assertNotContains($file6, $set->getDeletedAssets());
|
|
|
|
// Adding records as protected will remove them from the deletion list, but
|
|
// not the public list
|
|
$this->assertTrue($set->addProtectedAsset($file1));
|
|
$this->assertFalse($set->addProtectedAsset($file5));
|
|
$this->assertEquals(6, $this->countItems($set));
|
|
$this->assertNotContains($file1, $set->getDeletedAssets());
|
|
$this->assertContains($file1, $set->getProtectedAssets());
|
|
$this->assertNotContains($file5, $set->getProtectedAssets());
|
|
$this->assertContains($file5, $set->getPublicAssets());
|
|
|
|
// Adding records as public will ensure they are not deleted or marked as protected
|
|
// Existing public assets won't be re-added
|
|
$this->assertTrue($set->addPublicAsset($file2));
|
|
$this->assertTrue($set->addPublicAsset($file4));
|
|
$this->assertFalse($set->addPublicAsset($file5));
|
|
$this->assertEquals(6, $this->countItems($set));
|
|
$this->assertNotContains($file2, $set->getDeletedAssets());
|
|
$this->assertNotContains($file2, $set->getProtectedAssets());
|
|
$this->assertContains($file2, $set->getPublicAssets());
|
|
$this->assertNotContains($file4, $set->getProtectedAssets());
|
|
$this->assertContains($file4, $set->getPublicAssets());
|
|
$this->assertContains($file5, $set->getPublicAssets());
|
|
}
|
|
|
|
/**
|
|
* Helper to count all items in a set
|
|
*
|
|
* @param AssetManipulationList $set
|
|
* @return int
|
|
*/
|
|
protected function countItems(AssetManipulationList $set) {
|
|
return count($set->getPublicAssets()) + count($set->getProtectedAssets()) + count($set->getDeletedAssets());
|
|
}
|
|
}
|