mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
7073246a37
Note that the main tests are added as behat tests in the admin module
115 lines
3.4 KiB
PHP
115 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace SilverStripe\Forms\Tests\GridField;
|
|
|
|
use LogicException;
|
|
use ReflectionMethod;
|
|
use SilverStripe\Dev\SapphireTest;
|
|
use SilverStripe\Control\Controller;
|
|
use SilverStripe\Forms\FieldList;
|
|
use SilverStripe\Forms\Form;
|
|
use SilverStripe\Forms\GridField\GridFieldPrintButton;
|
|
use SilverStripe\Forms\GridField\GridFieldConfig;
|
|
use SilverStripe\Forms\GridField\GridFieldPaginator;
|
|
use SilverStripe\Forms\GridField\GridField;
|
|
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
|
use SilverStripe\Forms\Tests\GridField\GridFieldPrintButtonTest\TestObject;
|
|
use SilverStripe\ORM\ArrayList;
|
|
use SilverStripe\View\ArrayData;
|
|
|
|
class GridFieldPrintButtonTest extends SapphireTest
|
|
{
|
|
|
|
protected static $extra_dataobjects = [
|
|
TestObject::class,
|
|
];
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// 42 items
|
|
for ($i = 1; $i <= 42; $i++) {
|
|
$obj = new TestObject();
|
|
$obj->Name = "Object {$i}";
|
|
$obj->write();
|
|
}
|
|
}
|
|
|
|
public function testLimit()
|
|
{
|
|
$this->assertEquals(42, $this->getTestableRows(TestObject::get())->count());
|
|
}
|
|
|
|
public function testCanViewIsRespected()
|
|
{
|
|
$orig = TestObject::$canView;
|
|
TestObject::$canView = false;
|
|
$this->assertEquals(0, $this->getTestableRows(TestObject::get())->count());
|
|
TestObject::$canView = $orig;
|
|
}
|
|
|
|
private function getTestableRows($list)
|
|
{
|
|
$button = new GridFieldPrintButton();
|
|
$button->setPrintColumns(['Name' => 'My Name']);
|
|
|
|
// Get paginated gridfield config
|
|
$config = GridFieldConfig::create()
|
|
->addComponent(new GridFieldPaginator(10))
|
|
->addComponent($button);
|
|
$gridField = new GridField('testfield', 'testfield', $list, $config);
|
|
new Form(Controller::curr(), 'Form', new FieldList($gridField), new FieldList());
|
|
|
|
// Printed data should ignore pagination limit
|
|
$printData = $button->generatePrintData($gridField);
|
|
return $printData->ItemRows;
|
|
}
|
|
|
|
public function testGeneratePrintData()
|
|
{
|
|
$names = [
|
|
'Bob',
|
|
'Alice',
|
|
'John',
|
|
'Jane',
|
|
'Sam',
|
|
];
|
|
|
|
$list = new ArrayList();
|
|
foreach ($names as $name) {
|
|
$list->add(new ArrayData(['Name' => $name]));
|
|
}
|
|
|
|
$rows = $this->getTestableRows($list);
|
|
|
|
$foundNames = [];
|
|
foreach ($rows as $row) {
|
|
foreach ($row->ItemRow as $column) {
|
|
$foundNames[] = $column->CellString;
|
|
}
|
|
}
|
|
|
|
$this->assertSame($names, $foundNames);
|
|
}
|
|
|
|
public function testGetPrintColumnsForGridFieldThrowsException()
|
|
{
|
|
$component = new GridFieldPrintButton();
|
|
$gridField = new GridField('dummy', 'dummy', new ArrayList());
|
|
$gridField->getConfig()->removeComponentsByType(GridFieldDataColumns::class);
|
|
$modelClass = ArrayData::class;
|
|
$gridField->setModelClass($modelClass);
|
|
|
|
$this->expectException(LogicException::class);
|
|
$this->expectExceptionMessage(
|
|
'Cannot dynamically determine columns. Add a GridFieldDataColumns component to your GridField'
|
|
. " or implement a summaryFields() method on $modelClass"
|
|
);
|
|
|
|
$reflectionMethod = new ReflectionMethod($component, 'getPrintColumnsForGridField');
|
|
$reflectionMethod->setAccessible(true);
|
|
$reflectionMethod->invoke($component, $gridField);
|
|
}
|
|
}
|