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); } }