Merge branch 'feature/dynamic-forms-4439'

fixes #4439
This commit is contained in:
Marius Hein 2013-08-06 11:46:15 +02:00
commit 27ae3ceb35
27 changed files with 519 additions and 326 deletions

View File

@ -69,8 +69,7 @@ class AuthenticationController extends ActionController
$this->redirectNow('index?_render=body');
}
if ($this->view->form->isPostAndValid()) {
if ($this->view->form->isSubmittedAndValid()) {
$credentials->setUsername($this->view->form->getValue('username'));
$credentials->setPassword($this->view->form->getValue('password'));

View File

@ -24,11 +24,11 @@ In here you can add elements to your form, add validations and filters of your
choice. The creation method is invoked lazy just before a form is rendered or
*isValid()* is called.
#### Calling is *IsPostAndValid()*
#### Calling is *isSubmittedAndValid()*
*IsPostAndValid()* is used to test of all needed parameters there. It combines
testing for post request and pulls out the data from request object to handle
over an array for Zend native method *isValid()*
*isSubmittedAndValid()* is used to check whether the form is ready to be processed or not.
It ensures that the current request method is POST, that the form was manually submitted
and that the data provided in the request is valid and gets repopulated in case its invalid.
#### Pre validation
@ -162,6 +162,32 @@ interface methods:
}
}
## Testing forms
When testing forms it is a good idea to use Zend_Test_PHPUnit_ControllerTestCase
instead of others like PHPUnit_Framework_TestCase as this enables you to use a
request dummy which can be passed to your form.
### Example:
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
class YourTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
function exampleTest()
{
$request = $this->getRequest();
$request->setMethod('POST')->setPost(array(
'key' => 'value'
)
);
$form = new SomeForm();
$form->setRequest($request);
...
}
}
## Additional resources
* [API documentation](http://build.icinga.org/jenkins/view/icinga2-web/job/icinga2web-development/javadoc/?)

View File

@ -27,19 +27,22 @@ namespace Icinga\Web;
use Icinga\Exception\ProgrammingError;
use Icinga\Web\Form\InvalidCSRFTokenException;
use Zend_Form_Exception;
use Zend_View_Interface;
use \Zend_Controller_Request_Abstract;
use \Zend_Form_Element_Submit;
use \Zend_Form_Element_Reset;
use \Zend_View_Interface;
use \Zend_Form;
/**
* Class Form
*
* How forms are used in Icinga 2 Web
*/
abstract class Form extends \Zend_Form
abstract class Form extends Zend_Form
{
/**
* The form's request object
* @var \Zend_Controller_Request_Abstract
* @var Zend_Controller_Request_Abstract
*/
private $request;
@ -75,6 +78,24 @@ abstract class Form extends \Zend_Form
*/
private $sessionId = false;
/**
* Label for submit button
*
* If omitted, no button will be shown.
*
* @var string
*/
private $submitLabel;
/**
* Label for cancel button
*
* If omitted, no button will be shown.
*
* @var string
*/
private $cancelLabel;
/**
* Returns the session ID stored in this form instance
* @return mixed
@ -109,7 +130,6 @@ abstract class Form extends \Zend_Form
return $this->tokenElementName;
}
/**
* Render the form to html
* @param Zend_View_Interface $view
@ -136,16 +156,16 @@ abstract class Form extends \Zend_Form
/**
* Setter for request
* @param \Zend_Controller_Request_Abstract $request The request object of a session
* @param Zend_Controller_Request_Abstract $request The request object of a session
*/
public function setRequest(\Zend_Controller_Request_Abstract $request)
public function setRequest(Zend_Controller_Request_Abstract $request)
{
$this->request = $request;
}
/**
* Getter for request
* @return \Zend_Controller_Request_Abstract
* @return Zend_Controller_Request_Abstract
*/
public function getRequest()
{
@ -161,6 +181,14 @@ abstract class Form extends \Zend_Form
$this->initCsrfToken();
$this->create();
if ($this->submitLabel) {
$this->addSubmitButton();
}
if ($this->cancelLabel) {
$this->addCancelButton();
}
// Empty action if not safe
if (!$this->getAction() && $this->getRequest()) {
$this->setAction($this->getRequest()->getRequestUri());
@ -171,23 +199,104 @@ abstract class Form extends \Zend_Form
}
/**
* Test if data from array or request is valid
* Setter for cancel label
* @param string $cancelLabel
*/
public function setCancelLabel($cancelLabel)
{
$this->cancelLabel = $cancelLabel;
}
/**
* Add cancel button to form
*/
private function addCancelButton()
{
$cancelLabel = new Zend_Form_Element_Reset(
array(
'name' => 'btn_reset',
'label' => $this->cancelLabel,
'class' => 'btn pull-right'
)
);
$this->addElement($cancelLabel);
}
/**
* Setter for submit label
* @param string $submitLabel
*/
public function setSubmitLabel($submitLabel)
{
$this->submitLabel = $submitLabel;
}
/**
* Add submit button to form
*/
private function addSubmitButton()
{
$submitButton = new Zend_Form_Element_Submit(
array(
'name' => 'btn_submit',
'label' => $this->submitLabel,
'class' => 'btn btn-primary pull-right'
)
);
$this->addElement($submitButton);
}
/**
* Enable automatic submission
*
* Enables automatic submission of this form once the user edits specific elements.
*
* @param array $triggerElements The element names which should auto-submit the form
* @throws ProgrammingError When an element is found which does not yet exist
*/
final public function enableAutoSubmit($triggerElements)
{
foreach ($triggerElements as $elementName) {
$element = $this->getElement($elementName);
if ($element !== null) {
$element->setAttrib('onchange', '$(this.form).submit();');
} else {
throw new ProgrammingError(
'You need to add the element "' . $elementName . '" to' .
' the form before automatic submission can be enabled!'
);
}
}
}
/**
* Check whether the form was submitted with a valid request
*
* Ensures that the current request method is POST, that the
* form was manually submitted and that the data provided in
* the request is valid and gets repopulated in case its invalid.
*
* If $data is null, internal request is selected to test validity
* @return bool
*/
public function isPostAndValid()
public function isSubmittedAndValid()
{
if ($this->getRequest()->isPost() === false) {
return false;
}
$checkData = $this->getRequest()->getParams();
$this->buildForm();
$checkData = $this->getRequest()->getParams();
$this->assertValidCsrfToken($checkData);
$this->preValidation($checkData);
return parent::isValid($checkData);
$submitted = true;
if ($this->submitLabel) {
$submitted = isset($checkData['btn_submit']);
}
if ($submitted) {
$this->preValidation($checkData);
}
return parent::isValid($checkData) && $submitted;
}
/**
@ -224,8 +333,8 @@ abstract class Form extends \Zend_Form
/**
* Tests the submitted data for a correct CSRF token, if needed
*
* @param Array $checkData The POST data send by the user
* @throws Form\InvalidCSRFTokenException When CSRF Validation fails
* @param Array $checkData The POST data send by the user
* @throws InvalidCSRFTokenException When CSRF Validation fails
*/
final public function assertValidCsrfToken(array $checkData)
{

View File

@ -42,8 +42,8 @@ use Icinga\Exception\ConfigurationError;
use Icinga\Exception\MissingParameterException;
use Monitoring\Form\Command\AcknowledgeForm;
use Monitoring\Form\Command\CommentForm;
use Monitoring\Form\Command\ConfirmationForm;
use Monitoring\Form\Command\ConfirmationWithIdentifierForm;
use Monitoring\Form\Command\CommandForm;
use Monitoring\Form\Command\CommandWithIdentifierForm;
use Monitoring\Form\Command\CustomNotificationForm;
use Monitoring\Form\Command\DelayNotificationForm;
use Monitoring\Form\Command\RescheduleNextCheckForm;
@ -97,8 +97,7 @@ class Monitoring_CommandController extends ModuleActionController
public function postDispatch()
{
if ($this->issetForm()) {
if ($this->form->isPostAndValid()) {
if ($this->form->isSubmittedAndValid()) {
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout()->disableLayout();
}
@ -248,13 +247,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disableactivechecksAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable active checks'));
$form->addNote(t('Disable active checks for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableActiveChecks($this->view->objects);
}
}
@ -266,13 +265,13 @@ class Monitoring_CommandController extends ModuleActionController
public function enableactivechecksAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable active checks'));
$form->addNote(t('Enable active checks for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableActiveChecks($this->view->objects);
}
}
@ -289,7 +288,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->scheduleCheck($this->view->objects);
}
}
@ -309,7 +308,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->submitCheckResult($this->view->objects, $form->getState(), $form->getOutput(), $form->getPerformancedata());
}
}
@ -321,13 +320,13 @@ class Monitoring_CommandController extends ModuleActionController
public function stopobsessingAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Stop obsessing'));
$form->addNote(t('Stop obsessing over this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->stopObsessing($this->view->objects);
}
}
@ -339,13 +338,13 @@ class Monitoring_CommandController extends ModuleActionController
public function startobsessingAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Start obsessing'));
$form->addNote(t('Start obsessing over this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->startObsessing($this->view->objects);
}
}
@ -357,13 +356,13 @@ class Monitoring_CommandController extends ModuleActionController
public function stopacceptingpassivechecksAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Stop accepting passive checks'));
$form->addNote(t('Passive checks for this object will be omitted.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disablePassiveChecks($this->view->objects);
}
}
@ -375,13 +374,13 @@ class Monitoring_CommandController extends ModuleActionController
public function startacceptingpassivechecksAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Start accepting passive checks'));
$form->addNote(t('Passive checks for this object will be accepted.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableActiveChecks($this->view->objects);
}
}
@ -393,13 +392,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disablenotificationsAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable notifications'));
$form->addNote(t('Notifications for this object will be disabled.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableNotifications($this->view->objects);
}
}
@ -410,13 +409,13 @@ class Monitoring_CommandController extends ModuleActionController
*/
public function enablenotificationsAction()
{
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable notifications'));
$form->addNote(t('Notifications for this object will be enabled.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableNotifications($this->view->objects);
}
}
@ -432,7 +431,7 @@ class Monitoring_CommandController extends ModuleActionController
$form->setRequest($this->getRequest());
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$author = $this->getRequest()->getUser()->getUsername();
$this->target->sendCustomNotification(
$this->view->objects,
@ -454,7 +453,7 @@ class Monitoring_CommandController extends ModuleActionController
$form->setWithChildren(false);
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->scheduleDowntime($this->view->objects, $form->getDowntime());
}
}
@ -472,7 +471,7 @@ class Monitoring_CommandController extends ModuleActionController
$form->setWithChildren(true);
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->scheduleDowntime($this->view->objects, $form->getDowntime());
}
}
@ -484,13 +483,13 @@ class Monitoring_CommandController extends ModuleActionController
public function removedowntimeswithchildrenAction()
{
$this->setSupportedParameters(array('host'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Remove downtime(s)'));
$form->addNote(t('Remove downtime(s) from this host and its services.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->removeDowntime($this->view->objects);
}
}
@ -502,13 +501,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disablenotificationswithchildrenAction()
{
$this->setSupportedParameters(array('host'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable notifications'));
$form->addNote(t('Notifications for this host and its services will be disabled.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableNotifications($this->view->objects);
$this->target->disableNotificationsForServices($this->view->objects);
}
@ -521,13 +520,13 @@ class Monitoring_CommandController extends ModuleActionController
public function enablenotificationswithchildrenAction()
{
$this->setSupportedParameters(array('host'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable notifications'));
$form->addNote(t('Notifications for this host and its services will be enabled.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableNotifications($this->view->objects);
$this->target->enableNotificationsForServices($this->view->objects);
}
@ -547,7 +546,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
if ($form->isForced()) {
$this->target->scheduleForcedCheck($this->view->objects, time());
$this->target->scheduleForcedCheck($this->view->objects, time(), true);
@ -565,13 +564,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disableactivecheckswithchildrenAction()
{
$this->setSupportedParameters(array('host'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable active checks'));
$form->addNote(t('Disable active checks for this host and its services.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableActiveChecks($this->view->objects);
$this->target->disableActiveChecksWithChildren($this->view->objects);
}
@ -584,13 +583,13 @@ class Monitoring_CommandController extends ModuleActionController
public function enableactivecheckswithchildrenAction()
{
$this->setSupportedParameters(array('host'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable active checks'));
$form->addNote(t('Enable active checks for this host and its services.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableActiveChecks($this->view->objects);
$this->target->enableActiveChecksWithChildren($this->view->objects);
}
@ -603,13 +602,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disableeventhandlerAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable event handler'));
$form->addNote(t('Disable event handler for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableEventHandler($this->view->objects);
}
}
@ -621,13 +620,13 @@ class Monitoring_CommandController extends ModuleActionController
public function enableeventhandlerAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable event handler'));
$form->addNote(t('Enable event handler for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableEventHandler($this->view->objects);
}
}
@ -639,13 +638,13 @@ class Monitoring_CommandController extends ModuleActionController
public function disableflapdetectionAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Disable flapping detection'));
$form->addNote(t('Disable flapping detection for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->disableFlappingDetection($this->view->objects);
}
}
@ -657,13 +656,13 @@ class Monitoring_CommandController extends ModuleActionController
public function enableflapdetectionAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Enable flapping detection'));
$form->addNote(t('Enable flapping detection for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->enableFlappingDetection($this->view->objects);
}
}
@ -680,7 +679,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->addComment($this->view->objects, $form->getComment());
}
}
@ -692,13 +691,13 @@ class Monitoring_CommandController extends ModuleActionController
public function resetattributesAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Reset attributes'));
$form->addNote(t('Reset modified attributes to its default.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->resetAttributes($this->view->objects);
}
}
@ -715,7 +714,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->acknowledge($this->view->objects, $form->getAcknowledgement());
}
}
@ -727,13 +726,13 @@ class Monitoring_CommandController extends ModuleActionController
public function removeacknowledgementAction()
{
$this->setSupportedParameters(array('host', 'service'));
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Remove problem acknowledgement'));
$form->addNote(t('Remove problem acknowledgement for this object.'));
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->removeAcknowledge($this->view->objects);
}
}
@ -750,7 +749,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->delayNotification($this->view->objects, $form->getDelayTime());
}
}
@ -762,7 +761,7 @@ class Monitoring_CommandController extends ModuleActionController
public function removedowntimeAction()
{
$this->setSupportedParameters(array('downtimeid'));
$form = new ConfirmationWithIdentifierForm();
$form = new CommandWithIdentifierForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel(t('Delete downtime'));
@ -772,7 +771,7 @@ class Monitoring_CommandController extends ModuleActionController
$this->setForm($form);
if ($form->isPostAndValid() === true) {
if ($form->IsSubmittedAndValid() === true) {
$this->target->removeDowntime($this->view->objects);
}
}

View File

@ -37,11 +37,11 @@ use Icinga\Protocol\Commandpipe\Comment;
/**
* Form for acknowledge commands
*/
class AcknowledgeForm extends ConfirmationForm
class AcknowledgeForm extends CommandForm
{
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{
@ -66,6 +66,13 @@ class AcknowledgeForm extends ConfirmationForm
)
);
$expireNote = new Note(
array(
'name' => 'expirenote',
'value' => t('If the acknowledgement should expire, check the box and enter an expiration timestamp.')
)
);
$expireCheck = $this->createElement(
'checkbox',
'expire',
@ -74,26 +81,25 @@ class AcknowledgeForm extends ConfirmationForm
)
);
$now = new PhpDateTime();
$interval = new DateInterval('PT1H'); // Add 3600 seconds
$now->add($interval);
if ($this->getRequest()->getPost('expire', '0') === '1') {
$now = new PhpDateTime();
$interval = new DateInterval('PT1H'); // Add 3600 seconds
$now->add($interval);
$expireTime = new DateTime(
array(
'name' => 'expiretime',
'label' => t('Expire time'),
'value' => $now->format($this->getDateFormat())
)
);
$expireTime = new DateTime(
array(
'name' => 'expiretime',
'label' => t('Expire time'),
'value' => $now->format($this->getDateFormat())
)
);
$this->addElements(array($expireNote, $expireCheck, $expireTime));
} else {
$this->addElements(array($expireNote, $expireCheck));
}
$expireNote = new Note(
array(
'name' => 'expirenote',
'value' => t('If the acknowledgement should expire, check the box and enter an expiration timestamp.')
)
);
$this->addElements(array($expireNote, $expireCheck, $expireTime));
$this->enableAutoSubmit(array('expire'));
$this->addDisplayGroup(
array(

View File

@ -36,7 +36,7 @@ use \Zend_Validate_Date;
/**
* Simple confirmation command
*/
class ConfirmationForm extends Form
class CommandForm extends Form
{
/**
* Default date format
@ -48,24 +48,6 @@ class ConfirmationForm extends Form
*/
const DEFAULT_DATE_VALIDATION = 'yyyy-MM-dd hh:ii:ss';
/**
* Label for submit button
*
* If omitted, no button will be shown.
*
* @var string
*/
private $submitLabel;
/**
* Label for cancel button
*
* If omitted, no button will be shown.
*
* @var string
*/
private $cancelLabel;
/**
* Array of messages
*
@ -73,46 +55,6 @@ class ConfirmationForm extends Form
*/
private $notes = array();
/**
* Setter for cancel label
*
* @param string $cancelLabel
*/
public function setCancelLabel($cancelLabel)
{
$this->cancelLabel = $cancelLabel;
}
/**
* Getter for cancel label
*
* @return string
*/
public function getCancelLabel()
{
return $this->cancelLabel;
}
/**
* Setter for submit label
*
* @param string $submitLabel
*/
public function setSubmitLabel($submitLabel)
{
$this->submitLabel = $submitLabel;
}
/**
* Getter for submit label
*
* @return string
*/
public function getSubmitLabel()
{
return $this->submitLabel;
}
/**
* Add message to stack
*
@ -173,28 +115,6 @@ class ConfirmationForm extends Form
}
}
if ($this->getCancelLabel()) {
$cancelLabel = new \Zend_Form_Element_Reset(
array(
'name' => 'reset',
'label' => $this->getCancelLabel(),
'class' => 'btn pull-right'
)
);
$this->addElement($cancelLabel);
}
if ($this->getSubmitLabel()) {
$submitButton = new \Zend_Form_Element_Submit(
array(
'name' => 'submit',
'label' => $this->getSubmitLabel(),
'class' => 'btn btn-primary pull-right'
)
);
$this->addElement($submitButton);
}
$this->addElement($this->createInstanceHiddenField());
}

View File

@ -33,7 +33,7 @@ use \Zend_Form_Element_Hidden;
/**
* Form to handle confirmations with a single value processed
*/
class ConfirmationWithIdentifierForm extends ConfirmationForm
class CommandWithIdentifierForm extends CommandForm
{
/**
* Identifier for data field
@ -124,7 +124,7 @@ class ConfirmationWithIdentifierForm extends ConfirmationForm
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -32,11 +32,11 @@ use Icinga\Protocol\Commandpipe\Comment;
/**
* Form for adding comment commands
*/
class CommentForm extends ConfirmationForm
class CommentForm extends CommandForm
{
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -33,11 +33,11 @@ use Zend_Form_Element_Hidden;
/**
* For for command CustomNotification
*/
class CustomNotificationForm extends ConfirmationForm
class CustomNotificationForm extends CommandForm
{
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -31,7 +31,7 @@ namespace Monitoring\Form\Command;
/**
* Form to handle DelayNotification command
*/
class DelayNotificationForm extends ConfirmationForm
class DelayNotificationForm extends CommandForm
{
/**
* Biggest value for minutes
@ -39,7 +39,7 @@ class DelayNotificationForm extends ConfirmationForm
const MAX_VALUE = 1440;
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -39,7 +39,7 @@ class RescheduleNextCheckForm extends WithChildrenCommandForm
{
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -93,7 +93,7 @@ class ScheduleDowntimeForm extends WithChildrenCommandForm
/**
* Interface method to build the form
*
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{
@ -178,37 +178,41 @@ class ScheduleDowntimeForm extends WithChildrenCommandForm
)
)
);
$this->enableAutoSubmit(array('type'));
$hoursText = new Zend_Form_Element_Text('hours');
$hoursText->setLabel(t('Flexible duration'));
$hoursText->setAttrib('style', 'width: 40px;');
$hoursText->setValue(1);
$hoursText->addDecorator('HtmlTag', array('tag' => 'dd', 'openOnly' => true));
$hoursText->addDecorator(
'Callback',
array(
'callback' => function () {
return t('Hours');
}
)
);
if ($this->getRequest()->getPost('type') === self::TYPE_FLEXIBLE) {
$hoursText = new Zend_Form_Element_Text('hours');
$hoursText->setLabel(t('Flexible duration'));
$hoursText->setAttrib('style', 'width: 40px;');
$hoursText->setValue(1);
$hoursText->addDecorator('HtmlTag', array('tag' => 'dd', 'openOnly' => true));
$hoursText->addDecorator(
'Callback',
array(
'callback' => function () {
return t('Hours');
}
)
);
$minutesText = new Zend_Form_Element_Text('minutes');
$minutesText->setLabel(t('Minutes'));
$minutesText->setAttrib('style', 'width: 40px;');
$minutesText->setValue(0);
$minutesText->removeDecorator('HtmlTag');
$minutesText->removeDecorator('Label');
$minutesText->addDecorator(
'Callback',
array(
'callback' => function () {
return t('Minutes');
}
)
);
$minutesText = new Zend_Form_Element_Text('minutes');
$minutesText->setLabel(t('Minutes'));
$minutesText->setAttrib('style', 'width: 40px;');
$minutesText->setValue(0);
$minutesText->removeDecorator('HtmlTag');
$minutesText->removeDecorator('Label');
$minutesText->addDecorator(
'Callback',
array(
'callback' => function () {
return t('Minutes');
}
)
);
$this->addElements(array($hoursText, $minutesText));
$this->addElements(array($hoursText, $minutesText));
}
if ($this->getWithChildren() === true) {
$this->addNote(t('Schedule downtime for host and its services.'));

View File

@ -33,7 +33,7 @@ use Icinga\Exception\ProgrammingError;
/**
* Form for command SubmitPassiveCheckResult
*/
class SubmitPassiveCheckResultForm extends ConfirmationForm
class SubmitPassiveCheckResultForm extends CommandForm
{
/**
* Type constant for host form
@ -117,7 +117,7 @@ class SubmitPassiveCheckResultForm extends ConfirmationForm
/**
* Interface method to build the form
* @see ConfirmationForm::create
* @see CommandForm::create
*/
protected function create()
{

View File

@ -31,7 +31,7 @@ namespace Monitoring\Form\Command;
/**
* Class handle specific command flags
*/
abstract class WithChildrenCommandForm extends ConfirmationForm
abstract class WithChildrenCommandForm extends CommandForm
{
/**
* Flag if we handle child objects as well

View File

@ -6,7 +6,7 @@ namespace Test\Monitoring\Forms\Command;
require_once __DIR__.'/BaseFormTest.php';
$base = __DIR__.'/../../../../../../../';
require_once $base.'modules/monitoring/application/forms/Command/ConfirmationForm.php';
require_once $base.'modules/monitoring/application/forms/Command/CommandForm.php';
require_once realpath($base.'modules/monitoring/application/forms/Command/WithChildrenCommandForm.php');
require_once realpath($base.'modules/monitoring/application/forms/Command/AcknowledgeForm.php');
@ -17,16 +17,20 @@ use \Zend_Test_PHPUnit_ControllerTestCase;
class AcknowledgeFormTest extends BaseFormTest
{
const FORMCLASS = "Monitoring\Form\Command\AcknowledgeForm";
public function testForm()
{
$form = $this->getRequestForm(array(), self::FORMCLASS);
$form->buildForm();
$formWithoutExpiration = $this->getRequestForm(array(), self::FORMCLASS);
$formWithoutExpiration->buildForm();
$formWithExpiration = $this->getRequestForm(array(
'expire' => '1'
), self::FORMCLASS);
$formWithExpiration->buildForm();
$this->assertCount(11, $form->getElements());
$this->assertCount(10, $formWithoutExpiration->getElements());
$this->assertCount(11, $formWithExpiration->getElements());
}
public function testValidateCorrectForm()
{
$form = $this->getRequestForm(array(
@ -34,13 +38,13 @@ class AcknowledgeFormTest extends BaseFormTest
'comment' => 'test comment',
'persistent' => '0',
'expire' => '0',
'expiretime' => '',
'sticky' => '0',
'notify' => '0'
'notify' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting a correct form to be validated correctly"
);
}
@ -52,12 +56,12 @@ class AcknowledgeFormTest extends BaseFormTest
'comment' => '',
'persistent' => '0',
'expire' => '0',
'expiretime' => '',
'sticky' => '0',
'notify' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting a missing comment text to cause validation errors"
);
}
@ -71,10 +75,11 @@ class AcknowledgeFormTest extends BaseFormTest
'expire' => '1',
'expiretime' => '',
'sticky' => '0',
'notify' => '0'
'notify' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting a missing expire time to cause validation errors when expire is 1"
);
}
@ -88,10 +93,11 @@ class AcknowledgeFormTest extends BaseFormTest
'expire' => '1',
'expiretime' => 'NOT A DATE',
'sticky' => '0',
'notify' => '0'
'notify' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert incorrect dates to be recognized when validating expiretime"
);
}
@ -105,10 +111,11 @@ class AcknowledgeFormTest extends BaseFormTest
'expire' => '1',
'expiretime' => '2013-07-10 17:32:16',
'sticky' => '0',
'notify' => '0'
'notify' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert that correct expire time acknowledgement is considered valid"
);
}

View File

@ -32,6 +32,11 @@ namespace Test\Monitoring\Forms\Command {
require_once realpath($base.'library/Icinga/Web/Form/Element/DateTime.php');
use \Zend_View;
use \Zend_Form;
use \Zend_View_Interface;
use \Zend_Form_Element_Reset;
use \Zend_Form_Element_Submit;
use \Zend_Controller_Request_Abstract;
use \Zend_Test_PHPUnit_ControllerTestCase;

View File

@ -4,7 +4,7 @@ namespace Test\Monitoring\Forms\Command;
require_once __DIR__.'/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/WithChildrenCommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommentForm.php';
@ -28,13 +28,14 @@ class CommentFormTest extends BaseFormTest
public function testCorrectCommentValidation()
{
$form = $this->getRequestForm(array(
'author' => 'test1',
'comment' => 'test2',
'sticky' => '0'
'author' => 'test1',
'comment' => 'test2',
'sticky' => '0',
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting correct comment form to be considered valid"
);
}
@ -47,7 +48,7 @@ class CommentFormTest extends BaseFormTest
'sticky' => '0'
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting missing comment text in comment form to cause validation errors"
);
}
@ -60,7 +61,7 @@ class CommentFormTest extends BaseFormTest
'sticky' => '0'
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting missing comment author to cause validation errors"
);
}

View File

@ -4,33 +4,27 @@ namespace Test\Monitoring\Forms\Command;
require_once __DIR__.'/BaseFormTest.php';
require_once __DIR__. '/../../../../../../../library/Icinga/Web/Form.php';
require_once __DIR__. '/../../../../../../../library/Icinga/Web/Form/Element/Note.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
use \Zend_View;
use \Zend_Test_PHPUnit_ControllerTestCase;
use Monitoring\Form\Command\ConfirmationForm;
use Monitoring\Form\Command\CommandForm;
class ConfirmationFormTest extends BaseFormTest
class CommandFormTest extends BaseFormTest
{
public function testFormCreation()
{
$view = new Zend_View();
$form = new ConfirmationForm();
$form = new CommandForm();
$form->setRequest($this->getRequest());
$form->setSubmitLabel('111TEST_SUBMIT');
$form->setCancelLabel('888TEST_RESET');
$form->addNote('444 NOTE 1');
$form->addNote('555 NOTE 2');
$form->buildForm();
$content = $form->render($view);
$this->assertContains('<input type="submit" name="submit" id="submit" value="111TEST_SUBMIT" class="btn btn-primary pull-right">', $content);
$this->assertContains('<input type="reset" name="reset" id="reset" value="888TEST_RESET" class="btn pull-right"></dd>', $content);
$this->assertContains('<dd id="note_0-element">', $content);
$this->assertContains('<dd id="note_1-element">', $content);
$this->assertContains('444 NOTE 1</dd>', $content);
@ -39,7 +33,7 @@ class ConfirmationFormTest extends BaseFormTest
public function testFormNotes()
{
$form = new ConfirmationForm();
$form = new CommandForm();
$form->addNote('test1');
$form->addNote('test2');

View File

@ -4,17 +4,17 @@
namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/WithChildrenCommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationWithIdentifierForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandWithIdentifierForm.php';
use Monitoring\Form\Command\ConfirmationWithIdentifierForm;
use Monitoring\Form\Command\CommandWithIdentifierForm;
use \Zend_View;
use \Zend_Test_PHPUnit_ControllerTestCase;
class ConfirmationWithIdentifierFormTest extends BaseFormTest
class CommandWithIdentifierFormTest extends BaseFormTest
{
const FORMCLASS = "Monitoring\Form\Command\ConfirmationWithIdentifierForm";
const FORMCLASS = "Monitoring\Form\Command\CommandWithIdentifierForm";
public function testForm()
{
$form = $this->getRequestForm(array(), self::FORMCLASS);
@ -28,7 +28,8 @@ class ConfirmationWithIdentifierFormTest extends BaseFormTest
{
$form = $this->getRequestForm(array(
'testval' => 123
'testval' => 123,
'btn_submit' => 'foo'
), self::FORMCLASS);
$form->setFieldLabel('Test1');
@ -36,7 +37,7 @@ class ConfirmationWithIdentifierFormTest extends BaseFormTest
$form->setSubmitLabel('DING DING');
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting correct confirmation with id to be valid"
);
}
@ -48,7 +49,7 @@ class ConfirmationWithIdentifierFormTest extends BaseFormTest
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting an invalid (empty) value to cause validation errors"
);
}
@ -60,7 +61,7 @@ class ConfirmationWithIdentifierFormTest extends BaseFormTest
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting an non numeric value to cause validation errors"
);
}
@ -72,7 +73,7 @@ class ConfirmationWithIdentifierFormTest extends BaseFormTest
), self::FORMCLASS);
$form->buildForm();
$this->assertTrue($form->isPostAndValid());
$this->assertTrue($form->isSubmittedAndValid());
$this->assertEquals('123123666', $form->getElement('objectid')->getValue());
}

View File

@ -3,7 +3,7 @@
namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CustomNotificationForm.php';
@ -16,13 +16,14 @@ class CustomNotificationFormTest extends BaseFormTest
public function testForm1()
{
$form = $this->getRequestForm(array(
'comment' => 'TEST COMMENT',
'author' => 'LAOLA'
'comment' => 'TEST COMMENT',
'author' => 'LAOLA',
'btn_submit' => 'foo'
), "Monitoring\Form\Command\CustomNotificationForm");
$form->buildForm();
$this->assertCount(7, $form->getElements());
$this->assertTrue($form->isPostAndValid());
$this->assertTrue($form->isSubmittedAndValid());
}
}

View File

@ -3,7 +3,7 @@
namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/DelayNotificationForm.php';
@ -16,7 +16,8 @@ class DelayNotificationFormFormTest extends BaseFormTest
public function testValidForm()
{
$form = $this->getRequestForm(array(
'minutes' => 12
'minutes' => 12,
'btn_submit' => 'foo'
), 'Monitoring\Form\Command\DelayNotificationForm');
$form->buildForm();
@ -28,7 +29,7 @@ class DelayNotificationFormFormTest extends BaseFormTest
$this->assertTrue($element->isRequired(), "Assert minutes to be declared as required");
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert a correct DelayNotificationForm to be considered valid"
);
@ -44,7 +45,7 @@ class DelayNotificationFormFormTest extends BaseFormTest
$form->buildForm();
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Asserting invalid minutes (NaN) to cause validation errors"
);

View File

@ -6,7 +6,7 @@ namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/WithChildrenCommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/RescheduleNextCheckForm.php';
@ -25,23 +25,25 @@ class RescheduleNextCheckFormTest extends BaseFormTest
$form = $this->getRequestForm(array(
'checktime' => '2013-10-19 17:30:00',
'forcecheck' => 1
'forcecheck' => 1,
'btn_submit' => 'foo'
), self::FORMCLASS);
$form->buildForm();
$this->assertCount(6, $form->getElements());
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting a reschedule form with correct time and forececheck=1 to be valid'
);
$form = $this->getRequestForm(array(
'checktime' => '2013-10-19 17:30:00',
'forcecheck' => 0
'forcecheck' => 0,
'btn_submit' => 'foo'
), self::FORMCLASS);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting a reschedule form with correct time and forecheck=0 to be valid'
);
}
@ -54,7 +56,7 @@ class RescheduleNextCheckFormTest extends BaseFormTest
), self::FORMCLASS);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting an logically invalid checktime to be considered as invalid reschedule data'
);
@ -65,7 +67,7 @@ class RescheduleNextCheckFormTest extends BaseFormTest
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting an invalid non-numeric checktime to be considered as invalid reschedule data'
);
}

View File

@ -3,7 +3,7 @@
namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/WithChildrenCommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/ScheduleDowntimeForm.php';
@ -16,10 +16,15 @@ class ScheduleDowntimeFormTest extends BaseFormTest
const FORMCLASS = 'Monitoring\Form\Command\ScheduleDowntimeForm';
public function testCorrectFormElementCreation()
{
$form = $this->getRequestForm(array(), self::FORMCLASS);
$form->buildForm();
$formFixed = $this->getRequestForm(array(), self::FORMCLASS);
$formFixed->buildForm();
$formFlexible = $this->getRequestForm(array(
'type' => 'flexible'
), self::FORMCLASS);
$formFlexible->buildForm();
$this->assertCount(13, $form->getElements());
$this->assertCount(11, $formFixed->getElements());
$this->assertCount(13, $formFlexible->getElements());
$form = $this->getRequestForm(array(), self::FORMCLASS);
$form->setWithChildren(true);
@ -32,14 +37,15 @@ class ScheduleDowntimeFormTest extends BaseFormTest
public function testCorrectValidationWithChildrend()
{
$form = $this->getRequestForm(array(
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FIXED,
'hours' => '',
'minutes' => '',
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FIXED,
'hours' => '',
'minutes' => '',
'btn_submit' => 'foo',
// 'childobjects' => '',
), self::FORMCLASS);
@ -47,24 +53,25 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting a correct fixed downtime form to be considered valid'
);
$form = $this->getRequestForm(array(
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FLEXIBLE,
'hours' => '10',
'minutes' => '10',
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FLEXIBLE,
'hours' => '10',
'minutes' => '10',
'btn_submit' => 'foo'
// 'childobjects' => '',
), self::FORMCLASS);
$form->setWithChildren(true);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Asserting a correct flexible downtime form to be considered valid'
);
@ -86,7 +93,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert missing hours and minutes in downtime form to cause failing validation'
);
}
@ -109,7 +116,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert missing author to cause validation errors in fixed downtime'
);
}
@ -131,7 +138,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert missing comment to cause validation errors in fixed downtime'
);
}
@ -152,7 +159,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert invalid trigger field to cause validation to fail'
);
}
@ -173,7 +180,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert incorrect start time to cause validation errors in fixed downtime'
);
}
@ -195,7 +202,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert invalid endtime to cause validation errors in fixed downtime'
);
}
@ -217,7 +224,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert negative hours to cause validation errors in flexible downtime'
);
}
@ -238,7 +245,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(true);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
'Assert non numeric valud to cause validation errors in flexible downtime '
);
@ -247,21 +254,22 @@ class ScheduleDowntimeFormTest extends BaseFormTest
public function testCorrectScheduleDowntimeWithoutChildrenForm()
{
$form = $this->getRequestForm(array(
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FIXED,
'hours' => '',
'minutes' => '',
'author' => 'TEST_AUTHOR',
'comment' => 'DING DING',
'triggered' => '4',
'starttime' => '2013-07-17 10:30:00',
'endtime' => '2013-07-17 10:30:00',
'type' => ScheduleDowntimeForm::TYPE_FIXED,
'hours' => '',
'minutes' => '',
'btn_submit' => 'foo',
'childobjects' => '0',
), self::FORMCLASS);
$form->setWithChildren(false);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert a correct schedule downtime without children form to be considered valid"
);
}
@ -281,7 +289,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(false);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert and incorrect (non-numeric) childobjects value to cause validation errors"
);
@ -299,7 +307,7 @@ class ScheduleDowntimeFormTest extends BaseFormTest
$form->setWithChildren(false);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert and incorrect (numeric) childobjects value to cause validation errors"
);
}

View File

@ -3,7 +3,7 @@
namespace Test\Monitoring\Forms\Command;
require_once __DIR__. '/BaseFormTest.php';
require_once __DIR__. '/../../../../../application/forms/Command/ConfirmationForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/CommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/WithChildrenCommandForm.php';
require_once __DIR__. '/../../../../../application/forms/Command/SubmitPassiveCheckResultForm.php';
@ -59,13 +59,14 @@ class SubmitPassiveCheckResultFormTest extends BaseFormTest
$form = $this->getRequestForm(array(
'pluginstate' => 0,
'checkoutput' => 'DING',
'performancedata' => ''
'performancedata' => '',
'btn_submit' => 'foo'
), self::FORMCLASS);
$form->setType(SubmitPassiveCheckResultForm::TYPE_SERVICE);
$this->assertTrue(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert a correct passive service check form to pass form validation"
);
}
@ -80,7 +81,7 @@ class SubmitPassiveCheckResultFormTest extends BaseFormTest
$form->setType(SubmitPassiveCheckResultForm::TYPE_SERVICE);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert empty checkoutput to cause validation errors in passive service check "
);
}
@ -95,7 +96,7 @@ class SubmitPassiveCheckResultFormTest extends BaseFormTest
$form->setType(SubmitPassiveCheckResultForm::TYPE_SERVICE);
$this->assertFalse(
$form->isPostAndValid(),
$form->isSubmittedAndValid(),
"Assert invalid (non-numeric) state to cause validation errors in passive service check"
);
}

View File

@ -0,0 +1,109 @@
<?php
namespace Tests\Icinga\Web;
require_once('Zend/Form.php');
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
require_once('../../library/Icinga/Web/Form.php');
require_once('../../library/Icinga/Exception/ProgrammingError.php');
require_once('../../library/Icinga/Web/Form/InvalidCSRFTokenException.php');
use Icinga\Web\Form;
use \Zend_Test_PHPUnit_ControllerTestCase;
/**
* Dummy extension class as Icinga\Web\Form is an abstract one
*/
class TestForm extends Form
{
public function create()
{
// pass
}
}
/**
* Tests for the Icinga\Web\Form class (Base class for all other forms)
*/
class FormTest extends Zend_Test_PHPUnit_ControllerTestCase
{
/**
* Tests whether the cancel label will be added to the form
*/
function testCancelLabel()
{
$form = new TestForm();
$form->setCancelLabel('Cancel');
$form->buildForm();
$this->assertCount(2, $form->getElements(), 'Asserting that the cancel label is present');
}
/**
* Tests whether the submit button will be added to the form
*/
function testSubmitButton()
{
$form = new TestForm();
$form->setSubmitLabel('Submit');
$form->buildForm();
$this->assertCount(2, $form->getElements(), 'Asserting that the submit button is present');
}
/**
* Tests whether automatic form submission will be enabled for a single field
*/
function testEnableAutoSubmitSingle()
{
$form = new TestForm();
$form->addElement('checkbox', 'example1', array());
$form->enableAutoSubmit(array('example1'));
$this->assertArrayHasKey('onchange', $form->getElement('example1')->getAttribs(),
'Asserting that auto-submit got enabled for one element');
}
/**
* Tests whether automatic form submission will be enabled for multiple fields
*/
function testEnableAutoSubmitMultiple()
{
$form = new TestForm();
$form->addElement('checkbox', 'example1', array());
$form->addElement('checkbox', 'example2', array());
$form->enableAutoSubmit(array('example1', 'example2'));
$this->assertArrayHasKey('onchange', $form->getElement('example1')->getAttribs(),
'Asserting that auto-submit got enabled for multiple elements');
$this->assertArrayHasKey('onchange', $form->getElement('example2')->getAttribs(),
'Asserting that auto-submit got enabled for multiple elements');
}
/**
* Tests whether automatic form submission can only be enabled for existing elements
*
* @expectedException Icinga\Exception\ProgrammingError
*/
function testEnableAutoSubmitExisting()
{
$form = new TestForm();
$form->enableAutoSubmit(array('not_existing'));
}
/**
* Tests whether a form will be detected as properly submitted
*/
function testFormSubmission()
{
$form = new TestForm();
$form->setTokenDisabled();
$form->setSubmitLabel('foo');
$request = $this->getRequest();
$form->setRequest($request->setMethod('GET'));
$this->assertFalse($form->isSubmittedAndValid(),
'Asserting that it is not possible to submit a form not using POST');
$request->setMethod('POST')->setPost(array('btn_submit' => 'foo'));
$this->assertTrue($form->isSubmittedAndValid(),
'Asserting that it is possible to detect a form as submitted');
}
}

View File

@ -56,7 +56,7 @@ namespace Tests\Icinga\Regression
$form = new LoginForm();
$form->setRequest($request);
$form->buildForm();
$this->assertTrue($form->isPostAndValid());
$this->assertTrue($form->isSubmittedAndValid());
}
}

View File

@ -9,7 +9,7 @@ from optparse import OptionParser, BadOptionError, AmbiguousOptionError
APPLICATION = 'phpunit'
DEFAULT_ARGS = ['--strict']
DEFAULT_ARGS = []
VAGRANT_SCRIPT = '/vagrant/test/php/runtests'
REPORT_DIRECTORY = '../../build/log'