'val1', 'namespace' => array( 'key2' => 'val2', 'key3' => array( 'key4' => 'val4', ) ), 'othernamespace' => array( 'key5' => array( 'key6' =>array( 'key7' => 'val7' ) ) ) ); $form->loadDataFrom($requestData); $fields = $form->Fields(); $this->assertEquals($fields->fieldByName('key1')->Value(), 'val1'); $this->assertEquals($fields->fieldByName('namespace[key2]')->Value(), 'val2'); $this->assertEquals($fields->fieldByName('namespace[key3][key4]')->Value(), 'val4'); $this->assertEquals($fields->fieldByName('othernamespace[key5][key6][key7]')->Value(), 'val7'); } public function testLoadDataFromUnchangedHandling() { $form = new Form( new Controller(), 'Form', new FieldSet( new TextField('key1'), new TextField('key2') ), new FieldSet() ); $form->loadDataFrom(array( 'key1' => 'save', 'key2' => 'dontsave', 'key2_unchanged' => '1' )); $this->assertEquals( $form->getData(), array( 'key1' => 'save', 'key2' => null, ), 'loadDataFrom() doesnt save a field if a matching "_unchanged" flag is set' ); } public function testLoadDataFromObject() { $form = new Form( new Controller(), 'Form', new FieldSet( new HeaderField('My Player'), new TextField('Name'), // appears in both Player and Team new TextareaField('Biography'), new DateField('Birthday'), new NumericField('BirthdayYear') // dynamic property ), new FieldSet() ); $captainWithDetails = $this->objFromFixture('FormTest_Player', 'captainWithDetails'); $form->loadDataFrom($captainWithDetails); $this->assertEquals( $form->getData(), array( 'Name' => 'Captain Details', 'Biography' => 'Bio 1', 'Birthday' => '1982-01-01', 'BirthdayYear' => '1982', ), 'LoadDataFrom() loads simple fields and dynamic getters' ); $captainNoDetails = $this->objFromFixture('FormTest_Player', 'captainNoDetails'); $form->loadDataFrom($captainNoDetails); $this->assertEquals( $form->getData(), array( 'Name' => 'Captain No Details', 'Biography' => null, 'Birthday' => null, 'BirthdayYear' => 0, ), 'LoadNonBlankDataFrom() loads only fields with values, and doesnt overwrite existing values' ); } public function testLoadDataFromClearMissingFields() { $form = new Form( new Controller(), 'Form', new FieldSet( new HeaderField('My Player'), new TextField('Name'), // appears in both Player and Team new TextareaField('Biography'), new DateField('Birthday'), new NumericField('BirthdayYear'), // dynamic property $unrelatedField = new TextField('UnrelatedFormField') //new CheckboxSetField('Teams') // relation editing ), new FieldSet() ); $unrelatedField->setValue("random value"); $captainWithDetails = $this->objFromFixture('FormTest_Player', 'captainWithDetails'); $captainNoDetails = $this->objFromFixture('FormTest_Player', 'captainNoDetails'); $form->loadDataFrom($captainWithDetails); $this->assertEquals( $form->getData(), array( 'Name' => 'Captain Details', 'Biography' => 'Bio 1', 'Birthday' => '1982-01-01', 'BirthdayYear' => '1982', 'UnrelatedFormField' => 'random value', ), 'LoadDataFrom() doesnt overwrite fields not found in the object' ); $captainWithDetails = $this->objFromFixture('FormTest_Player', 'captainNoDetails'); $team2 = $this->objFromFixture('FormTest_Team', 'team2'); $form->loadDataFrom($captainWithDetails); $form->loadDataFrom($team2, true); $this->assertEquals( $form->getData(), array( 'Name' => 'Team 2', 'Biography' => '', 'Birthday' => '', 'BirthdayYear' => 0, 'UnrelatedFormField' => null, ), 'LoadDataFrom() overwrites fields not found in the object with $clearMissingFields=true' ); } public function testFormMethodOverride() { $form = $this->getStubForm(); $form->setFormMethod('GET'); $this->assertNull($form->dataFieldByName('_method')); $form = $this->getStubForm(); $form->setFormMethod('PUT'); $this->assertEquals($form->dataFieldByName('_method')->Value(), 'put', 'PUT override in forms has PUT in hiddenfield' ); $this->assertEquals($form->FormMethod(), 'post', 'PUT override in forms has POST in
tag' ); $form = $this->getStubForm(); $form->setFormMethod('DELETE'); $this->assertEquals($form->dataFieldByName('_method')->Value(), 'delete', 'PUT override in forms has PUT in hiddenfield' ); $this->assertEquals($form->FormMethod(), 'post', 'PUT override in forms has POST in tag' ); } protected function getStubForm() { return new Form( new Controller(), 'Form', new FieldSet(new TextField('key1')), new FieldSet() ); } } class FormTest_Player extends DataObject implements TestOnly { static $db = array( 'Name' => 'Varchar', 'Biography' => 'Text', 'Birthday' => 'Date' ); static $belongs_many_many = array( 'Teams' => 'FormTest_Team' ); static $has_one = array( 'FavouriteTeam' => 'FormTest_Team', ); public function getBirthdayYear() { return ($this->Birthday) ? date('Y', strtotime($this->Birthday)) : null; } } class FormTest_Team extends DataObject implements TestOnly { static $db = array( 'Name' => 'Varchar', 'Region' => 'Varchar', ); static $many_many = array( 'Players' => 'FormTest_Player' ); } ?>