public function testFieldWithDisabledItems() { $articleWithTags = $this->objFromFixture('ListboxFieldTest_Article', 'articlewithtags'); $tag1 = $this->objFromFixture('ListboxFieldTest_Tag', 'tag1'); $tag2 = $this->objFromFixture('ListboxFieldTest_Tag', 'tag2'); $tag3 = $this->objFromFixture('ListboxFieldTest_Tag', 'tag3'); $field = new ListboxField("Tags", "Test field", DataObject::get("ListboxFieldTest_Tag")->map()->toArray()); $field->setValue(null, $articleWithTags); $field->setDisabledItems(array($tag1->ID, $tag3->ID)); $p = new CSSContentParser($field->Field()); $tag1xml = $p->getByXpath('//option[@value=' . $tag1->ID . ']'); $tag2xml = $p->getByXpath('//option[@value=' . $tag2->ID . ']'); $tag3xml = $p->getByXpath('//option[@value=' . $tag3->ID . ']'); $this->assertEquals('selected', (string) $tag1xml[0]['selected']); $this->assertEquals('disabled', (string) $tag1xml[0]['disabled']); $this->assertEquals('selected', (string) $tag2xml[0]['selected']); $this->assertNull($tag2xml[0]['disabled']); $this->assertNull($tag3xml[0]['selected']); $this->assertEquals('disabled', (string) $tag3xml[0]['disabled']); }
public function testResizedImageInsertion() { $obj = new HTMLEditorFieldTest_Object(); $editor = new HTMLEditorField('Content'); $fileID = $this->idFromFixture('SilverStripe\\Assets\\Image', 'example_image'); $editor->setValue(sprintf('[image src="assets/HTMLEditorFieldTest_example.jpg" width="10" height="20" id="%d"]', $fileID)); $editor->saveInto($obj); $parser = new CSSContentParser($obj->dbObject('Content')->forTemplate()); $xml = $parser->getByXpath('//img'); $this->assertEquals('HTMLEditorFieldTest example', (string) $xml[0]['alt'], 'Alt tags are added by default based on filename'); $this->assertEquals('', (string) $xml[0]['title'], 'Title tags are added by default.'); $this->assertEquals(10, (int) $xml[0]['width'], 'Width tag of resized image is set.'); $this->assertEquals(20, (int) $xml[0]['height'], 'Height tag of resized image is set.'); $neededFilename = '/assets/HTMLEditorFieldTest/f5c7c2f814/HTMLEditorFieldTest-example__ResizedImageWyIxMCIsIjIwIl0.jpg'; $this->assertEquals($neededFilename, (string) $xml[0]['src'], 'Correct URL of resized image is set.'); $this->assertTrue(file_exists(BASE_PATH . DIRECTORY_SEPARATOR . $neededFilename), 'File for resized image exists'); $this->assertEquals(false, $obj->HasBrokenFile, 'Referenced image file exists.'); }
/** * Get the HTML class attribute from a node in the sitetree * * @param $html * @param $node * @return string */ protected function getNodeClassFromTree($html, $node) { $parser = new CSSContentParser($html); $xpath = '//ul/li[@id="' . $node->ID . '"]'; $object = $parser->getByXpath($xpath); foreach ($object[0]->attributes() as $key => $attr) { if ($key == 'class') { return (string) $attr; } } return ''; }
public function testNestedEditForm() { $this->logInWithPermission('ADMIN'); $group = $this->objFromFixture('GridFieldDetailFormTest_PeopleGroup', 'group'); $person = $group->People()->First(); $category = $person->Categories()->First(); // Get first form (GridField managing PeopleGroup) $response = $this->get('GridFieldDetailFormTest_GroupController'); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $groupEditLink = $parser->getByXpath('//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "' . $group->ID . '")]//a'); $this->assertEquals('GridFieldDetailFormTest_GroupController/Form/field/testfield/item/' . $group->ID . '/edit', (string) $groupEditLink[0]['href']); // Get second level form (GridField managing Person) $response = $this->get((string) $groupEditLink[0]['href']); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $personEditLink = $parser->getByXpath('//fieldset[@id="Form_ItemEditForm_People"]' . '//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "' . $person->ID . '")]//a'); $this->assertEquals(sprintf('GridFieldDetailFormTest_GroupController/Form/field/testfield/item/%d/ItemEditForm/field/People' . '/item/%d/edit', $group->ID, $person->ID), (string) $personEditLink[0]['href']); // Get third level form (GridField managing Category) $response = $this->get((string) $personEditLink[0]['href']); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $categoryEditLink = $parser->getByXpath('//fieldset[@id="Form_ItemEditForm_Categories"]' . '//tr[contains(@class, "ss-gridfield-item") and contains(@data-id, "' . $category->ID . '")]//a'); $this->assertEquals(sprintf('GridFieldDetailFormTest_GroupController/Form/field/testfield/item/%d/ItemEditForm/field/People' . '/item/%d/ItemEditForm/field/Categories/item/%d/edit', $group->ID, $person->ID, $category->ID), (string) $categoryEditLink[0]['href']); // Fourth level form would be a Category detail view }