public function testGetBySelector() { $parser = new CSSContentParser(<<<HTML <html> \t<head> \t\t<title>test</title> \t</head> \t<body> \t\t<div id="A" class="one two three"> \t\t\t<p class="other">result</p> \t\t</div> \t\t<p>test</p> \t</body> </html> HTML ); $result = $parser->getBySelector('div.one'); $this->assertEquals("A", $result[0]['id'] . ''); $result = $parser->getBySelector('div.two'); $this->assertEquals("A", $result[0]['id'] . ''); $result = $parser->getBySelector('div.three'); $this->assertEquals("A", $result[0]['id'] . ''); $result = $parser->getBySelector('div#A p.other'); $this->assertEquals("result", $result[0] . ''); $result = $parser->getBySelector('#A .other'); $this->assertEquals("result", $result[0] . ''); }
function testSetDefaultItems() { $f = new CheckboxSetField( 'Test', false, array(0 => 'Zero', 1 => 'One', 2 => 'Two', 3 => 'Three') ); $f->setValue(array(0,1)); $f->setDefaultItems(array(2)); $p = new CSSContentParser($f->Field()); $item0 = $p->getBySelector('#Test_0'); $item1 = $p->getBySelector('#Test_1'); $item2 = $p->getBySelector('#Test_2'); $item3 = $p->getBySelector('#Test_3'); $this->assertEquals( (string)$item0[0]['checked'], 'checked', 'Selected through value' ); $this->assertEquals( (string)$item1[0]['checked'], 'checked', 'Selected through value' ); $this->assertEquals( (string)$item2[0]['checked'], 'checked', 'Selected through default items' ); $this->assertEquals( (string)$item3[0]['checked'], '', 'Not selected by either value or default items' ); }
public function testSetDisabledItems() { $f = new OptionsetField('Test', false, array(0 => 'Zero', 1 => 'One')); $f->setDisabledItems(array(0)); $p = new CSSContentParser($f->Field()); $item0 = $p->getBySelector('#Test_0'); $item1 = $p->getBySelector('#Test_1'); $this->assertEquals((string) $item0[0]['disabled'], 'disabled'); $this->assertEquals((string) $item1[0]['disabled'], ''); }
function testDateFormatCustomFormatAppearsInCustomInputInField() { $member = $this->objFromFixture('Member', 'noformatmember'); $member->setField('DateFormat', 'dd MM yy'); $field = $this->createDateFormatFieldForMember($member); $field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(), new FieldList())); // fake form $parser = new CSSContentParser($field->Field()); $xmlInputArr = $parser->getBySelector('.valCustom input'); $xmlPreview = $parser->getBySelector('.preview'); $this->assertEquals('checked', (string) $xmlInputArr[0]['checked']); $this->assertEquals('dd MM yy', (string) $xmlInputArr[1]['value']); }
public function testLegend() { $composite = new CompositeField(new TextField('A'), new TextField('B')); $composite->setTag('fieldset'); $composite->setLegend('My legend'); $parser = new CSSContentParser($composite->Field()); $root = $parser->getBySelector('fieldset.composite'); $legend = $parser->getBySelector('fieldset.composite legend'); $this->assertNotNull($legend); $this->assertEquals('My legend', (string) $legend[0]); }
function testThereIsNoPaginatorWhenOnlyOnePage() { // We set the itemsPerPage to an reasonably big number so as to avoid test broke from small changes on the fixture YML file $total = $this->list->count(); $this->gridField->getConfig()->getComponentByType("GridFieldPaginator")->setItemsPerPage($total); $fieldHolder = $this->gridField->FieldHolder(); $content = new CSSContentParser($fieldHolder); // Check that there is no paginator render into the footer $this->assertEquals(0, count($content->getBySelector('.datagrid-pagination'))); // Check that there is still 'View 1 - 4 of 4' part on the left of the paginator $this->assertEquals(1, count($content->getBySelector('.pagination-records-number'))); }
function testShowDropdownCustomTimeFormat() { $field = new TimeDropdownField('Time', 'Time'); $field->setConfig('showdropdown', true); $field->setConfig('timeformat', 'hh:mm a'); $html = $field->Field(); $parser = new CSSContentParser($html); $this->assertNotNull($parser->getBySelector('select')); $options = $parser->getBySelector('option'); $this->assertEquals('00:00:00', (string) $options[0]['value'], 'Correct data value'); $this->assertEquals('13:00:00', (string) $options[13]['value'], 'Correct data value'); $this->assertEquals('12:00 AM', (string) $options[0], 'Correct view value'); $this->assertEquals('01:00 PM', (string) $options[13], 'Correct view value'); }
function testGetSubmissionns() { $template = $this->field->getSubmissions(); $parser = new CSSContentParser($template); // check to ensure that the pagination exists $pagination = $parser->getBySelector('.userforms-submissions-pagination'); $this->assertEquals(str_replace("\n", ' ', (string) $pagination[0]->span), "Viewing rows 0 - 10 of 11 rows"); $this->assertEquals(str_replace("\n", ' ', (string) $pagination[0]->a), "Next page"); // ensure the actions exist $actions = $parser->getBySelector('.userforms-submission-actions'); $this->assertEquals(count($actions[0]->li), 2); // submissions $submissions = $parser->getBySelector('.userform-submission'); $this->assertEquals(count($submissions), 10); }
function testCorrectNumberOfRowsInTable() { $field = $this->manyManyForm->dataFieldByName('Players'); $parser = new CSSContentParser($field->FieldHolder()); $this->assertEquals(count($parser->getBySelector('tbody tr')), 2, 'There are 2 players (rows) in the table'); $this->assertEquals($field->Items()->Count(), 2, 'There are 2 CTF items in the DataObjectSet'); }
function testProcess() { $form = $this->setupFormFrontend(); $controller = new UserDefinedFormControllerTest_Controller($form); $this->autoFollowRedirection = false; $this->clearEmails(); // load the form $this->get($form->URLSegment); $response = $this->submitForm('Form_Form', null, array('basic-text-name' => 'Basic Value')); // should have a submitted form field now $submitted = DataObject::get('SubmittedFormField', "\"Name\" = 'basic-text-name'"); $this->assertDOSAllMatch(array('Name' => 'basic-text-name', 'Value' => 'Basic Value', 'Title' => 'Basic Text Field'), $submitted); // check emails $this->assertEmailSent('*****@*****.**', '*****@*****.**', 'Email Subject'); $email = $this->findEmail('*****@*****.**', '*****@*****.**', 'Email Subject'); // assert that the email has the field title and the value html email $parser = new CSSContentParser($email['content']); $title = $parser->getBySelector('strong'); $this->assertEquals('Basic Text Field', (string) $title[0], 'Email contains the field name'); $value = $parser->getBySelector('dd'); $this->assertEquals('Basic Value', (string) $value[0], 'Email contains the value'); // no html $this->assertEmailSent('*****@*****.**', '*****@*****.**', 'Email Subject'); $nohtml = $this->findEmail('*****@*****.**', '*****@*****.**', 'Email Subject'); $this->assertContains('Basic Text Field - Basic Value', $nohtml['content'], 'Email contains no html'); // no data $this->assertEmailSent('*****@*****.**', '*****@*****.**', 'Email Subject'); $nodata = $this->findEmail('*****@*****.**', '*****@*****.**', 'Email Subject'); $parser = new CSSContentParser($nodata['content']); $list = $parser->getBySelector('dl'); $this->assertFalse(isset($list[0]), 'Email contains no fields'); // check to see if the user was redirected (301) $this->assertEquals($response->getStatusCode(), 302); $this->assertStringEndsWith('finished', $response->getHeader('Location')); }
public function testShowDeleteButtonsWithAdminPermission() { $this->logInWithPermission('ADMIN'); $content = new CSSContentParser($this->gridField->FieldHolder()); $deleteButtons = $content->getBySelector('.gridfield-button-delete'); $this->assertEquals(3, count($deleteButtons), 'Delete buttons should show when logged in.'); }
public function testShowEditLinksWithAdminPermission() { $this->logInWithPermission('ADMIN'); $content = new CSSContentParser($this->gridField->FieldHolder()); $editLinks = $content->getBySelector('.edit-link'); $this->assertEquals(2, count($editLinks), 'Edit links should show when logged in.'); }
function testAdd() { $this->logInWithPermission('ADMIN'); $team1 = $this->objFromFixture('GridFieldTest_Team', 'team1'); $team2 = $this->objFromFixture('GridFieldTest_Team', 'team2'); $response = $this->get('GridFieldAddExistingAutocompleterTest_Controller'); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $items = $parser->getBySelector('.ss-gridfield .ss-gridfield-items .ss-gridfield-item'); $this->assertEquals(1, count($items)); $this->assertEquals($team1->ID, (int)$items[0]['data-id']); $btns = $parser->getBySelector('.ss-gridfield #action_gridfield_relationadd'); $response = $this->post( 'GridFieldAddExistingAutocompleterTest_Controller/Form/field/testfield', array( 'relationID' => $team2->ID, (string)$btns[0]['name'] => 1 ) ); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $items = $parser->getBySelector('.ss-gridfield .ss-gridfield-items .ss-gridfield-item'); $this->assertEquals(2, count($items)); $this->assertDOSEquals(array( array('ID' => (int)$items[0]['data-id']), array('ID' => (int)$items[1]['data-id']), ), new ArrayList(array($team1, $team2))); }
public function testTreeSearch() { $field = new TreeDropdownField('TestTree', 'Test tree', 'Folder'); // case insensitive search against keyword 'sub' for folders $request = new SS_HTTPRequest('GET', 'url', array('search' => 'sub')); $tree = $field->tree($request); $folder1 = $this->objFromFixture('Folder', 'folder1'); $folder1Subfolder1 = $this->objFromFixture('Folder', 'folder1-subfolder1'); $parser = new CSSContentParser($tree); $cssPath = 'ul.tree li#selector-TestTree-' . $folder1->ID . ' li#selector-TestTree-' . $folder1Subfolder1->ID . ' a span.item'; $firstResult = $parser->getBySelector($cssPath); $this->assertEquals((string) $firstResult[0], $folder1Subfolder1->Name, $folder1Subfolder1->Name . ' is found, nested under ' . $folder1->Name); $subfolder = $this->objFromFixture('Folder', 'subfolder'); $cssPath = 'ul.tree li#selector-TestTree-' . $subfolder->ID . ' a span.item'; $secondResult = $parser->getBySelector($cssPath); $this->assertEquals((string) $secondResult[0], $subfolder->Name, $subfolder->Name . ' is found at root level'); // other folders which don't contain the keyword 'sub' are not returned in search results $folder2 = $this->objFromFixture('Folder', 'folder2'); $cssPath = 'ul.tree li#selector-TestTree-' . $folder2->ID . ' a span.item'; $noResult = $parser->getBySelector($cssPath); $this->assertEquals($noResult, array(), $folder2 . ' is not found'); $field = new TreeDropdownField('TestTree', 'Test tree', 'File'); // case insensitive search against keyword 'sub' for files $request = new SS_HTTPRequest('GET', 'url', array('search' => 'sub')); $tree = $field->tree($request); $parser = new CSSContentParser($tree); // Even if we used File as the source object, folders are still returned because Folder is a File $cssPath = 'ul.tree li#selector-TestTree-' . $folder1->ID . ' li#selector-TestTree-' . $folder1Subfolder1->ID . ' a span.item'; $firstResult = $parser->getBySelector($cssPath); $this->assertEquals((string) $firstResult[0], $folder1Subfolder1->Name, $folder1Subfolder1->Name . ' is found, nested under ' . $folder1->Name); // Looking for two files with 'sub' in their name, both under the same folder $file1 = $this->objFromFixture('File', 'subfolderfile1'); $file2 = $this->objFromFixture('File', 'subfolderfile2'); $cssPath = 'ul.tree li#selector-TestTree-' . $subfolder->ID . ' li#selector-TestTree-' . $file1->ID . ' a'; $firstResult = $parser->getBySelector($cssPath); $this->assertGreaterThan(0, count($firstResult), $file1->Name . ' with ID ' . $file1->ID . ' is in search results'); $this->assertEquals((string) $firstResult[0], $file1->Name, $file1->Name . ' is found nested under ' . $subfolder->Name); $cssPath = 'ul.tree li#selector-TestTree-' . $subfolder->ID . ' li#selector-TestTree-' . $file2->ID . ' a'; $secondResult = $parser->getBySelector($cssPath); $this->assertGreaterThan(0, count($secondResult), $file2->Name . ' with ID ' . $file2->ID . ' is in search results'); $this->assertEquals((string) $secondResult[0], $file2->Name, $file2->Name . ' is found nested under ' . $subfolder->Name); // other files which don't include 'sub' are not returned in search results $file3 = $this->objFromFixture('File', 'asdf'); $cssPath = 'ul.tree li#selector-TestTree-' . $file3->ID; $noResult = $parser->getBySelector($cssPath); $this->assertEquals($noResult, array(), $file3->Name . ' is not found'); }
public function testExportLink() { $page = $this->objFromFixture('RegistryPageTestPage', 'contact-registrypage'); $response = $this->get($page->RelativeLink('RegistryFilterForm') . '?' . http_build_query(array('FirstName' => 'Alexander', 'Sort' => 'FirstName', 'Dir' => 'DESC', 'action_doRegistryFilter' => 'Filter'))); $parser = new CSSContentParser($response->getBody()); $anchor = $parser->getBySelector('a.export'); $this->assertContains('export?', (string) $anchor[0]['href']); $this->assertContains('FirstName=Alexander', (string) $anchor[0]['href']); $this->assertContains('Surname=', (string) $anchor[0]['href']); $this->assertContains('Sort=FirstName', (string) $anchor[0]['href']); $this->assertContains('Dir=DESC', (string) $anchor[0]['href']); $this->assertContains('action_doRegistryFilter=Filter', (string) $anchor[0]['href']); }
function testLegacyItemsFieldHolderWithTitle() { $items = array('one//one title' => new LiteralField('one', 'one view'), 'two//two title' => new LiteralField('two', 'two view')); $field = new SelectionGroup('MyGroup', $items); $parser = new CSSContentParser($field->FieldHolder()); $listEls = $parser->getBySelector('li'); $listElOne = $listEls[0]; $listElTwo = $listEls[1]; $this->assertEquals('one', (string) $listElOne->input[0]['value']); $this->assertEquals('two', (string) $listElTwo->input[0]['value']); $this->assertEquals('one title', (string) $listElOne->label[0]); $this->assertEquals('two title', (string) $listElTwo->label[0]); }
function testEmailWriter() { $testEmailWriter = new SS_LogEmailWriter('*****@*****.**'); SS_Log::add_writer($testEmailWriter, SS_Log::ERR); SS_Log::log('Email test', SS_LOG::ERR, array('my-string' => 'test', 'my-array' => array('one' => 1))); $this->assertEmailSent('*****@*****.**'); $email = $this->findEmail('*****@*****.**'); $parser = new CSSContentParser($email['htmlContent']); $extras = $parser->getBySelector('table.extras'); $extraRows = $extras[0]->tr; $this->assertContains('my-string', $extraRows[count($extraRows) - 2]->td[0]->asXML(), 'Contains extra data key'); $this->assertContains('test', $extraRows[count($extraRows) - 2]->td[1]->asXML(), 'Contains extra data value'); $this->assertContains('my-array', $extraRows[count($extraRows) - 1]->td[0]->asXML(), 'Contains extra data key'); $this->assertContains("array('one'=>1,)", str_replace(array("\r", "\n", " "), '', $extraRows[count($extraRows) - 1]->td[1]->asXML()), 'Serializes arrays correctly'); }
public function testGoballyEffected() { Session::clear('GridField.PaginatorWithShowAll.Mode'); $this->gridField1->State->GridFieldShowAll->showAllMode = true; $this->gridField1->FieldHolder(); $fieldHolder21 = $this->gridField2->FieldHolder(); $content21 = new CSSContentParser($fieldHolder21); $this->assertEquals(6, count($content21->getBySelector('tr.ss-gridfield-item'))); $this->gridField1->State->GridFieldShowAll->showAllMode = false; $this->gridField1->FieldHolder(); $this->gridField2->getConfig()->getComponentByType('GridFieldPaginatorWithShowAll')->setItemsPerPage(2); $fieldHolder22 = $this->gridField2->FieldHolder(); $content22 = new CSSContentParser($fieldHolder22); $this->assertEquals(2, count($content22->getBySelector('tr.ss-gridfield-item'))); Session::clear('GridField.PaginatorWithShowAll.Mode'); }
function testEditForm() { $this->logInWithPermission('ADMIN'); $group = GridFieldDetailFormTest_PeopleGroup::get()->filter('Name', 'My Group')->sort('Name')->First(); $firstperson = $group->People()->First(); $this->assertTrue($firstperson->Surname != 'Baggins'); $response = $this->get('GridFieldDetailFormTest_Controller'); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $editlinkitem = $parser->getBySelector('.ss-gridfield-items .first .edit-link'); $editlink = (string) $editlinkitem[0]['href']; $response = $this->get($editlink); $this->assertFalse($response->isError()); $parser = new CSSContentParser($response->getBody()); $editform = $parser->getBySelector('#Form_ItemEditForm'); $editformurl = (string) $editform[0]['action']; $response = $this->post($editformurl, array('FirstName' => 'Bilbo', 'Surname' => 'Baggins', 'action_doSave' => 1)); $this->assertFalse($response->isError()); $group = GridFieldDetailFormTest_PeopleGroup::get()->filter('Name', 'My Group')->sort('Name')->First(); $this->assertDOSContains(array(array('Surname' => 'Baggins')), $group->People()); }
public function testFieldRenderingMultipleOn() { $choices = array('a' => 'a value', 'b' => 'b value', 'c' => 'c value'); $field = new ListboxField('Choices', 'Choices', $choices); $field->multiple = true; $field->setValue('a,c'); $parser = new CSSContentParser($field->Field()); $optEls = $parser->getBySelector('option'); $this->assertEquals(3, count($optEls)); $this->assertEquals('selected', (string) $optEls[0]['selected']); $this->assertEquals('', (string) $optEls[1]['selected']); $this->assertEquals('selected', (string) $optEls[2]['selected']); }
function testFieldMessageEscapeHtml() { $form = $this->getStubForm(); $form->Controller()->handleRequest(new SS_HTTPRequest('GET', '/'), DataModel::inst()); // stub out request $form->addErrorMessage('key1', '<em>Escaped HTML</em>', 'good', true); $form->setupFormErrors(); $parser = new CSSContentParser($result = $form->forTemplate()); $messageEls = $parser->getBySelector('#Form_Form_key1_Holder .message'); $this->assertContains('<em>Escaped HTML</em>', $messageEls[0]->asXML()); $form = $this->getStubForm(); $form->Controller()->handleRequest(new SS_HTTPRequest('GET', '/'), DataModel::inst()); // stub out request $form->addErrorMessage('key1', '<em>Unescaped HTML</em>', 'good', false); $form->setupFormErrors(); $parser = new CSSContentParser($form->forTemplate()); $messageEls = $parser->getBySelector('#Form_Form_key1_Holder .message'); $this->assertContains('<em>Unescaped HTML</em>', $messageEls[0]->asXML()); }
/** * @covers GridField::FieldHolder */ public function testCanViewOnlyOddIDs() { $this->logInWithPermission(); $list = new ArrayList(array(new GridFieldTest_Permissions(array("ID" => 1, "Email" => "*****@*****.**", 'Name' => 'Ongi Schwimmer')), new GridFieldTest_Permissions(array("ID" => 2, "Email" => "*****@*****.**", 'Name' => 'Klaus Lozenge')), new GridFieldTest_Permissions(array("ID" => 3, "Email" => "*****@*****.**", 'Name' => 'Otto Fischer')))); $config = new GridFieldConfig(); $config->addComponent(new GridFieldDataColumns()); $obj = new GridField('testfield', 'testfield', $list, $config); $form = new Form(new Controller(), 'mockform', new FieldList(array($obj)), new FieldList()); $content = new CSSContentParser($obj->FieldHolder()); $members = $content->getBySelector('.ss-gridfield-item tr'); $this->assertEquals(2, count($members)); $this->assertEquals((string) $members[0]->td[0], 'Ongi Schwimmer', 'First object Name should be Ongi Schwimmer'); $this->assertEquals((string) $members[0]->td[1], '*****@*****.**', 'First object Email should be ongi.schwimmer@example.org'); $this->assertEquals((string) $members[1]->td[0], 'Otto Fischer', 'Second object Name should be Otto Fischer'); $this->assertEquals((string) $members[1]->td[1], '*****@*****.**', 'Second object Email should be otto.fischer@example.org'); }
/** * Find all the <OPTION> elements from a * string of HTML. * * @param string $html HTML to scan for elements * @return SimpleXMLElement */ public function findOptionElements($html) { $parser = new CSSContentParser($html); return $parser->getBySelector('option'); }
public function testBreadcrumbs() { $page3 = $this->objFromFixture('Page', 'page3'); $page31 = $this->objFromFixture('Page', 'page31'); $adminuser = $this->objFromFixture('Member', 'admin'); $this->session()->inst_set('loggedInAs', $adminuser->ID); $response = $this->get('admin/pages/edit/show/' . $page31->ID); $parser = new CSSContentParser($response->getBody()); $crumbs = $parser->getBySelector('.breadcrumbs-wrapper .crumb'); $this->assertNotNull($crumbs); $this->assertEquals(3, count($crumbs)); $this->assertEquals('Page 3', (string) $crumbs[1]); $this->assertEquals('Page 3.1', (string) $crumbs[2]); $this->session()->inst_set('loggedInAs', null); }
/** * Test control output html */ public function testView() { $this->loginWithPermission('ADMIN'); $record = $this->objFromFixture('AssetFieldTest_Object', 'object1'); // Requesting form is not an error $response = $this->get('AssetFieldTest_Controller'); $this->assertFalse($response->isError()); // File exists in this response $parser = new CSSContentParser($response->getBody()); $tuple = array(); $result = $parser->getBySelector("#AssetFieldTest_Form_Form_File_Holder .ss-uploadfield-files .ss-uploadfield-item input[type='hidden']"); foreach ($result as $part) { $name = (string) $part['name']; $value = (string) $part['value']; switch ($name) { case 'File[Filename]': $tuple['Filename'] = $value; break; case 'File[Hash]': $tuple['Hash'] = $value; break; case 'File[Variant]': $tuple['Variant'] = $value; break; } } // Assert this value is correct $expected = array('Filename' => 'MyFiles/subfolder1/file-subfolder.txt', 'Hash' => '55b443b60176235ef09801153cca4e6da7494a0c', 'Variant' => ''); $this->assertEquals($expected, $record->File->getValue()); $this->assertEquals($expected, $tuple); }
public function testSelect() { $this->loginWithPermission('ADMIN'); $record = $this->objFromFixture('UploadFieldTest_Record', 'record1'); $file4 = $this->objFromFixture('File', 'file4'); $file5 = $this->objFromFixture('File', 'file5'); $fileSubfolder = $this->objFromFixture('File', 'file-subfolder'); $fileNoEdit = $this->objFromFixture('File', 'file-noedit'); $response = $this->get('UploadFieldTest_Controller/Form/field/ManyManyFiles/select/'); $this->assertFalse($response->isError()); // A bit too much coupling with GridField, but a full template overload would make things too complex $parser = new CSSContentParser($response->getBody()); $items = $parser->getBySelector('.ss-gridfield-item'); $itemIDs = array_map(create_function('$el', 'return (int)$el["data-id"];'), $items); $this->assertContains($file4->ID, $itemIDs, 'Contains file in assigned folder'); $this->assertNotContains($fileSubfolder->ID, $itemIDs, 'Does not contain file in subfolder'); }
public function testMarkupTemplate() { $page = DataObject::get_one('Page', "\"URLSegment\" = 'page1'"); $this->assertInstanceOf('Page', $page); $markup = $page->Gallerist(); $this->assertTrue((bool)$markup); $cssParser = new CSSContentParser($markup); $this->assertTrue((bool)$cssParser->getBySelector('#Gallerist')); $this->assertEquals(3, count($cssParser->getBySelector('#Gallerist .GalleristPageItem'))); }
/** * Tests that a has-many detail form is pre-populated with the parent ID. */ public function testHasManyFormPrePopulated() { $group = $this->objFromFixture('GridFieldDetailFormTest_PeopleGroup', 'group'); $this->logInWithPermission('ADMIN'); $response = $this->get('GridFieldDetailFormTest_Controller'); $parser = new CSSContentParser($response->getBody()); $addLink = $parser->getBySelector('.ss-gridfield .new-link'); $addLink = (string) $addLink[0]['href']; $response = $this->get($addLink); $parser = new CSSContentParser($response->getBody()); $title = $parser->getBySelector('#Form_ItemEditForm_GroupID_Holder span'); $id = $parser->getBySelector('#Form_ItemEditForm_GroupID_Holder input'); $this->assertEquals($group->Name, (string) $title[0]); $this->assertEquals($group->ID, (string) $id[0]['value']); }