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'); } }