From 51ba787ffb395e6ec95cfef4389cca3285807f67 Mon Sep 17 00:00:00 2001 From: Maxime Rainville Date: Mon, 8 Oct 2018 13:53:44 +1300 Subject: [PATCH] Finish writting unit test for GridFieldLazyLoader. --- .../GridField/GridFieldLazyLoaderTest.php | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 tests/php/Forms/GridField/GridFieldLazyLoaderTest.php diff --git a/tests/php/Forms/GridField/GridFieldLazyLoaderTest.php b/tests/php/Forms/GridField/GridFieldLazyLoaderTest.php new file mode 100644 index 000000000..c88ebce18 --- /dev/null +++ b/tests/php/Forms/GridField/GridFieldLazyLoaderTest.php @@ -0,0 +1,153 @@ +list = DataList::create(Team::class); + $this->component = new GridFieldLazyLoader(); + $config = GridFieldConfig_RecordEditor::create()->addComponent($this->component); + $this->gridField = new GridField('testfield', 'testfield', $this->list, $config); + } + + public function testGetManipulatedDataWithoutHeader() + { + $gridFied = $this->getHeaderlessGridField(); + $this->assertCount( + 0, + $this->component->getManipulatedData($gridFied, $this->list)->toArray(), + 'GridFieldLazyLoader::getManipulatedData should return an empty list if the X-Pjax is unset' + ); + } + public function testGetManipulatedDataWithoutTabSet() + { + $gridFied = $this->getOutOfTabSetGridField(); + $this->assertSameSize( + $this->list, + $this->component->getManipulatedData($gridFied, $this->list)->toArray(), + 'GridFieldLazyLoader::getManipulatedData should return a proper list if gridifield is not in a tab' + ); + } + + public function testGetManipulatedDataNonLazy() + { + $gridFied = $this->getNonLazyGridField(); + $this->assertSameSize( + $this->list, + $this->component->getManipulatedData($gridFied, $this->list), + 'GridFieldLazyLoader::getManipulatedData should return a proper list if gridifield is in a tab with the pajax header' + ); + } + + public function testGetHTMLFragmentsWithoutHeader() + { + $gridFied = $this->getHeaderlessGridField(); + $actual = $this->component->getHTMLFragments($gridFied); + $this->assertEmpty($actual, 'getHTMLFragments should always return an array'); + $this->assertContains('grid-field-lazy-loadable', $gridFied->extraClass()); + $this->assertNotContains('grid-field-lazy-loaded', $gridFied->extraClass()); + } + + public function testGetHTMLFragmentsWithoutTabSet() + { + $gridFied = $this->getOutOfTabSetGridField(); + $actual = $this->component->getHTMLFragments($gridFied); + $this->assertEmpty($actual, 'getHTMLFragments should always return an array'); + $this->assertContains('grid-field-lazy-loaded', $gridFied->extraClass()); + $this->assertNotContains('grid-field-lazy-loadable', $gridFied->extraClass()); + } + + public function testGetHTMLFragmentsNonLazy() + { + $gridFied = $this->getNonLazyGridField(); + $actual = $this->component->getHTMLFragments($gridFied); + $this->assertEmpty($actual, 'getHTMLFragments should always return an array'); + $this->assertContains('grid-field-lazy-loaded', $gridFied->extraClass()); + $this->assertNotContains('grid-field-lazy-loadable', $gridFied->extraClass()); + } + + /** + * This GridField will be lazy because it doesn't have a `X-Pjax` header. + * @return GridField + */ + private function getHeaderlessGridField() { + $this->gridField->setRequest(new HTTPRequest('GET', 'admin/pages/edit/show/9999')); + $fieldList = FieldList::create(new TabSet("Root", new Tab("Main"))); + $fieldList->addFieldToTab('Root.GridField', $this->gridField); + Form::create(null, 'Form', $fieldList, FieldList::create()); + return $this->gridField; + } + + /** + * This GridField will not be lazy because it's in not in a tab set. + * @return GridField + */ + private function getOutOfTabSetGridField() + { + $r = new HTTPRequest('POST', 'admin/pages/edit/EditForm/9999/field/testfield'); + $r->addHeader('X-Pjax', 'CurrentField'); + $this->gridField->setRequest($r); + $fieldList = new FieldList($this->gridField); + Form::create(null, 'Form', $fieldList, FieldList::create()); + return $this->gridField; + } + + /** + * This gridfield will not be lazy, because it has `X-Pjax` header equal to `CurrentField` + * @return GridField + */ + private function getNonLazyGridField() + { + $r = new HTTPRequest('POST', 'admin/pages/edit/EditForm/9999/field/testfield'); + $r->addHeader('X-Pjax', 'CurrentField'); + $this->gridField->setRequest($r); + $fieldList = new FieldList(new TabSet("Root", new Tab("Main"))); + $fieldList->addFieldToTab('Root', $this->gridField); + Form::create(null, 'Form', $fieldList, FieldList::create()); + return $this->gridField; + } + +}