diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f70f10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +vendor/ +resources/ +composer.lock + +assets/ diff --git a/tests/GridFieldEditableColumnsTest.php b/tests/GridFieldEditableColumnsTest.php new file mode 100644 index 0000000..7cb6af3 --- /dev/null +++ b/tests/GridFieldEditableColumnsTest.php @@ -0,0 +1,94 @@ +setModelClass(StubUnorderable::class); + $grid->setList(StubUnorderable::get()); + return $grid; + } + + private function getMockRecord($id, $title) + { + $record = new StubUnorderable(); + $record->ID = $id; + $record->Title = $title; + return $record; + } + + public function testProvidesEditableFieldsInColumns() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "foo"); + + $this->assertEquals( + [ 'Title' ], + $component->getColumnsHandled($grid) + ); + + $record->setCanEdit(true); + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>/', + $column->getValue() + ); + } + + public function testProvidesReadonlyColumnsForNoneditableRecords() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "testval"); + + $record->setCanEdit(false); + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>\s*testval\s*<\/span>/', + $column->getValue() + ); + } + + public function testProvidesReadonlyColumnsForReadonlyGrids() + { + $grid = $this->getMockGrid(); + $component = new GridFieldEditableColumns(); + $record = $this->getMockRecord(100, "testval"); + + $record->setCanEdit(true); + $grid = $grid->performReadonlyTransformation(); + + if (!$grid instanceof GridField) { + $this->markTestSkipped('silverstripe/framework <4.2.2 doesn\'t support readonly GridFields'); + } + + $column = $component->getColumnContent($grid, $record, 'Title'); + + $this->assertInstanceOf(DBHTMLText::class, $column); + $this->assertRegExp( + '/]*>\s*testval\s*<\/span>/', + $column->getValue() + ); + } +} diff --git a/tests/Stub/StubUnorderable.php b/tests/Stub/StubUnorderable.php index a1969ab..abed5ec 100644 --- a/tests/Stub/StubUnorderable.php +++ b/tests/Stub/StubUnorderable.php @@ -12,4 +12,16 @@ class StubUnorderable extends DataObject implements TestOnly ]; private static $table_name = 'StubUnorderable'; + + private $canEdit = false; + + public function setCanEdit($canEdit) + { + $this->canEdit = $canEdit; + } + + public function canEdit($member = null) + { + return $this->canEdit; + } } diff --git a/tests/Stub/TestController.php b/tests/Stub/TestController.php new file mode 100644 index 0000000..0e5baeb --- /dev/null +++ b/tests/Stub/TestController.php @@ -0,0 +1,10 @@ +