mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
3172c7732e
Move validation exemptions into CMSForm Also fix buttonClicked() to skip CompositeField Whitespace Adding unit tests
127 lines
3.1 KiB
PHP
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');
|
|
}
|
|
|
|
} |