diff --git a/tests/security/GroupTest.php b/tests/security/GroupTest.php index 4eb8e9796..3018d9c58 100644 --- a/tests/security/GroupTest.php +++ b/tests/security/GroupTest.php @@ -3,7 +3,7 @@ * @package sapphire * @subpackage tests */ -class GroupTest extends SapphireTest { +class GroupTest extends FunctionalTest { static $fixture_file = 'sapphire/tests/security/GroupTest.yml'; /** @@ -25,4 +25,90 @@ class GroupTest extends SapphireTest { $this->assertEquals($mapOutput[$group1->ID], $group1->Title); $this->assertEquals($mapOutput[$group2->ID], $group2->Title); } -} \ No newline at end of file + + function testMemberGroupRelationForm() { + $adminGroup = $this->fixture->objFromFixture('Group', 'admingroup'); + $parentGroup = $this->fixture->objFromFixture('Group', 'parentgroup'); + $childGroup = $this->fixture->objFromFixture('Group', 'childgroup'); + + // Test single group relation through checkboxsetfield + $form = new GroupTest_MemberForm($this, 'Form'); + $member = $this->fixture->objFromFixture('GroupTest_Member', 'admin'); + $form->loadDataFrom($member); + $checkboxSetField = $form->Fields()->fieldByName('Groups'); + $checkboxSetField->setValue(array( + $adminGroup->ID => $adminGroup->ID, // keep existing relation + $parentGroup->ID => $parentGroup->ID, // add new relation + )); + $form->saveInto($member); + $updatedGroups = $member->Groups(); + $controlGroups = new Member_GroupSet( + $adminGroup, + $parentGroup + ); + $this->assertEquals( + $updatedGroups->Map('ID','ID'), + $controlGroups->Map('ID','ID'), + "Adding a toplevel group works" + ); + + // Test unsetting relationship + $form->loadDataFrom($member); + $checkboxSetField = $form->Fields()->fieldByName('Groups'); + $checkboxSetField->setValue(array( + $adminGroup->ID => $adminGroup->ID, // keep existing relation + //$parentGroup->ID => $parentGroup->ID, // remove previously set relation + )); + $form->saveInto($member); + $member->flushCache(); + $updatedGroups = $member->Groups(); + $controlGroups = new Member_GroupSet( + $adminGroup + ); + $this->assertEquals( + $updatedGroups->Map('ID','ID'), + $controlGroups->Map('ID','ID'), + "Removing a previously added toplevel group works" + ); + + // Test adding child group + + } +} + +class GroupTest_Member extends Member implements TestOnly { + + function getCMSFields() { + $groups = DataObject::get('Group'); + $groupsMap = ($groups) ? $groups->toDropDownMap() : false; + $fields = new FieldSet( + new HiddenField('ID', 'ID'), + new CheckboxSetField( + 'Groups', + 'Groups', + $groupsMap + ) + ); + + return $fields; + } + +} + +class GroupTest_MemberForm extends Form { + + function __construct($controller, $name) { + $fields = singleton('GroupTest_Member')->getCMSFields(); + $actions = new FieldSet( + new FormAction('doSave','save') + ); + + parent::__construct($controller, $name, $fields, $actions); + } + + function doSave($data, $form) { + // done in testing methods + } + +} +?> \ No newline at end of file diff --git a/tests/security/GroupTest.yml b/tests/security/GroupTest.yml index 9fa04d760..1c9a620bf 100644 --- a/tests/security/GroupTest.yml +++ b/tests/security/GroupTest.yml @@ -1,5 +1,25 @@ Group: - group1: - Title: Group 1 - group2: - Title: Group 2 \ No newline at end of file + admingroup: + Code: admingroup + parentgroup: + Code: parentgroup + childgroup: + Code: childgroup + Parent: =>Group.parentgroup + group1: + Title: Group 1 + group2: + Title: Group 2 +GroupTest_Member: + admin: + FirstName: Admin + Groups: =>Group.admingroup + parentgroupuser: + FirstName: Parent Group User + Groups: =>Group.parentgroup + childgroupuser: + FirstName: Child Group User + Groups: =>Group.childgroup + allgroupuser: + FirstName: All Group User + Groups: =>Group.admingroup,=>Group.parentgroup,=>Group.childgroup \ No newline at end of file