silverstripe-framework/admin/tests/CMSFormTest.php
Loz Calver 3172c7732e Allow setting of specific form actions that do not require validation
Move validation exemptions into CMSForm

Also fix buttonClicked() to skip CompositeField

Whitespace

Adding unit tests
2013-10-04 10:30:20 +01:00

127 lines
3.1 KiB
PHP

<?php
/**
* @package framework
* @subpackage tests
*/
class CMSFormTest extends FunctionalTest {
public function testValidationExemptActions() {
$response = $this->get('CMSFormTest_Controller');
$response = $this->submitForm(
'Form_Form',
'action_doSubmit',
array(
'Email' => 'test@test.com'
)
);
// Firstly, assert that required fields still work when not using an exempt action
$this->assertPartialMatchBySelector(
'#SomeRequiredField span.required',
array(
'"Some Required Field" is required'
),
'Required fields show a notification on field when left blank'
);
// Re-submit the form using validation-exempt button
$response = $this->submitForm(
'Form_Form',
'action_doSubmitValidationExempt',
array(
'Email' => 'test@test.com'
)
);
// The required message should be empty if validation was skipped
$items = $this->cssParser()->getBySelector('#SomeRequiredField span.required');
$this->assertEmpty($items);
// And the session message should show up is submitted successfully
$this->assertPartialMatchBySelector(
'#Form_Form_error',
array(
'Validation skipped'
),
'Form->sessionMessage() shows up after reloading the form'
);
}
public function testSetValidationExemptActions() {
$form = $this->getStubForm();
$form->setValidationExemptActions(array('exemptaction'));
$exemptActions = $form->getValidationExemptActions();
$this->assertEquals('exemptaction', $exemptActions[0]);
}
protected function getStubForm() {
$form = new CMSForm(
new CMSFormTest_Controller(),
'CMSForm',
new FieldList(),
new FieldList()
);
return $form;
}
}
class CMSFormTest_Controller extends Controller implements TestOnly {
private static $allowed_actions = array('Form');
private static $url_handlers = array(
'$Action//$ID/$OtherID' => "handleAction",
);
protected $template = 'BlankPage';
public function Link($action = null) {
return Controller::join_links('CMSFormTest_Controller', $this->request->latestParam('Action'),
$this->request->latestParam('ID'), $action);
}
public function Form() {
$form = new CMSForm(
$this,
'Form',
new FieldList(
new EmailField('Email'),
new TextField('SomeRequiredField'),
new CheckboxSetField('Boxes', null, array('1'=>'one','2'=>'two'))
),
new FieldList(
new FormAction('doSubmit'),
new FormAction('doSubmitValidationExempt')
),
new RequiredFields(
'Email',
'SomeRequiredField'
)
);
$form->setValidationExemptActions(array('doSubmitValidationExempt'));
$form->setResponseNegotiator('foo'); // We aren't testing AJAX responses, so just set anything
$form->disableSecurityToken(); // Disable CSRF protection for easier form submission handling
return $form;
}
public function doSubmit($data, $form, $request) {
$form->sessionMessage('Test save was successful', 'good');
return $this->redirectBack();
}
public function doSubmitValidationExempt($data, $form, $request) {
$form->sessionMessage('Validation skipped', 'good');
return $this->redirectBack();
}
public function getViewer($action = null) {
return new SSViewer('BlankPage');
}
}