From 9cd4c2f856d6fb84f7226f2edc1f518b8496d66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannis=20Mo=C3=9Fhammer?= Date: Tue, 20 Aug 2013 17:53:27 +0200 Subject: [PATCH] Fix codestyle, add basic tests refs #4525 --- .../controllers/PreferenceController.php | 7 +- application/forms/Preference/GeneralForm.php | 37 +++++- .../forms/Preference/GeneralFormTest.php | 113 ++++++++++++++++++ 3 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 test/php/application/forms/Preference/GeneralFormTest.php diff --git a/application/controllers/PreferenceController.php b/application/controllers/PreferenceController.php index e4487edb3..fe2288b8e 100644 --- a/application/controllers/PreferenceController.php +++ b/application/controllers/PreferenceController.php @@ -75,14 +75,15 @@ class PreferenceController extends BasePreferenceController { $form = new GeneralForm(); $form->setConfiguration(IcingaConfig::app()); - $form->setRequest($this->_request); + $form->setRequest($this->getRequest()); if ($form->isSubmittedAndValid()) { $preferences = $form->getPreferences(); $userPreferences = $this->getRequest()->getUser()->getPreferences(); + $userPreferences->startTransaction(); - foreach ($preferences as $key=>$value) { - if ($value == "") { + foreach ($preferences as $key => $value) { + if ($value === '') { $userPreferences->remove($key); } else { $userPreferences->set($key, $value); diff --git a/application/forms/Preference/GeneralForm.php b/application/forms/Preference/GeneralForm.php index 3d0695873..c51347821 100644 --- a/application/forms/Preference/GeneralForm.php +++ b/application/forms/Preference/GeneralForm.php @@ -31,6 +31,7 @@ namespace Icinga\Form\Preference; use \Icinga\Application\Config as IcingaConfig; use \Icinga\Application\Icinga; use \Icinga\Application\DbAdapterFactory; +use \Icinga\User\Preferences; use \Icinga\Web\Form; use \Icinga\Web\Form\Validator\TimeFormatValidator; use \Icinga\Web\Form\Validator\DateFormatValidator; @@ -51,7 +52,14 @@ class GeneralForm extends Form * * @var IcingaConfig */ - private $config = null; + private $config; + + /** + * The preference object to use instead of the one from the user (used for testing) + * + * @var Zend_Config + */ + private $preferences; /** * Set the configuration to be used for this form when no preferences are set yet @@ -63,6 +71,29 @@ class GeneralForm extends Form $this->config = $cfg; } + /** + * Set preferences to be used instead of the one from the user object (used for testing) + * + * @param Zend_Config $prefs + */ + public function setUserPreferences($prefs) + { + $this->preferences = $prefs; + } + + /** + * Return the preferences of the user or the overwritten ones + * + * @return Zend_Config + */ + public function getUserPreferences() + { + if ($this->preferences) { + return $this->preferences; + } + return $this->getRequest()->getUser()->getPreferences(); + } + /** * Add a select field for setting the user's timezone. * @@ -78,7 +109,7 @@ class GeneralForm extends Form $tzList[$tz] = $tz; } $helptext = 'Use the following timezone for dates and times'; - $prefs = $this->getRequest()->getUser()->getPreferences(); + $prefs = $this->getUserPreferences(); $useGlobalTimezone = $this->getRequest()->getParam('default_timezone', !$prefs->has('app.timezone')); $selectTimezone = new Zend_Form_Element_Select( @@ -116,7 +147,7 @@ class GeneralForm extends Form */ private function addDateFormatSettings(Zend_Config $cfg) { - $prefs = $this->getRequest()->getUser()->getPreferences(); + $prefs = $this->getUserPreferences(); $useGlobalDateFormat = $this->getRequest()->getParam('default_date_format', !$prefs->has('app.dateFormat')); $useGlobalTimeFormat = $this->getRequest()->getParam('default_time_format', !$prefs->has('app.timeFormat')); diff --git a/test/php/application/forms/Preference/GeneralFormTest.php b/test/php/application/forms/Preference/GeneralFormTest.php new file mode 100644 index 000000000..51cf862ac --- /dev/null +++ b/test/php/application/forms/Preference/GeneralFormTest.php @@ -0,0 +1,113 @@ + + * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 + * @author Icinga Development Team + */ +// {{{ICINGA_LICENSE_HEADER}}} + +namespace Test\Icinga\Form\Preference; + + +require_once('Zend/Config.php'); +require_once('Zend/Config/Ini.php'); +require_once('Zend/Form/Element/Select.php'); +require_once(realpath('library/Icinga/Web/Form/BaseFormTest.php')); +require_once(realpath('../../application/forms/Preference/GeneralForm.php')); +require_once(realpath('../../library/Icinga/User/Preferences/ChangeSet.php')); +require_once(realpath('../../library/Icinga/User/Preferences.php')); + +use Test\Icinga\Web\Form\BaseFormTest; +use \Icinga\Web\Form; +use \DOMDocument; +use \Zend_Config; +use \Zend_View; +use Icinga\User\Preferences; + +/** + * Test for general form, mainly testing enable/disable behaviour + */ +class GeneralFormTest extends \Test\Icinga\Web\Form\BaseFormTest +{ + + /** + * Test whether fields using the default values have input disabled + * + */ + public function testDisableFormIfUsingDefault() + { + date_default_timezone_set('UTC'); + $form = $this->getRequestForm(array(), 'Icinga\Form\Preference\GeneralForm'); + $form->setRequest($this->getRequest()); + $form->setConfiguration( + new Zend_Config( + array( + 'timezone' => 'UTC' + ) + ) + ); + $form->setUserPreferences( + new Preferences( + array() + ) + ); + $form->create(); + $this->assertSame( + 1, + $form->getElement('timezone')->getAttrib('disabled'), + 'Asserting form elements to be disabled when not set in a preference' + ); + } + + /** + * Test whether fields with preferences are enabled + * + */ + public function testEnsableFormIfUsingPreference() + { + date_default_timezone_set('UTC'); + $form = $this->getRequestForm(array(), 'Icinga\Form\Preference\GeneralForm'); + $form->setRequest($this->getRequest()); + $form->setConfiguration( + new Zend_Config( + array( + 'timezone' => 'UTC' + ) + ) + ); + $form->setUserPreferences( + new Preferences( + array( + 'app.timezone' => 'Europe/Berlin' + ) + ) + ); + $form->create(); + $this->assertSame( + null, + $form->getElement('timezone')->getAttrib('disabled'), + 'Asserting form elements to be disabled when not set in a preference' + ); + } + +} \ No newline at end of file