list = new DataList(Team::class); $config = GridFieldConfig_RecordEditor::create()->addComponent(new GridFieldFilterHeader()); $this->gridField = new GridField('testfield', 'testfield', $this->list, $config); $this->form = new Form(null, 'Form', new FieldList([$this->gridField]), new FieldList()); $this->component = $this->gridField->getConfig()->getComponentByType(GridFieldFilterHeader::class); } /** * Tests that the appropriate filter headers are generated * * @skipUpgrade */ public function testRenderHeaders() { $htmlFragment = $this->component->getHTMLFragments($this->gridField); // Check that the output is the new search field $this->assertStringContainsString('
assertStringContainsString('Open search and filter', $htmlFragment['buttons-before-right']); $this->gridField->getConfig()->removeComponentsByType(GridFieldFilterHeader::class); $this->gridField->getConfig()->addComponent(new GridFieldFilterHeader(true)); $this->component = $this->gridField->getConfig()->getComponentByType(GridFieldFilterHeader::class); $htmlFragment = $this->component->getHTMLFragments($this->gridField); // Check that the output is the legacy filter header $this->assertStringContainsString( '', $htmlFragment['header'] ); $this->assertFalse(array_key_exists('buttons-before-right', $htmlFragment)); } public function testSearchFieldSchema() { $searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField)); $this->assertEquals('field/testfield/schema/SearchForm', $searchSchema->formSchemaUrl); $this->assertEquals('Name', $searchSchema->name); $this->assertEquals('Search "Teams"', $searchSchema->placeholder); $this->assertEquals(new \stdClass, $searchSchema->filters); $request = new HTTPRequest( 'POST', 'field/testfield', [], [ 'filter' => [ 'testfield' => [ 'Name' => 'test', 'City' => 'place' ] ], ] ); $this->gridField->setRequest($request); $searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField)); $this->assertEquals('field/testfield/schema/SearchForm', $searchSchema->formSchemaUrl); $this->assertEquals('Name', $searchSchema->name); $this->assertEquals('Search "Teams"', $searchSchema->placeholder); $this->assertEquals('test', $searchSchema->filters->Search__Name); $this->assertEquals('place', $searchSchema->filters->Search__City); $this->assertEquals('testfield', $searchSchema->gridfield); } public function testHandleActionReset() { // Init Grid state with some pre-existing filters $state = $this->gridField->State; $state->GridFieldFilterHeader = []; $state->GridFieldFilterHeader->Columns = []; $state->GridFieldFilterHeader->Columns->Name = 'test'; $this->component->handleAction( $this->gridField, 'reset', [], '{"GridFieldFilterHeader":{"Columns":{"Name":"test"}}}' ); $this->assertEmpty( $state->GridFieldFilterHeader->Columns->toArray(), 'GridFieldFilterHeader::handleAction resets the gridstate filter when the user resets the search.' ); } }