Skip to content

Commit

Permalink
MINOR Testing nested detail forms in GridField
Browse files Browse the repository at this point in the history
  • Loading branch information
chillu committed Mar 8, 2012
1 parent 66f2244 commit e5f0233
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 2 deletions.
105 changes: 103 additions & 2 deletions tests/forms/gridfield/GridFieldPopupFormsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ class GridFieldPopupFormsTest extends FunctionalTest {

protected $extraDataObjects = array(
'GridFieldPopupFormsTest_Person',
'GridFieldPopupFormsTest_PeopleGroup'
'GridFieldPopupFormsTest_PeopleGroup',
'GridFieldPopupFormsTest_Category',
);


Expand Down Expand Up @@ -82,6 +83,47 @@ function testEditForm() {
$firstperson = $group->People()->First();
$this->assertEquals($firstperson->Surname, 'Baggins');
}

function testNestedEditForm() {
$this->logInWithPermission('ADMIN');

$group = $this->objFromFixture('GridFieldPopupFormsTest_PeopleGroup', 'group');
$person = $group->People()->First();
$category = $person->Categories()->First();

// Get first form (GridField managing PeopleGroup)
$response = $this->get('GridFieldPopupFormsTest_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(
'GridFieldPopupFormsTest_GroupController/Form/field/testfield/item/1/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(
'GridFieldPopupFormsTest_GroupController/Form/field/testfield/item/1/ItemEditForm/field/People/item/1/edit',
(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');

// Get fourth level form (Category detail view)
$this->assertEquals(
'GridFieldPopupFormsTest_GroupController/Form/field/testfield/item/1/ItemEditForm/field/People/item/1/ItemEditForm/field/Categories/item/1/edit',
(string)$categoryEditLink[0]['href']
);
}
}

class GridFieldPopupFormsTest_Person extends DataObject implements TestOnly {
Expand All @@ -93,6 +135,22 @@ class GridFieldPopupFormsTest_Person extends DataObject implements TestOnly {
static $has_one = array(
'Group' => 'GridFieldPopupFormsTest_PeopleGroup'
);

static $many_many = array(
'Categories' => 'GridFieldPopupFormsTest_Category'
);

function getCMSFields() {
$fields = parent::getCMSFields();
// TODO No longer necessary once FormScaffolder uses GridField
$fields->replaceField('Categories',
Object::create('GridField', 'Categories', 'Categories',
$this->Categories(),
GridFieldConfig_RelationEditor::create()
)
);
return $fields;
}
}

class GridFieldPopupFormsTest_PeopleGroup extends DataObject implements TestOnly {
Expand All @@ -103,6 +161,40 @@ class GridFieldPopupFormsTest_PeopleGroup extends DataObject implements TestOnly
static $has_many = array(
'People' => 'GridFieldPopupFormsTest_Person'
);

function getCMSFields() {
$fields = parent::getCMSFields();
// TODO No longer necessary once FormScaffolder uses GridField
$fields->replaceField('People',
Object::create('GridField', 'People', 'People',
$this->People(),
GridFieldConfig_RelationEditor::create()
)
);
return $fields;
}
}

class GridFieldPopupFormsTest_Category extends DataObject implements TestOnly {
static $db = array(
'Name' => 'Varchar'
);

static $belongs_many_many = array(
'People' => 'GridFieldPopupFormsTest_Person'
);

function getCMSFields() {
$fields = parent::getCMSFields();
// TODO No longer necessary once FormScaffolder uses GridField
$fields->replaceField('People',
Object::create('GridField', 'People', 'People',
$this->People(),
GridFieldConfig_RelationEditor::create()
)
);
return $fields;
}
}

class GridFieldPopupFormsTest_Controller extends Controller implements TestOnly {
Expand All @@ -120,4 +212,13 @@ function Form() {
}
}

?>
class GridFieldPopupFormsTest_GroupController extends Controller implements TestOnly {
protected $template = 'BlankPage';

function Form() {
$field = new GridField('testfield', 'testfield', DataList::create('GridFieldPopupFormsTest_PeopleGroup'));
$field->getConfig()->addComponent($gridFieldForm = new GridFieldPopupForms($this, 'Form'));
$field->getConfig()->addComponent(new GridFieldEditAction());
return new Form($this, 'Form', new FieldList($field), new FieldList());
}
}
5 changes: 5 additions & 0 deletions tests/forms/gridfield/GridFieldPopupFormsTest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ GridFieldPopupFormsTest_PeopleGroup:
group:
Name: My Group
People: =>GridFieldPopupFormsTest_Person.joe,=>GridFieldPopupFormsTest_Person.jane

GridFieldPopupFormsTest_Category:
category1:
Name: Category 1
People: =>GridFieldPopupFormsTest_Person.joe,=>GridFieldPopupFormsTest_Person.jane

0 comments on commit e5f0233

Please sign in to comment.