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 @@
+