From e638101a97909f565ef4925956f2a7c8b26ee8b2 Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 18 Dec 2013 15:48:32 -0500 Subject: [PATCH 01/22] Initial unit test configuration --- .../application/services/ShowService.php | 3 +- airtime_mvc/tests/application/bootstrap.php | 19 + .../controllers/ApiControllerTest.php | 20 - .../controllers/DashboardControllerTest.php | 20 - .../FormsControllerControllerTest.php | 20 - .../controllers/LibraryControllerTest.php | 20 - .../controllers/LoginControllerTest.php | 20 - .../controllers/NowplayingControllerTest.php | 20 - .../controllers/PlaylistControllerTest.php | 20 - .../controllers/PluploadControllerTest.php | 20 - .../controllers/PreferenceControllerTest.php | 20 - .../controllers/RecorderControllerTest.php | 20 - .../controllers/ScheduleControllerTest.php | 20 - .../controllers/SearchControllerTest.php | 20 - .../SidePlaylistControllerTest.php | 20 - .../SideplaylistControllerTest.php | 20 - .../controllers/UserControllerTest.php | 20 - .../tests/application/models/ShowTest.php | 76 + .../files/cc_show_insertIntoAssertion.xml | 0 .../application/models/files/cc_show_seed.xml | 0 .../tests/library/Zend/Application.php | 417 ++++++ .../Zend/Test/PHPUnit/Constraint/DomQuery.php | 425 ++++++ .../Test/PHPUnit/Constraint/Exception.php | 38 + .../Zend/Test/PHPUnit/Constraint/Redirect.php | 282 ++++ .../PHPUnit/Constraint/ResponseHeader.php | 400 ++++++ .../Zend/Test/PHPUnit/ControllerTestCase.php | 1217 +++++++++++++++++ .../Zend/Test/PHPUnit/DatabaseTestCase.php | 151 ++ .../Zend/Test/PHPUnit/Db/Connection.php | 149 ++ .../Zend/Test/PHPUnit/Db/DataSet/DbRowset.php | 78 ++ .../Zend/Test/PHPUnit/Db/DataSet/DbTable.php | 125 ++ .../PHPUnit/Db/DataSet/DbTableDataSet.php | 103 ++ .../Test/PHPUnit/Db/DataSet/QueryDataSet.php | 90 ++ .../Test/PHPUnit/Db/DataSet/QueryTable.php | 91 ++ .../Zend/Test/PHPUnit/Db/Exception.php | 40 + .../Zend/Test/PHPUnit/Db/Metadata/Generic.php | 167 +++ .../Test/PHPUnit/Db/Operation/DeleteAll.php | 81 ++ .../Zend/Test/PHPUnit/Db/Operation/Insert.php | 104 ++ .../Test/PHPUnit/Db/Operation/Truncate.php | 130 ++ .../Zend/Test/PHPUnit/Db/SimpleTester.php | 95 ++ airtime_mvc/tests/phpunit.xml | 23 +- 40 files changed, 4301 insertions(+), 303 deletions(-) delete mode 100644 airtime_mvc/tests/application/controllers/ApiControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/DashboardControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/FormsControllerControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/LibraryControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/LoginControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/NowplayingControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/PlaylistControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/PluploadControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/PreferenceControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/RecorderControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/ScheduleControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/SearchControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/SidePlaylistControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/SideplaylistControllerTest.php delete mode 100644 airtime_mvc/tests/application/controllers/UserControllerTest.php create mode 100644 airtime_mvc/tests/application/models/ShowTest.php create mode 100644 airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml create mode 100644 airtime_mvc/tests/application/models/files/cc_show_seed.xml create mode 100644 airtime_mvc/tests/library/Zend/Application.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Redirect.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Metadata/Generic.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php create mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php diff --git a/airtime_mvc/application/services/ShowService.php b/airtime_mvc/application/services/ShowService.php index 183af4723..d23eb2066 100644 --- a/airtime_mvc/application/services/ShowService.php +++ b/airtime_mvc/application/services/ShowService.php @@ -1379,8 +1379,9 @@ SQL; * @param $ccShow * @param $showData */ - private function setCcShow($showData) + public function setCcShow($showData) { + Logging::info($showData); if (!$this->isUpdate) { $ccShow = new CcShow(); } else { diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index e69de29bb..0db02c69f 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -0,0 +1,19 @@ +bootstrap = array($this, 'appBootstrap'); + parent::setUp(); + } + + public function appBootstrap() + { + $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH .'/configs/application.ini'); + $this->application->bootstrap(); + } + + public function getConnection() + { + if ($this->_connectionMock == null) { + $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production'); + $connection = Zend_Db::factory($config->db); + + $this->_connectionMock = $this->createZendDbConnection( + $connection, + 'airtimeunittests' + ); + Zend_Db_Table_Abstract::setDefaultAdapter($connection); + } + return $this->_connectionMock; + } + + /* Defines how the initial state of the database should look before each test is executed + * Called once during setUp() and gets recreated for each new test + */ + public function getDataSet() + { + return $this->createXmlDataSet( + dirname(__FILE__) . '/files/cc_show_seed.xml' + ); + } + + public function testCcShowInsertedIntoDatabase() + { + $showService = new Application_Service_ShowService(); + + $data = array( + "add_show_id" => -1, + "add_show_name" => "test show", + "add_show_description" => null, + "add_show_url" => null, + "add_show_genre" => null, + "add_show_color" => "ffffff", + "add_show_background_color" => "364492", + "cb_airtime_auth" => 0, + "cb_custom_auth" => 0, + "custom_username" => null, + "custom_password" => null, + "add_show_linked" => 0 + ); + + $showService->setCcShow($data); + + $ds = new Zend_Test_PHPUnit_Db_DataSet_QueryDataSet( + $this->getConnection() + ); + $ds->addTable('cc_show', 'select * from cc_show'); + + $this->assertDataSetsEqual( + $this->createXmlDataSet(dirname(__FILE__)."/files/cc_show_insertIntoAssertion.xml"), + $ds + ); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml b/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml new file mode 100644 index 000000000..e69de29bb diff --git a/airtime_mvc/tests/application/models/files/cc_show_seed.xml b/airtime_mvc/tests/application/models/files/cc_show_seed.xml new file mode 100644 index 000000000..e69de29bb diff --git a/airtime_mvc/tests/library/Zend/Application.php b/airtime_mvc/tests/library/Zend/Application.php new file mode 100644 index 000000000..ecc18c642 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Application.php @@ -0,0 +1,417 @@ +_environment = (string) $environment; + + require_once 'Zend/Loader/Autoloader.php'; + $this->_autoloader = Zend_Loader_Autoloader::getInstance(); + + if (null !== $options) { + if (is_string($options)) { + $options = $this->_loadConfig($options); + } elseif ($options instanceof Zend_Config) { + $options = $options->toArray(); + } elseif (!is_array($options)) { + throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array'); + } + + $this->setOptions($options); + } + } + + /** + * Retrieve current environment + * + * @return string + */ + public function getEnvironment() + { + return $this->_environment; + } + + /** + * Retrieve autoloader instance + * + * @return Zend_Loader_Autoloader + */ + public function getAutoloader() + { + return $this->_autoloader; + } + + /** + * Set application options + * + * @param array $options + * @throws Zend_Application_Exception When no bootstrap path is provided + * @throws Zend_Application_Exception When invalid bootstrap information are provided + * @return Zend_Application + */ + public function setOptions(array $options) + { + if (!empty($options['config'])) { + if (is_array($options['config'])) { + $_options = array(); + foreach ($options['config'] as $tmp) { + $_options = $this->mergeOptions($_options, $this->_loadConfig($tmp)); + } + $options = $this->mergeOptions($_options, $options); + } else { + $options = $this->mergeOptions($this->_loadConfig($options['config']), $options); + } + } + + $this->_options = $options; + + $options = array_change_key_case($options, CASE_LOWER); + + $this->_optionKeys = array_keys($options); + + if (!empty($options['phpsettings'])) { + $this->setPhpSettings($options['phpsettings']); + } + + if (!empty($options['includepaths'])) { + $this->setIncludePaths($options['includepaths']); + } + + if (!empty($options['autoloadernamespaces'])) { + $this->setAutoloaderNamespaces($options['autoloadernamespaces']); + } + + if (!empty($options['autoloaderzfpath'])) { + $autoloader = $this->getAutoloader(); + if (method_exists($autoloader, 'setZfPath')) { + $zfPath = $options['autoloaderzfpath']; + $zfVersion = !empty($options['autoloaderzfversion']) + ? $options['autoloaderzfversion'] + : 'latest'; + $autoloader->setZfPath($zfPath, $zfVersion); + } + } + + if (!empty($options['bootstrap'])) { + $bootstrap = $options['bootstrap']; + + if (is_string($bootstrap)) { + $this->setBootstrap($bootstrap); + } elseif (is_array($bootstrap)) { + if (empty($bootstrap['path'])) { + throw new Zend_Application_Exception('No bootstrap path provided'); + } + + $path = $bootstrap['path']; + $class = null; + + if (!empty($bootstrap['class'])) { + $class = $bootstrap['class']; + } + + $this->setBootstrap($path, $class); + } else { + throw new Zend_Application_Exception('Invalid bootstrap information provided'); + } + } + + return $this; + } + + /** + * Retrieve application options (for caching) + * + * @return array + */ + public function getOptions() + { + return $this->_options; + } + + /** + * Is an option present? + * + * @param string $key + * @return bool + */ + public function hasOption($key) + { + return in_array(strtolower($key), $this->_optionKeys); + } + + /** + * Retrieve a single option + * + * @param string $key + * @return mixed + */ + public function getOption($key) + { + if ($this->hasOption($key)) { + $options = $this->getOptions(); + $options = array_change_key_case($options, CASE_LOWER); + return $options[strtolower($key)]; + } + return null; + } + + /** + * Merge options recursively + * + * @param array $array1 + * @param mixed $array2 + * @return array + */ + public function mergeOptions(array $array1, $array2 = null) + { + if (is_array($array2)) { + foreach ($array2 as $key => $val) { + if (is_array($array2[$key])) { + $array1[$key] = (array_key_exists($key, $array1) && is_array($array1[$key])) + ? $this->mergeOptions($array1[$key], $array2[$key]) + : $array2[$key]; + } else { + $array1[$key] = $val; + } + } + } + return $array1; + } + + /** + * Set PHP configuration settings + * + * @param array $settings + * @param string $prefix Key prefix to prepend to array values (used to map . separated INI values) + * @return Zend_Application + */ + public function setPhpSettings(array $settings, $prefix = '') + { + foreach ($settings as $key => $value) { + $key = empty($prefix) ? $key : $prefix . $key; + if (is_scalar($value)) { + ini_set($key, $value); + } elseif (is_array($value)) { + $this->setPhpSettings($value, $key . '.'); + } + } + + return $this; + } + + /** + * Set include path + * + * @param array $paths + * @return Zend_Application + */ + public function setIncludePaths(array $paths) + { + $path = implode(PATH_SEPARATOR, $paths); + set_include_path($path . PATH_SEPARATOR . get_include_path()); + return $this; + } + + /** + * Set autoloader namespaces + * + * @param array $namespaces + * @return Zend_Application + */ + public function setAutoloaderNamespaces(array $namespaces) + { + $autoloader = $this->getAutoloader(); + + foreach ($namespaces as $namespace) { + $autoloader->registerNamespace($namespace); + } + + return $this; + } + + /** + * Set bootstrap path/class + * + * @param string $path + * @param string $class + * @return Zend_Application + */ + public function setBootstrap($path, $class = null) + { + // setOptions() can potentially send a null value; specify default + // here + if (null === $class) { + $class = 'Bootstrap'; + } + + if (!class_exists($class, false)) { + require_once $path; + if (!class_exists($class, false)) { + throw new Zend_Application_Exception('Bootstrap class not found'); + } + } + $this->_bootstrap = new $class($this); + + if (!$this->_bootstrap instanceof Zend_Application_Bootstrap_Bootstrapper) { + throw new Zend_Application_Exception('Bootstrap class does not implement Zend_Application_Bootstrap_Bootstrapper'); + } + + return $this; + } + + /** + * Get bootstrap object + * + * @return Zend_Application_Bootstrap_BootstrapAbstract + */ + public function getBootstrap() + { + if (null === $this->_bootstrap) { + $this->_bootstrap = new Zend_Application_Bootstrap_Bootstrap($this); + } + return $this->_bootstrap; + } + + /** + * Bootstrap application + * + * @param null|string|array $resource + * @return Zend_Application + */ + public function bootstrap($resource = null) + { + $this->getBootstrap()->bootstrap($resource); + return $this; + } + + /** + * Run the application + * + * @return void + */ + public function run() + { + $this->getBootstrap()->run(); + } + + /** + * Load configuration file of options + * + * @param string $file + * @throws Zend_Application_Exception When invalid configuration file is provided + * @return array + */ + protected function _loadConfig($file) + { + $environment = $this->getEnvironment(); + $suffix = pathinfo($file, PATHINFO_EXTENSION); + $suffix = ($suffix === 'dist') + ? pathinfo(basename($file, ".$suffix"), PATHINFO_EXTENSION) + : $suffix; + + switch (strtolower($suffix)) { + case 'ini': + $config = new Zend_Config_Ini($file, $environment); + break; + + case 'xml': + $config = new Zend_Config_Xml($file, $environment); + break; + + case 'json': + $config = new Zend_Config_Json($file, $environment); + break; + + case 'yaml': + case 'yml': + $config = new Zend_Config_Yaml($file, $environment); + break; + + case 'php': + case 'inc': + $config = include $file; + if (!is_array($config)) { + throw new Zend_Application_Exception('Invalid configuration file provided; PHP file does not return array value'); + } + return $config; + break; + + default: + throw new Zend_Application_Exception('Invalid configuration file provided; unknown config type'); + } + + return $config->toArray(); + } +} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php new file mode 100644 index 000000000..042fec863 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php @@ -0,0 +1,425 @@ +_path = $path; + } + + /** + * Indicate negative match + * + * @param bool $flag + * @return void + */ + public function setNegate($flag = true) + { + $this->_negate = $flag; + } + + /** + * Whether or not path is a straight XPath expression + * + * @param bool $flag + * @return Zend_Test_PHPUnit_Constraint_DomQuery + */ + public function setUseXpath($flag = true) + { + $this->_useXpath = (bool) $flag; + return $this; + } + + /** + * Evaluate an object to see if it fits the constraints + * + * @param string $other String to examine + * @param null|string Assertion type + * @return bool + */ + public function evaluate($other, $assertType = null) + { + if (strstr($assertType, 'Not')) { + $this->setNegate(true); + $assertType = str_replace('Not', '', $assertType); + } + + if (strstr($assertType, 'Xpath')) { + $this->setUseXpath(true); + $assertType = str_replace('Xpath', 'Query', $assertType); + } + + if (!in_array($assertType, $this->_assertTypes)) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); + } + + $this->_assertType = $assertType; + + $method = $this->_useXpath ? 'queryXpath' : 'query'; + $domQuery = new Zend_Dom_Query($other); + $domQuery->registerXpathNamespaces($this->_xpathNamespaces); + $result = $domQuery->$method($this->_path); + $argv = func_get_args(); + $argc = func_num_args(); + + switch ($assertType) { + case self::ASSERT_CONTENT_CONTAINS: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No content provided against which to match'); + } + $this->_content = $content = $argv[2]; + return ($this->_negate) + ? $this->_notMatchContent($result, $content) + : $this->_matchContent($result, $content); + case self::ASSERT_CONTENT_REGEX: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No pattern provided against which to match'); + } + $this->_content = $content = $argv[2]; + return ($this->_negate) + ? $this->_notRegexContent($result, $content) + : $this->_regexContent($result, $content); + case self::ASSERT_CONTENT_COUNT: + case self::ASSERT_CONTENT_COUNT_MIN: + case self::ASSERT_CONTENT_COUNT_MAX: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No count provided against which to compare'); + } + $this->_content = $content = $argv[2]; + return $this->_countContent($result, $content, $assertType); + case self::ASSERT_QUERY: + default: + if ($this->_negate) { + return (0 == count($result)); + } else { + return (0 != count($result)); + } + } + } + + /** + * Report Failure + * + * @see PHPUnit_Framework_Constraint for implementation details + * @param mixed $other CSS selector path + * @param string $description + * @param bool $not + * @return void + * @throws PHPUnit_Framework_ExpectationFailedException + */ + public function fail($other, $description, $not = false) + { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + switch ($this->_assertType) { + case self::ASSERT_CONTENT_CONTAINS: + $failure = 'Failed asserting node denoted by %s CONTAINS content "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting node DENOTED BY %s DOES NOT CONTAIN content "%s"'; + } + $failure = sprintf($failure, $other, $this->_content); + break; + case self::ASSERT_CONTENT_REGEX: + $failure = 'Failed asserting node denoted by %s CONTAINS content MATCHING "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting node DENOTED BY %s DOES NOT CONTAIN content MATCHING "%s"'; + } + $failure = sprintf($failure, $other, $this->_content); + break; + case self::ASSERT_CONTENT_COUNT: + $failure = 'Failed asserting node DENOTED BY %s OCCURS EXACTLY %d times'; + if ($this->_negate) { + $failure = 'Failed asserting node DENOTED BY %s DOES NOT OCCUR EXACTLY %d times'; + } + $failure = sprintf($failure, $other, $this->_content); + break; + case self::ASSERT_CONTENT_COUNT_MIN: + $failure = 'Failed asserting node DENOTED BY %s OCCURS AT LEAST %d times'; + $failure = sprintf($failure, $other, $this->_content); + break; + case self::ASSERT_CONTENT_COUNT_MAX: + $failure = 'Failed asserting node DENOTED BY %s OCCURS AT MOST %d times'; + $failure = sprintf($failure, $other, $this->_content); + break; + case self::ASSERT_QUERY: + default: + $failure = 'Failed asserting node DENOTED BY %s EXISTS'; + if ($this->_negate) { + $failure = 'Failed asserting node DENOTED BY %s DOES NOT EXIST'; + } + $failure = sprintf($failure, $other); + break; + } + + if (!empty($description)) { + $failure = $description . "\n" . $failure; + } + + throw new Zend_Test_PHPUnit_Constraint_Exception($failure); + } + + /** + * Complete implementation + * + * @return string + */ + public function toString() + { + return ''; + } + + /** + * Register XPath namespaces + * + * @param array $xpathNamespaces + * @return void + */ + public function registerXpathNamespaces($xpathNamespaces) + { + $this->_xpathNamespaces = $xpathNamespaces; + } + + /** + * Check to see if content is matched in selected nodes + * + * @param Zend_Dom_Query_Result $result + * @param string $match Content to match + * @return bool + */ + protected function _matchContent($result, $match) + { + $match = (string) $match; + + if (0 == count($result)) { + return false; + } + + foreach ($result as $node) { + $content = $this->_getNodeContent($node); + if (strstr($content, $match)) { + return true; + } + } + + return false; + } + + /** + * Check to see if content is NOT matched in selected nodes + * + * @param Zend_Dom_Query_Result $result + * @param string $match + * @return bool + */ + protected function _notMatchContent($result, $match) + { + if (0 == count($result)) { + return true; + } + + foreach ($result as $node) { + $content = $this->_getNodeContent($node); + if (strstr($content, $match)) { + return false; + } + } + + return true; + } + + /** + * Check to see if content is matched by regex in selected nodes + * + * @param Zend_Dom_Query_Result $result + * @param string $pattern + * @return bool + */ + protected function _regexContent($result, $pattern) + { + if (0 == count($result)) { + return false; + } + + foreach ($result as $node) { + $content = $this->_getNodeContent($node); + if (preg_match($pattern, $content)) { + return true; + } + } + + return false; + } + + /** + * Check to see if content is NOT matched by regex in selected nodes + * + * @param Zend_Dom_Query_Result $result + * @param string $pattern + * @return bool + */ + protected function _notRegexContent($result, $pattern) + { + if (0 == count($result)) { + return true; + } + + foreach ($result as $node) { + $content = $this->_getNodeContent($node); + if (preg_match($pattern, $content)) { + return false; + } + } + + return true; + } + + /** + * Determine if content count matches criteria + * + * @param Zend_Dom_Query_Result $result + * @param int $test Value against which to test + * @param string $type assertion type + * @return boolean + */ + protected function _countContent($result, $test, $type) + { + $count = count($result); + + switch ($type) { + case self::ASSERT_CONTENT_COUNT: + return ($this->_negate) + ? ($test != $count) + : ($test == $count); + case self::ASSERT_CONTENT_COUNT_MIN: + return ($count >= $test); + case self::ASSERT_CONTENT_COUNT_MAX: + return ($count <= $test); + default: + return false; + } + } + + /** + * Get node content, minus node markup tags + * + * @param DOMNode $node + * @return string + */ + protected function _getNodeContent(DOMNode $node) + { + if ($node instanceof DOMAttr) { + return $node->value; + } else { + $doc = $node->ownerDocument; + $content = $doc->saveXML($node); + $tag = $node->nodeName; + $regex = '|]*>|'; + return preg_replace($regex, '', $content); + } + } +} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php new file mode 100644 index 000000000..794f0812e --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php @@ -0,0 +1,38 @@ +_negate = $flag; + } + + /** + * Evaluate an object to see if it fits the constraints + * + * @param string $other String to examine + * @param null|string Assertion type + * @return bool + */ + public function evaluate($other, $assertType = null) + { + if (!$other instanceof Zend_Controller_Response_Abstract) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('Redirect constraint assertions require a response object'); + } + + if (strstr($assertType, 'Not')) { + $this->setNegate(true); + $assertType = str_replace('Not', '', $assertType); + } + + if (!in_array($assertType, $this->_assertTypes)) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); + } + + $this->_assertType = $assertType; + + $response = $other; + $argv = func_get_args(); + $argc = func_num_args(); + + switch ($assertType) { + case self::ASSERT_REDIRECT_TO: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No redirect URL provided against which to match'); + } + $this->_match = $match = $argv[2]; + return ($this->_negate) + ? $this->_notMatch($response, $match) + : $this->_match($response, $match); + case self::ASSERT_REDIRECT_REGEX: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No pattern provided against which to match redirect'); + } + $this->_match = $match = $argv[2]; + return ($this->_negate) + ? $this->_notRegex($response, $match) + : $this->_regex($response, $match); + case self::ASSERT_REDIRECT: + default: + return ($this->_negate) ? !$response->isRedirect() : $response->isRedirect(); + } + } + + /** + * Report Failure + * + * @see PHPUnit_Framework_Constraint for implementation details + * @param mixed $other + * @param string $description Additional message to display + * @param bool $not + * @return void + * @throws PHPUnit_Framework_ExpectationFailedException + */ + public function fail($other, $description, $not = false) + { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + switch ($this->_assertType) { + case self::ASSERT_REDIRECT_TO: + $failure = 'Failed asserting response redirects to "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting response DOES NOT redirect to "%s"'; + } + $failure = sprintf($failure, $this->_match); + break; + case self::ASSERT_REDIRECT_REGEX: + $failure = 'Failed asserting response redirects to URL MATCHING "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting response DOES NOT redirect to URL MATCHING "%s"'; + } + $failure = sprintf($failure, $this->_match); + break; + case self::ASSERT_REDIRECT: + default: + $failure = 'Failed asserting response is a redirect'; + if ($this->_negate) { + $failure = 'Failed asserting response is NOT a redirect'; + } + break; + } + + if (!empty($description)) { + $failure = $description . "\n" . $failure; + } + + throw new Zend_Test_PHPUnit_Constraint_Exception($failure); + } + + /** + * Complete implementation + * + * @return string + */ + public function toString() + { + return ''; + } + + /** + * Check to see if content is matched in selected nodes + * + * @param Zend_Controller_Response_HttpTestCase $response + * @param string $match Content to match + * @return bool + */ + protected function _match($response, $match) + { + if (!$response->isRedirect()) { + return false; + } + + $headers = $response->sendHeaders(); + $redirect = $headers['location']; + $redirect = str_replace('Location: ', '', $redirect); + + return ($redirect == $match); + } + + /** + * Check to see if content is NOT matched in selected nodes + * + * @param Zend_Controller_Response_HttpTestCase $response + * @param string $match + * @return bool + */ + protected function _notMatch($response, $match) + { + if (!$response->isRedirect()) { + return true; + } + + $headers = $response->sendHeaders(); + $redirect = $headers['location']; + $redirect = str_replace('Location: ', '', $redirect); + + return ($redirect != $match); + } + + /** + * Check to see if content is matched by regex in selected nodes + * + * @param Zend_Controller_Response_HttpTestCase $response + * @param string $pattern + * @return bool + */ + protected function _regex($response, $pattern) + { + if (!$response->isRedirect()) { + return false; + } + + $headers = $response->sendHeaders(); + $redirect = $headers['location']; + $redirect = str_replace('Location: ', '', $redirect); + + return preg_match($pattern, $redirect); + } + + /** + * Check to see if content is NOT matched by regex in selected nodes + * + * @param Zend_Controller_Response_HttpTestCase $response + * @param string $pattern + * @return bool + */ + protected function _notRegex($response, $pattern) + { + if (!$response->isRedirect()) { + return true; + } + + $headers = $response->sendHeaders(); + $redirect = $headers['location']; + $redirect = str_replace('Location: ', '', $redirect); + + return !preg_match($pattern, $redirect); + } +} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php new file mode 100644 index 000000000..a609f6582 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php @@ -0,0 +1,400 @@ +_negate = $flag; + } + + /** + * Evaluate an object to see if it fits the constraints + * + * @param Zend_Controller_Response_Abstract $other String to examine + * @param null|string Assertion type + * @return bool + */ + public function evaluate($other, $assertType = null) + { + if (!$other instanceof Zend_Controller_Response_Abstract) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('Header constraint assertions require a response object'); + } + + if (strstr($assertType, 'Not')) { + $this->setNegate(true); + $assertType = str_replace('Not', '', $assertType); + } + + if (!in_array($assertType, $this->_assertTypes)) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); + } + + $this->_assertType = $assertType; + + $response = $other; + $argv = func_get_args(); + $argc = func_num_args(); + + switch ($assertType) { + case self::ASSERT_RESPONSE_CODE: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No response code provided against which to match'); + } + $this->_code = $code = $argv[2]; + return ($this->_negate) + ? $this->_notCode($response, $code) + : $this->_code($response, $code); + case self::ASSERT_HEADER: + if (3 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('No header provided against which to match'); + } + $this->_header = $header = $argv[2]; + return ($this->_negate) + ? $this->_notHeader($response, $header) + : $this->_header($response, $header); + case self::ASSERT_HEADER_CONTAINS: + if (4 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('Both a header name and content to match are required for ' . __FUNCTION__); + } + $this->_header = $header = $argv[2]; + $this->_match = $match = $argv[3]; + return ($this->_negate) + ? $this->_notHeaderContains($response, $header, $match) + : $this->_headerContains($response, $header, $match); + case self::ASSERT_HEADER_REGEX: + if (4 > $argc) { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('Both a header name and content to match are required for ' . __FUNCTION__); + } + $this->_header = $header = $argv[2]; + $this->_match = $match = $argv[3]; + return ($this->_negate) + ? $this->_notHeaderRegex($response, $header, $match) + : $this->_headerRegex($response, $header, $match); + default: + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + throw new Zend_Test_PHPUnit_Constraint_Exception('Invalid assertion type ' . __FUNCTION__); + } + } + + /** + * Report Failure + * + * @see PHPUnit_Framework_Constraint for implementation details + * @param mixed $other + * @param string $description Additional message to display + * @param bool $not + * @return void + * @throws PHPUnit_Framework_ExpectationFailedException + */ + public function fail($other, $description, $not = false) + { + require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; + switch ($this->_assertType) { + case self::ASSERT_RESPONSE_CODE: + $failure = 'Failed asserting response code "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting response code IS NOT "%s"'; + } + $failure = sprintf($failure, $this->_code); + break; + case self::ASSERT_HEADER: + $failure = 'Failed asserting response header "%s" found'; + if ($this->_negate) { + $failure = 'Failed asserting response response header "%s" WAS NOT found'; + } + $failure = sprintf($failure, $this->_header); + break; + case self::ASSERT_HEADER_CONTAINS: + $failure = 'Failed asserting response header "%s" exists and contains "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting response header "%s" DOES NOT CONTAIN "%s"'; + } + $failure = sprintf($failure, $this->_header, $this->_match); + break; + case self::ASSERT_HEADER_REGEX: + $failure = 'Failed asserting response header "%s" exists and matches regex "%s"'; + if ($this->_negate) { + $failure = 'Failed asserting response header "%s" DOES NOT MATCH regex "%s"'; + } + $failure = sprintf($failure, $this->_header, $this->_match); + break; + default: + throw new Zend_Test_PHPUnit_Constraint_Exception('Invalid assertion type ' . __FUNCTION__); + } + + if (!empty($description)) { + $failure = $description . "\n" . $failure; + } + + throw new Zend_Test_PHPUnit_Constraint_Exception($failure); + } + + /** + * Complete implementation + * + * @return string + */ + public function toString() + { + return ''; + } + + /** + * Compare response code for positive match + * + * @param Zend_Controller_Response_Abstract $response + * @param int $code + * @return bool + */ + protected function _code(Zend_Controller_Response_Abstract $response, $code) + { + $test = $this->_getCode($response); + return ($test == $code); + } + + /** + * Compare response code for negative match + * + * @param Zend_Controller_Response_Abstract $response + * @param int $code + * @return bool + */ + protected function _notCode(Zend_Controller_Response_Abstract $response, $code) + { + $test = $this->_getCode($response); + return ($test != $code); + } + + /** + * Retrieve response code + * + * @param Zend_Controller_Response_Abstract $response + * @return int + */ + protected function _getCode(Zend_Controller_Response_Abstract $response) + { + $test = $response->getHttpResponseCode(); + if (null === $test) { + $test = 200; + } + return $test; + } + + /** + * Positive check for response header presence + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @return bool + */ + protected function _header(Zend_Controller_Response_Abstract $response, $header) + { + return (null !== $this->_getHeader($response, $header)); + } + + /** + * Negative check for response header presence + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @return bool + */ + protected function _notHeader(Zend_Controller_Response_Abstract $response, $header) + { + return (null === $this->_getHeader($response, $header)); + } + + /** + * Retrieve response header + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @return string|null + */ + protected function _getHeader(Zend_Controller_Response_Abstract $response, $header) + { + $headers = $response->sendHeaders(); + $header = strtolower($header); + if (array_key_exists($header, $headers)) { + return $headers[$header]; + } + return null; + } + + /** + * Positive check for header contents matching pattern + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @param string $match + * @return bool + */ + protected function _headerContains(Zend_Controller_Response_Abstract $response, $header, $match) + { + if (null === ($fullHeader = $this->_getHeader($response, $header))) { + return false; + } + + $contents = str_replace($header . ': ', '', $fullHeader); + + return (strstr($contents, $match)); + } + + /** + * Negative check for header contents matching pattern + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @param string $match + * @return bool + */ + protected function _notHeaderContains(Zend_Controller_Response_Abstract $response, $header, $match) + { + if (null === ($fullHeader = $this->_getHeader($response, $header))) { + return true; + } + + $contents = str_replace($header . ': ', '', $fullHeader); + + return (!strstr($contents, $match)); + } + + /** + * Positive check for header contents matching regex + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @param string $pattern + * @return bool + */ + protected function _headerRegex(Zend_Controller_Response_Abstract $response, $header, $pattern) + { + if (null === ($fullHeader = $this->_getHeader($response, $header))) { + return false; + } + + $contents = str_replace($header . ': ', '', $fullHeader); + + return preg_match($pattern, $contents); + } + + /** + * Negative check for header contents matching regex + * + * @param Zend_Controller_Response_Abstract $response + * @param string $header + * @param string $pattern + * @return bool + */ + protected function _notHeaderRegex(Zend_Controller_Response_Abstract $response, $header, $pattern) + { + if (null === ($fullHeader = $this->_getHeader($response, $header))) { + return true; + } + + $contents = str_replace($header . ': ', '', $fullHeader); + + return !preg_match($pattern, $contents); + } +} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php new file mode 100644 index 000000000..43ad74ad3 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php @@ -0,0 +1,1217 @@ +=')) ? 'PHPUnit/Autoload.php' : 'PHPUnit/Framework.php'; + +/** @see Zend_Controller_Front */ +require_once 'Zend/Controller/Front.php'; + +/** @see Zend_Controller_Action_HelperBroker */ +require_once 'Zend/Controller/Action/HelperBroker.php'; + +/** @see Zend_Layout */ +require_once 'Zend/Layout.php'; + +/** @see Zend_Session */ +require_once 'Zend/Session.php'; + +/** @see Zend_Registry */ +require_once 'Zend/Registry.php'; + +/** + * Functional testing scaffold for MVC applications + * + * @uses PHPUnit_Framework_TestCase + * @category Zend + * @package Zend_Test + * @subpackage PHPUnit + * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +abstract class Zend_Test_PHPUnit_ControllerTestCase extends PHPUnit_Framework_TestCase +{ + /** + * @var mixed Bootstrap file path or callback + */ + public $bootstrap; + + /** + * @var Zend_Controller_Front + */ + protected $_frontController; + + /** + * @var Zend_Dom_Query + */ + protected $_query; + + /** + * @var Zend_Controller_Request_Abstract + */ + protected $_request; + + /** + * @var Zend_Controller_Response_Abstract + */ + protected $_response; + + /** + * XPath namespaces + * @var array + */ + protected $_xpathNamespaces = array(); + + /** + * Overloading: prevent overloading to special properties + * + * @param string $name + * @param mixed $value + * @return void + */ + public function __set($name, $value) + { + if (in_array($name, array('request', 'response', 'frontController'))) { + require_once 'Zend/Exception.php'; + throw new Zend_Exception(sprintf('Setting %s object manually is not allowed', $name)); + } + $this->$name = $value; + } + + /** + * Overloading for common properties + * + * Provides overloading for request, response, and frontController objects. + * + * @param mixed $name + * @return void + */ + public function __get($name) + { + switch ($name) { + case 'request': + return $this->getRequest(); + case 'response': + return $this->getResponse(); + case 'frontController': + return $this->getFrontController(); + } + + return null; + } + + /** + * Set up MVC app + * + * Calls {@link bootstrap()} by default + * + * @return void + */ + protected function setUp() + { + $this->bootstrap(); + } + + /** + * Bootstrap the front controller + * + * Resets the front controller, and then bootstraps it. + * + * If {@link $bootstrap} is a callback, executes it; if it is a file, it include's + * it. When done, sets the test case request and response objects into the + * front controller. + * + * @return void + */ + final public function bootstrap() + { + $this->reset(); + if (null !== $this->bootstrap) { + if ($this->bootstrap instanceof Zend_Application) { + $this->bootstrap->bootstrap(); + $this->_frontController = $this->bootstrap->getBootstrap()->getResource('frontcontroller'); + } elseif (is_callable($this->bootstrap)) { + call_user_func($this->bootstrap); + } elseif (is_string($this->bootstrap)) { + require_once 'Zend/Loader.php'; + if (Zend_Loader::isReadable($this->bootstrap)) { + include $this->bootstrap; + } + } + } + $this->frontController + ->setRequest($this->getRequest()) + ->setResponse($this->getResponse()); + } + + /** + * Dispatch the MVC + * + * If a URL is provided, sets it as the request URI in the request object. + * Then sets test case request and response objects in front controller, + * disables throwing exceptions, and disables returning the response. + * Finally, dispatches the front controller. + * + * @param string|null $url + * @return void + */ + public function dispatch($url = null) + { + // redirector should not exit + $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); + $redirector->setExit(false); + + // json helper should not exit + $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); + $json->suppressExit = true; + + $request = $this->getRequest(); + if (null !== $url) { + $request->setRequestUri($url); + } + $request->setPathInfo(null); + + $controller = $this->getFrontController(); + $this->frontController + ->setRequest($request) + ->setResponse($this->getResponse()) + ->throwExceptions(false) + ->returnResponse(false); + + if ($this->bootstrap instanceof Zend_Application) { + $this->bootstrap->run(); + } else { + $this->frontController->dispatch(); + } + } + + /** + * Reset MVC state + * + * Creates new request/response objects, resets the front controller + * instance, and resets the action helper broker. + * + * @todo Need to update Zend_Layout to add a resetInstance() method + * @return void + */ + public function reset() + { + $_SESSION = array(); + $_GET = array(); + $_POST = array(); + $_COOKIE = array(); + $this->resetRequest(); + $this->resetResponse(); + Zend_Layout::resetMvcInstance(); + Zend_Controller_Action_HelperBroker::resetHelpers(); + $this->frontController->resetInstance(); + Zend_Session::$_unitTestEnabled = true; + } + + /** + * Rest all view placeholders + * + * @return void + */ + protected function _resetPlaceholders() + { + $registry = Zend_Registry::getInstance(); + $remove = array(); + foreach ($registry as $key => $value) { + if (strstr($key, '_View_')) { + $remove[] = $key; + } + } + + foreach ($remove as $key) { + unset($registry[$key]); + } + } + + /** + * Reset the request object + * + * Useful for test cases that need to test multiple trips to the server. + * + * @return Zend_Test_PHPUnit_ControllerTestCase + */ + public function resetRequest() + { + if ($this->_request instanceof Zend_Controller_Request_HttpTestCase) { + $this->_request->clearQuery() + ->clearPost(); + } + $this->_request = null; + return $this; + } + + /** + * Reset the response object + * + * Useful for test cases that need to test multiple trips to the server. + * + * @return Zend_Test_PHPUnit_ControllerTestCase + */ + public function resetResponse() + { + $this->_response = null; + $this->_resetPlaceholders(); + return $this; + } + + /** + * Assert against DOM selection + * + * @param string $path CSS selector path + * @param string $message + * @return void + */ + public function assertQuery($path, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection + * + * @param string $path CSS selector path + * @param string $message + * @return void + */ + public function assertNotQuery($path, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; node should contain content + * + * @param string $path CSS selector path + * @param string $match content that should be contained in matched nodes + * @param string $message + * @return void + */ + public function assertQueryContentContains($path, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $match)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; node should NOT contain content + * + * @param string $path CSS selector path + * @param string $match content that should NOT be contained in matched nodes + * @param string $message + * @return void + */ + public function assertNotQueryContentContains($path, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $match)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; node should match content + * + * @param string $path CSS selector path + * @param string $pattern Pattern that should be contained in matched nodes + * @param string $message + * @return void + */ + public function assertQueryContentRegex($path, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; node should NOT match content + * + * @param string $path CSS selector path + * @param string $pattern pattern that should NOT be contained in matched nodes + * @param string $message + * @return void + */ + public function assertNotQueryContentRegex($path, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; should contain exact number of nodes + * + * @param string $path CSS selector path + * @param string $count Number of nodes that should match + * @param string $message + * @return void + */ + public function assertQueryCount($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; should NOT contain exact number of nodes + * + * @param string $path CSS selector path + * @param string $count Number of nodes that should NOT match + * @param string $message + * @return void + */ + public function assertNotQueryCount($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; should contain at least this number of nodes + * + * @param string $path CSS selector path + * @param string $count Minimum number of nodes that should match + * @param string $message + * @return void + */ + public function assertQueryCountMin($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against DOM selection; should contain no more than this number of nodes + * + * @param string $path CSS selector path + * @param string $count Maximum number of nodes that should match + * @param string $message + * @return void + */ + public function assertQueryCountMax($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Register XPath namespaces + * + * @param array $xpathNamespaces + * @return void + */ + public function registerXpathNamespaces($xpathNamespaces) + { + $this->_xpathNamespaces = $xpathNamespaces; + } + + /** + * Assert against XPath selection + * + * @param string $path XPath path + * @param string $message + * @return void + */ + public function assertXpath($path, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection + * + * @param string $path XPath path + * @param string $message + * @return void + */ + public function assertNotXpath($path, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; node should contain content + * + * @param string $path XPath path + * @param string $match content that should be contained in matched nodes + * @param string $message + * @return void + */ + public function assertXpathContentContains($path, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $match)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; node should NOT contain content + * + * @param string $path XPath path + * @param string $match content that should NOT be contained in matched nodes + * @param string $message + * @return void + */ + public function assertNotXpathContentContains($path, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $match)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; node should match content + * + * @param string $path XPath path + * @param string $pattern Pattern that should be contained in matched nodes + * @param string $message + * @return void + */ + public function assertXpathContentRegex($path, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; node should NOT match content + * + * @param string $path XPath path + * @param string $pattern pattern that should NOT be contained in matched nodes + * @param string $message + * @return void + */ + public function assertNotXpathContentRegex($path, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; should contain exact number of nodes + * + * @param string $path XPath path + * @param string $count Number of nodes that should match + * @param string $message + * @return void + */ + public function assertXpathCount($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; should NOT contain exact number of nodes + * + * @param string $path XPath path + * @param string $count Number of nodes that should NOT match + * @param string $message + * @return void + */ + public function assertNotXpathCount($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; should contain at least this number of nodes + * + * @param string $path XPath path + * @param string $count Minimum number of nodes that should match + * @param string $message + * @return void + */ + public function assertXpathCountMin($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert against XPath selection; should contain no more than this number of nodes + * + * @param string $path XPath path + * @param string $count Maximum number of nodes that should match + * @param string $message + * @return void + */ + public function assertXpathCountMax($path, $count, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); + $constraint->registerXpathNamespaces($this->_xpathNamespaces); + $content = $this->response->outputBody(); + if (!$constraint->evaluate($content, __FUNCTION__, $count)) { + $constraint->fail($path, $message); + } + } + + /** + * Assert that response is a redirect + * + * @param string $message + * @return void + */ + public function assertRedirect($message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that response is NOT a redirect + * + * @param string $message + * @return void + */ + public function assertNotRedirect($message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that response redirects to given URL + * + * @param string $url + * @param string $message + * @return void + */ + public function assertRedirectTo($url, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $url)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that response does not redirect to given URL + * + * @param string $url + * @param string $message + * @return void + */ + public function assertNotRedirectTo($url, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $url)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that redirect location matches pattern + * + * @param string $pattern + * @param string $message + * @return void + */ + public function assertRedirectRegex($pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that redirect location does not match pattern + * + * @param string $pattern + * @param string $message + * @return void + */ + public function assertNotRedirectRegex($pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response code + * + * @param int $code + * @param string $message + * @return void + */ + public function assertResponseCode($code, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $code)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response code + * + * @param int $code + * @param string $message + * @return void + */ + public function assertNotResponseCode($code, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $constraint->setNegate(true); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $code)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header exists + * + * @param string $header + * @param string $message + * @return void + */ + public function assertHeader($header, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header does not exist + * + * @param string $header + * @param string $message + * @return void + */ + public function assertNotHeader($header, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $constraint->setNegate(true); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header exists and contains the given string + * + * @param string $header + * @param string $match + * @param string $message + * @return void + */ + public function assertHeaderContains($header, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header does not exist and/or does not contain the given string + * + * @param string $header + * @param string $match + * @param string $message + * @return void + */ + public function assertNotHeaderContains($header, $match, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $constraint->setNegate(true); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header exists and matches the given pattern + * + * @param string $header + * @param string $pattern + * @param string $message + * @return void + */ + public function assertHeaderRegex($header, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert response header does not exist and/or does not match the given regex + * + * @param string $header + * @param string $pattern + * @param string $message + * @return void + */ + public function assertNotHeaderRegex($header, $pattern, $message = '') + { + $this->_incrementAssertionCount(); + require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; + $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); + $constraint->setNegate(true); + $response = $this->response; + if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) { + $constraint->fail($response, $message); + } + } + + /** + * Assert that the last handled request used the given module + * + * @param string $module + * @param string $message + * @return void + */ + public function assertModule($module, $message = '') + { + $this->_incrementAssertionCount(); + if ($module != $this->request->getModuleName()) { + $msg = sprintf('Failed asserting last module used <"%s"> was "%s"', + $this->request->getModuleName(), + $module + ); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the last handled request did NOT use the given module + * + * @param string $module + * @param string $message + * @return void + */ + public function assertNotModule($module, $message = '') + { + $this->_incrementAssertionCount(); + if ($module == $this->request->getModuleName()) { + $msg = sprintf('Failed asserting last module used was NOT "%s"', $module); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the last handled request used the given controller + * + * @param string $controller + * @param string $message + * @return void + */ + public function assertController($controller, $message = '') + { + $this->_incrementAssertionCount(); + if ($controller != $this->request->getControllerName()) { + $msg = sprintf('Failed asserting last controller used <"%s"> was "%s"', + $this->request->getControllerName(), + $controller + ); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the last handled request did NOT use the given controller + * + * @param string $controller + * @param string $message + * @return void + */ + public function assertNotController($controller, $message = '') + { + $this->_incrementAssertionCount(); + if ($controller == $this->request->getControllerName()) { + $msg = sprintf('Failed asserting last controller used <"%s"> was NOT "%s"', + $this->request->getControllerName(), + $controller + ); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the last handled request used the given action + * + * @param string $action + * @param string $message + * @return void + */ + public function assertAction($action, $message = '') + { + $this->_incrementAssertionCount(); + if ($action != $this->request->getActionName()) { + $msg = sprintf('Failed asserting last action used <"%s"> was "%s"', $this->request->getActionName(), $action); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the last handled request did NOT use the given action + * + * @param string $action + * @param string $message + * @return void + */ + public function assertNotAction($action, $message = '') + { + $this->_incrementAssertionCount(); + if ($action == $this->request->getActionName()) { + $msg = sprintf('Failed asserting last action used <"%s"> was NOT "%s"', $this->request->getActionName(), $action); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the specified route was used + * + * @param string $route + * @param string $message + * @return void + */ + public function assertRoute($route, $message = '') + { + $this->_incrementAssertionCount(); + $router = $this->frontController->getRouter(); + if ($route != $router->getCurrentRouteName()) { + $msg = sprintf('Failed asserting matched route was "%s", actual route is %s', + $route, + $router->getCurrentRouteName() + ); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Assert that the route matched is NOT as specified + * + * @param string $route + * @param string $message + * @return void + */ + public function assertNotRoute($route, $message = '') + { + $this->_incrementAssertionCount(); + $router = $this->frontController->getRouter(); + if ($route == $router->getCurrentRouteName()) { + $msg = sprintf('Failed asserting route matched was NOT "%s"', $route); + if (!empty($message)) { + $msg = $message . "\n" . $msg; + } + $this->fail($msg); + } + } + + /** + * Retrieve front controller instance + * + * @return Zend_Controller_Front + */ + public function getFrontController() + { + if (null === $this->_frontController) { + $this->_frontController = Zend_Controller_Front::getInstance(); + } + return $this->_frontController; + } + + /** + * Retrieve test case request object + * + * @return Zend_Controller_Request_HttpTestCase + */ + public function getRequest() + { + if (null === $this->_request) { + require_once 'Zend/Controller/Request/HttpTestCase.php'; + $this->_request = new Zend_Controller_Request_HttpTestCase; + } + return $this->_request; + } + + /** + * Retrieve test case response object + * + * @return Zend_Controller_Response_HttpTestCase + */ + public function getResponse() + { + if (null === $this->_response) { + require_once 'Zend/Controller/Response/HttpTestCase.php'; + $this->_response = new Zend_Controller_Response_HttpTestCase; + } + return $this->_response; + } + + /** + * Retrieve DOM query object + * + * @return Zend_Dom_Query + */ + public function getQuery() + { + if (null === $this->_query) { + require_once 'Zend/Dom/Query.php'; + $this->_query = new Zend_Dom_Query; + } + return $this->_query; + } + + /** + * URL Helper + * + * @param array $urlOptions + * @param string $name + * @param bool $reset + * @param bool $encode + */ + public function url($urlOptions = array(), $name = null, $reset = false, $encode = true) + { + $frontController = $this->getFrontController(); + $router = $frontController->getRouter(); + if (!$router instanceof Zend_Controller_Router_Rewrite) { + throw new Exception('This url helper utility function only works when the router is of type Zend_Controller_Router_Rewrite'); + } + if (count($router->getRoutes()) == 0) { + $router->addDefaultRoutes(); + } + return $router->assemble($urlOptions, $name, $reset, $encode); + } + + public function urlizeOptions($urlOptions, $actionControllerModuleOnly = true) + { + $ccToDash = new Zend_Filter_Word_CamelCaseToDash(); + foreach ($urlOptions as $n => $v) { + if (in_array($n, array('action', 'controller', 'module'))) { + $urlOptions[$n] = $ccToDash->filter($v); + } + } + return $urlOptions; + } + + /** + * Increment assertion count + * + * @return void + */ + protected function _incrementAssertionCount() + { + $stack = debug_backtrace(); + foreach (debug_backtrace() as $step) { + if (isset($step['object']) + && $step['object'] instanceof PHPUnit_Framework_TestCase + ) { + if (version_compare(PHPUnit_Runner_Version::id(), '3.3.0', 'lt')) { + break; + } elseif (version_compare(PHPUnit_Runner_Version::id(), '3.3.3', 'lt')) { + $step['object']->incrementAssertionCounter(); + } else { + $step['object']->addToAssertionCount(1); + } + break; + } + } + } +} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php new file mode 100644 index 000000000..92b071d21 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php @@ -0,0 +1,151 @@ +getConnection()->getConnection(); + } + + /** + * Returns the database operation executed in test setup. + * + * @return PHPUnit_Extensions_Database_Operation_DatabaseOperation + */ + protected function getSetUpOperation() + { + return new PHPUnit_Extensions_Database_Operation_Composite(array( + new Zend_Test_PHPUnit_Db_Operation_Truncate(), + new Zend_Test_PHPUnit_Db_Operation_Insert(), + )); + } + + /** + * Returns the database operation executed in test cleanup. + * + * @return PHPUnit_Extensions_Database_Operation_DatabaseOperation + */ + protected function getTearDownOperation() + { + return PHPUnit_Extensions_Database_Operation_Factory::NONE(); + } + + /** + * Create a dataset based on multiple Zend_Db_Table instances + * + * @param array $tables + * @return Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet + */ + protected function createDbTableDataSet(array $tables=array()) + { + $dataSet = new Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet(); + foreach($tables AS $table) { + $dataSet->addTable($table); + } + return $dataSet; + } + + /** + * Create a table based on one Zend_Db_Table instance + * + * @param Zend_Db_Table_Abstract $table + * @param string $where + * @param string $order + * @param string $count + * @param string $offset + * @return Zend_Test_PHPUnit_Db_DataSet_DbTable + */ + protected function createDbTable(Zend_Db_Table_Abstract $table, $where=null, $order=null, $count=null, $offset=null) + { + return new Zend_Test_PHPUnit_Db_DataSet_DbTable($table, $where, $order, $count, $offset); + } + + /** + * Create a data table based on a Zend_Db_Table_Rowset instance + * + * @param Zend_Db_Table_Rowset_Abstract $rowset + * @param string + * @return Zend_Test_PHPUnit_Db_DataSet_DbRowset + */ + protected function createDbRowset(Zend_Db_Table_Rowset_Abstract $rowset, $tableName = null) + { + return new Zend_Test_PHPUnit_Db_DataSet_DbRowset($rowset, $tableName); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php new file mode 100644 index 000000000..d76a53645 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php @@ -0,0 +1,149 @@ +_connection = $db; + $this->_schema = $schema; + } + + /** + * Close this connection. + * + * @return void + */ + public function close() + { + $this->_connection->closeConnection(); + } + + /** + * Creates a table with the result of the specified SQL statement. + * + * @param string $resultName + * @param string $sql + * @return PHPUnit_Extensions_Database_DataSet_ITable + */ + public function createQueryTable($resultName, $sql) + { + return new Zend_Test_PHPUnit_Db_DataSet_QueryTable($resultName, $sql, $this); + } + + /** + * Returns a Zend_Db Connection + * + * @return Zend_Db_Adapter_Abstract + */ + public function getConnection() + { + return $this->_connection; + } + + /** + * Returns a database metadata object that can be used to retrieve table + * meta data from the database. + * + * @return PHPUnit_Extensions_Database_DB_IMetaData + */ + public function getMetaData() + { + if($this->_metaData === null) { + $this->_metaData = new Zend_Test_PHPUnit_Db_Metadata_Generic($this->getConnection(), $this->getSchema()); + } + return $this->_metaData; + } + + /** + * Returns the schema for the connection. + * + * @return string + */ + public function getSchema() + { + return $this->_schema; + } + + /** + * Returns the command used to truncate a table. + * + * @return string + */ + public function getTruncateCommand() + { + return "DELETE"; + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php new file mode 100644 index 000000000..eb51c0d7b --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php @@ -0,0 +1,78 @@ +getTable(); + if($table !== null) { + $tableName = $table->info('name'); + } else { + require_once "Zend/Test/PHPUnit/Db/Exception.php"; + throw new Zend_Test_PHPUnit_Db_Exception( + 'No table name was given to Rowset Table and table name cannot be infered from the table, '. + 'because the rowset is disconnected from database.' + ); + } + } + + $this->data = $rowset->toArray(); + + $columns = array(); + if(isset($this->data[0]) > 0) { + $columns = array_keys($this->data[0]); + } else if($rowset->getTable() != null) { + $columns = $rowset->getTable()->info('cols'); + } + + $this->tableName = $tableName; + $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($this->tableName, $columns); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php new file mode 100644 index 000000000..4346f741c --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php @@ -0,0 +1,125 @@ +tableName = $table->info('name'); + $this->_columns = $table->info('cols'); + + $this->_table = $table; + $this->_where = $where; + $this->_order = $order; + $this->_count = $count; + $this->_offset = $offset; + } + + /** + * Lazy load data via table fetchAll() method. + * + * @return void + */ + protected function loadData() + { + if ($this->data === null) { + $this->data = $this->_table->fetchAll( + $this->_where, $this->_order, $this->_count, $this->_offset + ); + if($this->data instanceof Zend_Db_Table_Rowset_Abstract) { + $this->data = $this->data->toArray(); + } + } + } + + /** + * Create Table Metadata object + */ + protected function createTableMetaData() + { + if ($this->tableMetaData === NULL) { + $this->loadData(); + $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($this->tableName, $this->_columns); + } + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php new file mode 100644 index 000000000..e660e3027 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php @@ -0,0 +1,103 @@ +info('name'); + $this->tables[$tableName] = new Zend_Test_PHPUnit_Db_DataSet_DbTable($table, $where, $order, $count, $offset); + } + + /** + * Creates an iterator over the tables in the data set. If $reverse is + * true a reverse iterator will be returned. + * + * @param bool $reverse + * @return PHPUnit_Extensions_Database_DB_TableIterator + */ + protected function createIterator($reverse = FALSE) + { + return new PHPUnit_Extensions_Database_DataSet_DefaultTableIterator($this->tables, $reverse); + } + + /** + * Returns a table object for the given table. + * + * @param string $tableName + * @return PHPUnit_Extensions_Database_DB_Table + */ + public function getTable($tableName) + { + if (!isset($this->tables[$tableName])) { + throw new InvalidArgumentException("$tableName is not a table in the current database."); + } + + return $this->tables[$tableName]; + } + + /** + * Returns a list of table names for the database + * + * @return Array + */ + public function getTableNames() + { + return array_keys($this->tables); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php new file mode 100644 index 000000000..8625b6e8e --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php @@ -0,0 +1,90 @@ +databaseConnection = $databaseConnection; + } + + /** + * Add a Table dataset representation by specifiying an arbitrary select query. + * + * By default a select * will be done on the given tablename. + * + * @param string $tableName + * @param string|Zend_Db_Select $query + */ + public function addTable($tableName, $query = NULL) + { + if ($query === NULL) { + $query = $this->databaseConnection->getConnection()->select(); + $query->from($tableName, Zend_Db_Select::SQL_WILDCARD); + } + + if($query instanceof Zend_Db_Select) { + $query = $query->__toString(); + } + + $this->tables[$tableName] = new Zend_Test_PHPUnit_Db_DataSet_QueryTable($tableName, $query, $this->databaseConnection); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php new file mode 100644 index 000000000..54b448283 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php @@ -0,0 +1,91 @@ +data === null) { + $stmt = $this->databaseConnection->getConnection()->query($this->query); + $this->data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC); + } + } + + /** + * Create Table Metadata + */ + protected function createTableMetaData() + { + if ($this->tableMetaData === NULL) + { + $this->loadData(); + $keys = array(); + if(count($this->data) > 0) { + $keys = array_keys($this->data[0]); + } + $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData( + $this->tableName, $keys + ); + } + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php new file mode 100644 index 000000000..714ed0446 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php @@ -0,0 +1,40 @@ +_connection = $db; + $this->_schema = $schema; + } + + /** + * List Tables + * + * @return array + */ + public function getTableNames() + { + return $this->_connection->listTables(); + } + + /** + * Get Table information + * + * @param string $tableName + * @return array + */ + protected function getTableDescription($tableName) + { + if(!isset($this->_tableMetadata[$tableName])) { + $this->_tableMetadata[$tableName] = $this->_connection->describeTable($tableName); + } + return $this->_tableMetadata[$tableName]; + } + + /** + * Returns an array containing the names of all the columns in the + * $tableName table, + * + * @param string $tableName + * @return array + */ + public function getTableColumns($tableName) + { + $tableMeta = $this->getTableDescription($tableName); + $columns = array_keys($tableMeta); + return $columns; + } + + /** + * Returns an array containing the names of all the primary key columns in + * the $tableName table. + * + * @param string $tableName + * @return array + */ + public function getTablePrimaryKeys($tableName) + { + $tableMeta = $this->getTableDescription($tableName); + + $primaryColumnNames = array(); + foreach($tableMeta AS $column) { + if($column['PRIMARY'] == true) { + $primaryColumnNames[] = $column['COLUMN_NAME']; + } + } + return $primaryColumnNames; + } + + /** + * Returns the name of the default schema. + * + * @return string + */ + public function getSchema() + { + return $this->_schema; + } + + /** + * Returns a quoted schema object. (table name, column name, etc) + * + * @param string $object + * @return string + */ + public function quoteSchemaObject($object) + { + return $this->_connection->quoteIdentifier($object); + } + + /** + * Returns true if the rdbms allows cascading + * + * @return bool + */ + public function allowsCascading() + { + return false; + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php new file mode 100644 index 000000000..2f162352d --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php @@ -0,0 +1,81 @@ +getTableMetaData()->getTableName(); + $connection->getConnection()->delete($tableName); + } catch (Exception $e) { + require_once "PHPUnit/Extensions/Database/Operation/Exception.php"; + throw new PHPUnit_Extensions_Database_Operation_Exception('DELETEALL', 'DELETE FROM '.$tableName.'', array(), $table, $e->getMessage()); + } + } + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php new file mode 100644 index 000000000..c9dec6fd1 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php @@ -0,0 +1,104 @@ +createDataSet(); + + $dsIterator = $dataSet->getIterator(); + + foreach($dsIterator as $table) { + $tableName = $table->getTableMetaData()->getTableName(); + + $db = $connection->getConnection(); + for($i = 0; $i < $table->getRowCount(); $i++) { + $values = $this->buildInsertValues($table, $i); + try { + $db->insert($tableName, $values); + } catch (Exception $e) { + throw new PHPUnit_Extensions_Database_Operation_Exception("INSERT", "INSERT INTO ".$tableName." [..]", $values, $table, $e->getMessage()); + } + } + } + } + + /** + * + * @param PHPUnit_Extensions_Database_DataSet_ITable $table + * @param int $rowNum + * @return array + */ + protected function buildInsertValues(PHPUnit_Extensions_Database_DataSet_ITable $table, $rowNum) + { + $values = array(); + foreach($table->getTableMetaData()->getColumns() as $columnName) { + $values[$columnName] = $table->getValue($rowNum, $columnName); + } + return $values; + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php new file mode 100644 index 000000000..3d2dffe8b --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php @@ -0,0 +1,130 @@ +getReverseIterator() AS $table) { + try { + $tableName = $table->getTableMetaData()->getTableName(); + $this->_truncate($connection->getConnection(), $tableName); + } catch (Exception $e) { + throw new PHPUnit_Extensions_Database_Operation_Exception('TRUNCATE', 'TRUNCATE '.$tableName.'', array(), $table, $e->getMessage()); + } + } + } + + /** + * Truncate a given table. + * + * @param Zend_Db_Adapter_Abstract $db + * @param string $tableName + * @return void + */ + protected function _truncate(Zend_Db_Adapter_Abstract $db, $tableName) + { + $tableName = $db->quoteIdentifier($tableName, true); + if($db instanceof Zend_Db_Adapter_Pdo_Sqlite) { + $db->query('DELETE FROM '.$tableName); + } else if($db instanceof Zend_Db_Adapter_Db2) { + /*if(strstr(PHP_OS, "WIN")) { + $file = tempnam(sys_get_temp_dir(), "zendtestdbibm_"); + file_put_contents($file, ""); + $db->query('IMPORT FROM '.$file.' OF DEL REPLACE INTO '.$tableName); + unlink($file); + } else { + $db->query('IMPORT FROM /dev/null OF DEL REPLACE INTO '.$tableName); + }*/ + require_once "Zend/Exception.php"; + throw Zend_Exception("IBM Db2 TRUNCATE not supported."); + } else if($this->_isMssqlOrOracle($db)) { + $db->query('TRUNCATE TABLE '.$tableName); + } else if($db instanceof Zend_Db_Adapter_Pdo_Pgsql) { + $db->query('TRUNCATE '.$tableName.' CASCADE'); + } else { + $db->query('TRUNCATE '.$tableName); + } + } + + /** + * Detect if an adapter is for Mssql or Oracle Databases. + * + * @param Zend_Db_Adapter_Abstract $db + * @return bool + */ + private function _isMssqlOrOracle($db) + { + return ( + $db instanceof Zend_Db_Adapter_Pdo_Mssql || + $db instanceof Zend_Db_Adapter_Sqlsrv || + $db instanceof Zend_Db_Adapter_Pdo_Oci || + $db instanceof Zend_Db_Adapter_Oracle + ); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php new file mode 100644 index 000000000..882599196 --- /dev/null +++ b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php @@ -0,0 +1,95 @@ +connection = $connection; + $this->setUpOperation = new PHPUnit_Extensions_Database_Operation_Composite(array( + new Zend_Test_PHPUnit_Db_Operation_Truncate(), + new Zend_Test_PHPUnit_Db_Operation_Insert(), + )); + $this->tearDownOperation = PHPUnit_Extensions_Database_Operation_Factory::NONE(); + } + + /** + * Set Up the database using the given Dataset and the SetUp strategy "Truncate, then Insert" + * + * @param PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet + */ + public function setUpDatabase(PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet) + { + $this->setDataSet($dataSet); + $this->onSetUp(); + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/phpunit.xml b/airtime_mvc/tests/phpunit.xml index 01ad1609e..9644cb9ce 100644 --- a/airtime_mvc/tests/phpunit.xml +++ b/airtime_mvc/tests/phpunit.xml @@ -1,2 +1,21 @@ - - + + + ./ + + + + + ../application/ + + ../application/ + ../application/Bootstrap.php + ../application/controllers/ErrorController.php + + + + + + + + + From 84c7e21bea9d45db40b35fbd65d9c11abb75319e Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 18 Dec 2013 16:05:31 -0500 Subject: [PATCH 02/22] CC-5651: Unit Test the Scheduler * Unit test bootstrapping work. * Added a README.txt for the unit testing environment --- airtime_mvc/tests/README.txt | 15 +++++++++++++++ airtime_mvc/tests/application/bootstrap.php | 21 ++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 airtime_mvc/tests/README.txt diff --git a/airtime_mvc/tests/README.txt b/airtime_mvc/tests/README.txt new file mode 100644 index 000000000..1672b89aa --- /dev/null +++ b/airtime_mvc/tests/README.txt @@ -0,0 +1,15 @@ +To get the Airtime unit tests running: +========================== + +1) Install PHPUnit + +wget https://phar.phpunit.de/phpunit.phar +chmod +x phpunit.phar +sudo mv phpunit.phar /usr/local/bin/phpunit + +2) Install the DbUnit extension + +sudo pear channel-discover pear.phpunit.de +sudo pear channel-discover pear.symfony.com +sudo pear install --alldeps phpunit/DbUnit + diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index 0db02c69f..d11b2e346 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -15,5 +15,24 @@ set_include_path(implode(PATH_SEPARATOR, array( get_include_path(), ))); +// Ensure library/ is on include_path +set_include_path(implode(PATH_SEPARATOR, array( + get_include_path(), + realpath(APPLICATION_PATH . '/../library') +))); + +set_include_path(APPLICATION_PATH . '/common' . PATH_SEPARATOR . get_include_path()); + +//Propel classes. +set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); + +//Controller plugins. +set_include_path(APPLICATION_PATH . '/controllers/plugins' . PATH_SEPARATOR . get_include_path()); + +//Zend framework +if (file_exists('/usr/share/php/libzend-framework-php')) { + set_include_path('/usr/share/php/libzend-framework-php' . PATH_SEPARATOR . get_include_path()); +} + require_once 'Zend/Application.php'; -#require_once 'DatabaseTestCase.php'; \ No newline at end of file +#require_once 'DatabaseTestCase.php'; From 6aaa2c83aae9e9b66552e0600e9c3bd18f533a6e Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 18 Dec 2013 16:07:01 -0500 Subject: [PATCH 03/22] CC-5651: Unit Test the Schedule Remove Zend library from tests folder --- .../tests/library/Zend/Application.php | 417 ------ .../Zend/Test/PHPUnit/Constraint/DomQuery.php | 425 ------ .../Test/PHPUnit/Constraint/Exception.php | 38 - .../Zend/Test/PHPUnit/Constraint/Redirect.php | 282 ---- .../PHPUnit/Constraint/ResponseHeader.php | 400 ------ .../Zend/Test/PHPUnit/ControllerTestCase.php | 1217 ----------------- .../Zend/Test/PHPUnit/DatabaseTestCase.php | 151 -- .../Zend/Test/PHPUnit/Db/Connection.php | 149 -- .../Zend/Test/PHPUnit/Db/DataSet/DbRowset.php | 78 -- .../Zend/Test/PHPUnit/Db/DataSet/DbTable.php | 125 -- .../PHPUnit/Db/DataSet/DbTableDataSet.php | 103 -- .../Test/PHPUnit/Db/DataSet/QueryDataSet.php | 90 -- .../Test/PHPUnit/Db/DataSet/QueryTable.php | 91 -- .../Zend/Test/PHPUnit/Db/Exception.php | 40 - .../Zend/Test/PHPUnit/Db/Metadata/Generic.php | 167 --- .../Test/PHPUnit/Db/Operation/DeleteAll.php | 81 -- .../Zend/Test/PHPUnit/Db/Operation/Insert.php | 104 -- .../Test/PHPUnit/Db/Operation/Truncate.php | 130 -- .../Zend/Test/PHPUnit/Db/SimpleTester.php | 95 -- 19 files changed, 4183 deletions(-) delete mode 100644 airtime_mvc/tests/library/Zend/Application.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Redirect.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Metadata/Generic.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php delete mode 100644 airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php diff --git a/airtime_mvc/tests/library/Zend/Application.php b/airtime_mvc/tests/library/Zend/Application.php deleted file mode 100644 index ecc18c642..000000000 --- a/airtime_mvc/tests/library/Zend/Application.php +++ /dev/null @@ -1,417 +0,0 @@ -_environment = (string) $environment; - - require_once 'Zend/Loader/Autoloader.php'; - $this->_autoloader = Zend_Loader_Autoloader::getInstance(); - - if (null !== $options) { - if (is_string($options)) { - $options = $this->_loadConfig($options); - } elseif ($options instanceof Zend_Config) { - $options = $options->toArray(); - } elseif (!is_array($options)) { - throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array'); - } - - $this->setOptions($options); - } - } - - /** - * Retrieve current environment - * - * @return string - */ - public function getEnvironment() - { - return $this->_environment; - } - - /** - * Retrieve autoloader instance - * - * @return Zend_Loader_Autoloader - */ - public function getAutoloader() - { - return $this->_autoloader; - } - - /** - * Set application options - * - * @param array $options - * @throws Zend_Application_Exception When no bootstrap path is provided - * @throws Zend_Application_Exception When invalid bootstrap information are provided - * @return Zend_Application - */ - public function setOptions(array $options) - { - if (!empty($options['config'])) { - if (is_array($options['config'])) { - $_options = array(); - foreach ($options['config'] as $tmp) { - $_options = $this->mergeOptions($_options, $this->_loadConfig($tmp)); - } - $options = $this->mergeOptions($_options, $options); - } else { - $options = $this->mergeOptions($this->_loadConfig($options['config']), $options); - } - } - - $this->_options = $options; - - $options = array_change_key_case($options, CASE_LOWER); - - $this->_optionKeys = array_keys($options); - - if (!empty($options['phpsettings'])) { - $this->setPhpSettings($options['phpsettings']); - } - - if (!empty($options['includepaths'])) { - $this->setIncludePaths($options['includepaths']); - } - - if (!empty($options['autoloadernamespaces'])) { - $this->setAutoloaderNamespaces($options['autoloadernamespaces']); - } - - if (!empty($options['autoloaderzfpath'])) { - $autoloader = $this->getAutoloader(); - if (method_exists($autoloader, 'setZfPath')) { - $zfPath = $options['autoloaderzfpath']; - $zfVersion = !empty($options['autoloaderzfversion']) - ? $options['autoloaderzfversion'] - : 'latest'; - $autoloader->setZfPath($zfPath, $zfVersion); - } - } - - if (!empty($options['bootstrap'])) { - $bootstrap = $options['bootstrap']; - - if (is_string($bootstrap)) { - $this->setBootstrap($bootstrap); - } elseif (is_array($bootstrap)) { - if (empty($bootstrap['path'])) { - throw new Zend_Application_Exception('No bootstrap path provided'); - } - - $path = $bootstrap['path']; - $class = null; - - if (!empty($bootstrap['class'])) { - $class = $bootstrap['class']; - } - - $this->setBootstrap($path, $class); - } else { - throw new Zend_Application_Exception('Invalid bootstrap information provided'); - } - } - - return $this; - } - - /** - * Retrieve application options (for caching) - * - * @return array - */ - public function getOptions() - { - return $this->_options; - } - - /** - * Is an option present? - * - * @param string $key - * @return bool - */ - public function hasOption($key) - { - return in_array(strtolower($key), $this->_optionKeys); - } - - /** - * Retrieve a single option - * - * @param string $key - * @return mixed - */ - public function getOption($key) - { - if ($this->hasOption($key)) { - $options = $this->getOptions(); - $options = array_change_key_case($options, CASE_LOWER); - return $options[strtolower($key)]; - } - return null; - } - - /** - * Merge options recursively - * - * @param array $array1 - * @param mixed $array2 - * @return array - */ - public function mergeOptions(array $array1, $array2 = null) - { - if (is_array($array2)) { - foreach ($array2 as $key => $val) { - if (is_array($array2[$key])) { - $array1[$key] = (array_key_exists($key, $array1) && is_array($array1[$key])) - ? $this->mergeOptions($array1[$key], $array2[$key]) - : $array2[$key]; - } else { - $array1[$key] = $val; - } - } - } - return $array1; - } - - /** - * Set PHP configuration settings - * - * @param array $settings - * @param string $prefix Key prefix to prepend to array values (used to map . separated INI values) - * @return Zend_Application - */ - public function setPhpSettings(array $settings, $prefix = '') - { - foreach ($settings as $key => $value) { - $key = empty($prefix) ? $key : $prefix . $key; - if (is_scalar($value)) { - ini_set($key, $value); - } elseif (is_array($value)) { - $this->setPhpSettings($value, $key . '.'); - } - } - - return $this; - } - - /** - * Set include path - * - * @param array $paths - * @return Zend_Application - */ - public function setIncludePaths(array $paths) - { - $path = implode(PATH_SEPARATOR, $paths); - set_include_path($path . PATH_SEPARATOR . get_include_path()); - return $this; - } - - /** - * Set autoloader namespaces - * - * @param array $namespaces - * @return Zend_Application - */ - public function setAutoloaderNamespaces(array $namespaces) - { - $autoloader = $this->getAutoloader(); - - foreach ($namespaces as $namespace) { - $autoloader->registerNamespace($namespace); - } - - return $this; - } - - /** - * Set bootstrap path/class - * - * @param string $path - * @param string $class - * @return Zend_Application - */ - public function setBootstrap($path, $class = null) - { - // setOptions() can potentially send a null value; specify default - // here - if (null === $class) { - $class = 'Bootstrap'; - } - - if (!class_exists($class, false)) { - require_once $path; - if (!class_exists($class, false)) { - throw new Zend_Application_Exception('Bootstrap class not found'); - } - } - $this->_bootstrap = new $class($this); - - if (!$this->_bootstrap instanceof Zend_Application_Bootstrap_Bootstrapper) { - throw new Zend_Application_Exception('Bootstrap class does not implement Zend_Application_Bootstrap_Bootstrapper'); - } - - return $this; - } - - /** - * Get bootstrap object - * - * @return Zend_Application_Bootstrap_BootstrapAbstract - */ - public function getBootstrap() - { - if (null === $this->_bootstrap) { - $this->_bootstrap = new Zend_Application_Bootstrap_Bootstrap($this); - } - return $this->_bootstrap; - } - - /** - * Bootstrap application - * - * @param null|string|array $resource - * @return Zend_Application - */ - public function bootstrap($resource = null) - { - $this->getBootstrap()->bootstrap($resource); - return $this; - } - - /** - * Run the application - * - * @return void - */ - public function run() - { - $this->getBootstrap()->run(); - } - - /** - * Load configuration file of options - * - * @param string $file - * @throws Zend_Application_Exception When invalid configuration file is provided - * @return array - */ - protected function _loadConfig($file) - { - $environment = $this->getEnvironment(); - $suffix = pathinfo($file, PATHINFO_EXTENSION); - $suffix = ($suffix === 'dist') - ? pathinfo(basename($file, ".$suffix"), PATHINFO_EXTENSION) - : $suffix; - - switch (strtolower($suffix)) { - case 'ini': - $config = new Zend_Config_Ini($file, $environment); - break; - - case 'xml': - $config = new Zend_Config_Xml($file, $environment); - break; - - case 'json': - $config = new Zend_Config_Json($file, $environment); - break; - - case 'yaml': - case 'yml': - $config = new Zend_Config_Yaml($file, $environment); - break; - - case 'php': - case 'inc': - $config = include $file; - if (!is_array($config)) { - throw new Zend_Application_Exception('Invalid configuration file provided; PHP file does not return array value'); - } - return $config; - break; - - default: - throw new Zend_Application_Exception('Invalid configuration file provided; unknown config type'); - } - - return $config->toArray(); - } -} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php deleted file mode 100644 index 042fec863..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/DomQuery.php +++ /dev/null @@ -1,425 +0,0 @@ -_path = $path; - } - - /** - * Indicate negative match - * - * @param bool $flag - * @return void - */ - public function setNegate($flag = true) - { - $this->_negate = $flag; - } - - /** - * Whether or not path is a straight XPath expression - * - * @param bool $flag - * @return Zend_Test_PHPUnit_Constraint_DomQuery - */ - public function setUseXpath($flag = true) - { - $this->_useXpath = (bool) $flag; - return $this; - } - - /** - * Evaluate an object to see if it fits the constraints - * - * @param string $other String to examine - * @param null|string Assertion type - * @return bool - */ - public function evaluate($other, $assertType = null) - { - if (strstr($assertType, 'Not')) { - $this->setNegate(true); - $assertType = str_replace('Not', '', $assertType); - } - - if (strstr($assertType, 'Xpath')) { - $this->setUseXpath(true); - $assertType = str_replace('Xpath', 'Query', $assertType); - } - - if (!in_array($assertType, $this->_assertTypes)) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); - } - - $this->_assertType = $assertType; - - $method = $this->_useXpath ? 'queryXpath' : 'query'; - $domQuery = new Zend_Dom_Query($other); - $domQuery->registerXpathNamespaces($this->_xpathNamespaces); - $result = $domQuery->$method($this->_path); - $argv = func_get_args(); - $argc = func_num_args(); - - switch ($assertType) { - case self::ASSERT_CONTENT_CONTAINS: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No content provided against which to match'); - } - $this->_content = $content = $argv[2]; - return ($this->_negate) - ? $this->_notMatchContent($result, $content) - : $this->_matchContent($result, $content); - case self::ASSERT_CONTENT_REGEX: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No pattern provided against which to match'); - } - $this->_content = $content = $argv[2]; - return ($this->_negate) - ? $this->_notRegexContent($result, $content) - : $this->_regexContent($result, $content); - case self::ASSERT_CONTENT_COUNT: - case self::ASSERT_CONTENT_COUNT_MIN: - case self::ASSERT_CONTENT_COUNT_MAX: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No count provided against which to compare'); - } - $this->_content = $content = $argv[2]; - return $this->_countContent($result, $content, $assertType); - case self::ASSERT_QUERY: - default: - if ($this->_negate) { - return (0 == count($result)); - } else { - return (0 != count($result)); - } - } - } - - /** - * Report Failure - * - * @see PHPUnit_Framework_Constraint for implementation details - * @param mixed $other CSS selector path - * @param string $description - * @param bool $not - * @return void - * @throws PHPUnit_Framework_ExpectationFailedException - */ - public function fail($other, $description, $not = false) - { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - switch ($this->_assertType) { - case self::ASSERT_CONTENT_CONTAINS: - $failure = 'Failed asserting node denoted by %s CONTAINS content "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting node DENOTED BY %s DOES NOT CONTAIN content "%s"'; - } - $failure = sprintf($failure, $other, $this->_content); - break; - case self::ASSERT_CONTENT_REGEX: - $failure = 'Failed asserting node denoted by %s CONTAINS content MATCHING "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting node DENOTED BY %s DOES NOT CONTAIN content MATCHING "%s"'; - } - $failure = sprintf($failure, $other, $this->_content); - break; - case self::ASSERT_CONTENT_COUNT: - $failure = 'Failed asserting node DENOTED BY %s OCCURS EXACTLY %d times'; - if ($this->_negate) { - $failure = 'Failed asserting node DENOTED BY %s DOES NOT OCCUR EXACTLY %d times'; - } - $failure = sprintf($failure, $other, $this->_content); - break; - case self::ASSERT_CONTENT_COUNT_MIN: - $failure = 'Failed asserting node DENOTED BY %s OCCURS AT LEAST %d times'; - $failure = sprintf($failure, $other, $this->_content); - break; - case self::ASSERT_CONTENT_COUNT_MAX: - $failure = 'Failed asserting node DENOTED BY %s OCCURS AT MOST %d times'; - $failure = sprintf($failure, $other, $this->_content); - break; - case self::ASSERT_QUERY: - default: - $failure = 'Failed asserting node DENOTED BY %s EXISTS'; - if ($this->_negate) { - $failure = 'Failed asserting node DENOTED BY %s DOES NOT EXIST'; - } - $failure = sprintf($failure, $other); - break; - } - - if (!empty($description)) { - $failure = $description . "\n" . $failure; - } - - throw new Zend_Test_PHPUnit_Constraint_Exception($failure); - } - - /** - * Complete implementation - * - * @return string - */ - public function toString() - { - return ''; - } - - /** - * Register XPath namespaces - * - * @param array $xpathNamespaces - * @return void - */ - public function registerXpathNamespaces($xpathNamespaces) - { - $this->_xpathNamespaces = $xpathNamespaces; - } - - /** - * Check to see if content is matched in selected nodes - * - * @param Zend_Dom_Query_Result $result - * @param string $match Content to match - * @return bool - */ - protected function _matchContent($result, $match) - { - $match = (string) $match; - - if (0 == count($result)) { - return false; - } - - foreach ($result as $node) { - $content = $this->_getNodeContent($node); - if (strstr($content, $match)) { - return true; - } - } - - return false; - } - - /** - * Check to see if content is NOT matched in selected nodes - * - * @param Zend_Dom_Query_Result $result - * @param string $match - * @return bool - */ - protected function _notMatchContent($result, $match) - { - if (0 == count($result)) { - return true; - } - - foreach ($result as $node) { - $content = $this->_getNodeContent($node); - if (strstr($content, $match)) { - return false; - } - } - - return true; - } - - /** - * Check to see if content is matched by regex in selected nodes - * - * @param Zend_Dom_Query_Result $result - * @param string $pattern - * @return bool - */ - protected function _regexContent($result, $pattern) - { - if (0 == count($result)) { - return false; - } - - foreach ($result as $node) { - $content = $this->_getNodeContent($node); - if (preg_match($pattern, $content)) { - return true; - } - } - - return false; - } - - /** - * Check to see if content is NOT matched by regex in selected nodes - * - * @param Zend_Dom_Query_Result $result - * @param string $pattern - * @return bool - */ - protected function _notRegexContent($result, $pattern) - { - if (0 == count($result)) { - return true; - } - - foreach ($result as $node) { - $content = $this->_getNodeContent($node); - if (preg_match($pattern, $content)) { - return false; - } - } - - return true; - } - - /** - * Determine if content count matches criteria - * - * @param Zend_Dom_Query_Result $result - * @param int $test Value against which to test - * @param string $type assertion type - * @return boolean - */ - protected function _countContent($result, $test, $type) - { - $count = count($result); - - switch ($type) { - case self::ASSERT_CONTENT_COUNT: - return ($this->_negate) - ? ($test != $count) - : ($test == $count); - case self::ASSERT_CONTENT_COUNT_MIN: - return ($count >= $test); - case self::ASSERT_CONTENT_COUNT_MAX: - return ($count <= $test); - default: - return false; - } - } - - /** - * Get node content, minus node markup tags - * - * @param DOMNode $node - * @return string - */ - protected function _getNodeContent(DOMNode $node) - { - if ($node instanceof DOMAttr) { - return $node->value; - } else { - $doc = $node->ownerDocument; - $content = $doc->saveXML($node); - $tag = $node->nodeName; - $regex = '|]*>|'; - return preg_replace($regex, '', $content); - } - } -} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php deleted file mode 100644 index 794f0812e..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/Exception.php +++ /dev/null @@ -1,38 +0,0 @@ -_negate = $flag; - } - - /** - * Evaluate an object to see if it fits the constraints - * - * @param string $other String to examine - * @param null|string Assertion type - * @return bool - */ - public function evaluate($other, $assertType = null) - { - if (!$other instanceof Zend_Controller_Response_Abstract) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('Redirect constraint assertions require a response object'); - } - - if (strstr($assertType, 'Not')) { - $this->setNegate(true); - $assertType = str_replace('Not', '', $assertType); - } - - if (!in_array($assertType, $this->_assertTypes)) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); - } - - $this->_assertType = $assertType; - - $response = $other; - $argv = func_get_args(); - $argc = func_num_args(); - - switch ($assertType) { - case self::ASSERT_REDIRECT_TO: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No redirect URL provided against which to match'); - } - $this->_match = $match = $argv[2]; - return ($this->_negate) - ? $this->_notMatch($response, $match) - : $this->_match($response, $match); - case self::ASSERT_REDIRECT_REGEX: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No pattern provided against which to match redirect'); - } - $this->_match = $match = $argv[2]; - return ($this->_negate) - ? $this->_notRegex($response, $match) - : $this->_regex($response, $match); - case self::ASSERT_REDIRECT: - default: - return ($this->_negate) ? !$response->isRedirect() : $response->isRedirect(); - } - } - - /** - * Report Failure - * - * @see PHPUnit_Framework_Constraint for implementation details - * @param mixed $other - * @param string $description Additional message to display - * @param bool $not - * @return void - * @throws PHPUnit_Framework_ExpectationFailedException - */ - public function fail($other, $description, $not = false) - { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - switch ($this->_assertType) { - case self::ASSERT_REDIRECT_TO: - $failure = 'Failed asserting response redirects to "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting response DOES NOT redirect to "%s"'; - } - $failure = sprintf($failure, $this->_match); - break; - case self::ASSERT_REDIRECT_REGEX: - $failure = 'Failed asserting response redirects to URL MATCHING "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting response DOES NOT redirect to URL MATCHING "%s"'; - } - $failure = sprintf($failure, $this->_match); - break; - case self::ASSERT_REDIRECT: - default: - $failure = 'Failed asserting response is a redirect'; - if ($this->_negate) { - $failure = 'Failed asserting response is NOT a redirect'; - } - break; - } - - if (!empty($description)) { - $failure = $description . "\n" . $failure; - } - - throw new Zend_Test_PHPUnit_Constraint_Exception($failure); - } - - /** - * Complete implementation - * - * @return string - */ - public function toString() - { - return ''; - } - - /** - * Check to see if content is matched in selected nodes - * - * @param Zend_Controller_Response_HttpTestCase $response - * @param string $match Content to match - * @return bool - */ - protected function _match($response, $match) - { - if (!$response->isRedirect()) { - return false; - } - - $headers = $response->sendHeaders(); - $redirect = $headers['location']; - $redirect = str_replace('Location: ', '', $redirect); - - return ($redirect == $match); - } - - /** - * Check to see if content is NOT matched in selected nodes - * - * @param Zend_Controller_Response_HttpTestCase $response - * @param string $match - * @return bool - */ - protected function _notMatch($response, $match) - { - if (!$response->isRedirect()) { - return true; - } - - $headers = $response->sendHeaders(); - $redirect = $headers['location']; - $redirect = str_replace('Location: ', '', $redirect); - - return ($redirect != $match); - } - - /** - * Check to see if content is matched by regex in selected nodes - * - * @param Zend_Controller_Response_HttpTestCase $response - * @param string $pattern - * @return bool - */ - protected function _regex($response, $pattern) - { - if (!$response->isRedirect()) { - return false; - } - - $headers = $response->sendHeaders(); - $redirect = $headers['location']; - $redirect = str_replace('Location: ', '', $redirect); - - return preg_match($pattern, $redirect); - } - - /** - * Check to see if content is NOT matched by regex in selected nodes - * - * @param Zend_Controller_Response_HttpTestCase $response - * @param string $pattern - * @return bool - */ - protected function _notRegex($response, $pattern) - { - if (!$response->isRedirect()) { - return true; - } - - $headers = $response->sendHeaders(); - $redirect = $headers['location']; - $redirect = str_replace('Location: ', '', $redirect); - - return !preg_match($pattern, $redirect); - } -} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php deleted file mode 100644 index a609f6582..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Constraint/ResponseHeader.php +++ /dev/null @@ -1,400 +0,0 @@ -_negate = $flag; - } - - /** - * Evaluate an object to see if it fits the constraints - * - * @param Zend_Controller_Response_Abstract $other String to examine - * @param null|string Assertion type - * @return bool - */ - public function evaluate($other, $assertType = null) - { - if (!$other instanceof Zend_Controller_Response_Abstract) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('Header constraint assertions require a response object'); - } - - if (strstr($assertType, 'Not')) { - $this->setNegate(true); - $assertType = str_replace('Not', '', $assertType); - } - - if (!in_array($assertType, $this->_assertTypes)) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception(sprintf('Invalid assertion type "%s" provided to %s constraint', $assertType, __CLASS__)); - } - - $this->_assertType = $assertType; - - $response = $other; - $argv = func_get_args(); - $argc = func_num_args(); - - switch ($assertType) { - case self::ASSERT_RESPONSE_CODE: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No response code provided against which to match'); - } - $this->_code = $code = $argv[2]; - return ($this->_negate) - ? $this->_notCode($response, $code) - : $this->_code($response, $code); - case self::ASSERT_HEADER: - if (3 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('No header provided against which to match'); - } - $this->_header = $header = $argv[2]; - return ($this->_negate) - ? $this->_notHeader($response, $header) - : $this->_header($response, $header); - case self::ASSERT_HEADER_CONTAINS: - if (4 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('Both a header name and content to match are required for ' . __FUNCTION__); - } - $this->_header = $header = $argv[2]; - $this->_match = $match = $argv[3]; - return ($this->_negate) - ? $this->_notHeaderContains($response, $header, $match) - : $this->_headerContains($response, $header, $match); - case self::ASSERT_HEADER_REGEX: - if (4 > $argc) { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('Both a header name and content to match are required for ' . __FUNCTION__); - } - $this->_header = $header = $argv[2]; - $this->_match = $match = $argv[3]; - return ($this->_negate) - ? $this->_notHeaderRegex($response, $header, $match) - : $this->_headerRegex($response, $header, $match); - default: - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - throw new Zend_Test_PHPUnit_Constraint_Exception('Invalid assertion type ' . __FUNCTION__); - } - } - - /** - * Report Failure - * - * @see PHPUnit_Framework_Constraint for implementation details - * @param mixed $other - * @param string $description Additional message to display - * @param bool $not - * @return void - * @throws PHPUnit_Framework_ExpectationFailedException - */ - public function fail($other, $description, $not = false) - { - require_once 'Zend/Test/PHPUnit/Constraint/Exception.php'; - switch ($this->_assertType) { - case self::ASSERT_RESPONSE_CODE: - $failure = 'Failed asserting response code "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting response code IS NOT "%s"'; - } - $failure = sprintf($failure, $this->_code); - break; - case self::ASSERT_HEADER: - $failure = 'Failed asserting response header "%s" found'; - if ($this->_negate) { - $failure = 'Failed asserting response response header "%s" WAS NOT found'; - } - $failure = sprintf($failure, $this->_header); - break; - case self::ASSERT_HEADER_CONTAINS: - $failure = 'Failed asserting response header "%s" exists and contains "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting response header "%s" DOES NOT CONTAIN "%s"'; - } - $failure = sprintf($failure, $this->_header, $this->_match); - break; - case self::ASSERT_HEADER_REGEX: - $failure = 'Failed asserting response header "%s" exists and matches regex "%s"'; - if ($this->_negate) { - $failure = 'Failed asserting response header "%s" DOES NOT MATCH regex "%s"'; - } - $failure = sprintf($failure, $this->_header, $this->_match); - break; - default: - throw new Zend_Test_PHPUnit_Constraint_Exception('Invalid assertion type ' . __FUNCTION__); - } - - if (!empty($description)) { - $failure = $description . "\n" . $failure; - } - - throw new Zend_Test_PHPUnit_Constraint_Exception($failure); - } - - /** - * Complete implementation - * - * @return string - */ - public function toString() - { - return ''; - } - - /** - * Compare response code for positive match - * - * @param Zend_Controller_Response_Abstract $response - * @param int $code - * @return bool - */ - protected function _code(Zend_Controller_Response_Abstract $response, $code) - { - $test = $this->_getCode($response); - return ($test == $code); - } - - /** - * Compare response code for negative match - * - * @param Zend_Controller_Response_Abstract $response - * @param int $code - * @return bool - */ - protected function _notCode(Zend_Controller_Response_Abstract $response, $code) - { - $test = $this->_getCode($response); - return ($test != $code); - } - - /** - * Retrieve response code - * - * @param Zend_Controller_Response_Abstract $response - * @return int - */ - protected function _getCode(Zend_Controller_Response_Abstract $response) - { - $test = $response->getHttpResponseCode(); - if (null === $test) { - $test = 200; - } - return $test; - } - - /** - * Positive check for response header presence - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @return bool - */ - protected function _header(Zend_Controller_Response_Abstract $response, $header) - { - return (null !== $this->_getHeader($response, $header)); - } - - /** - * Negative check for response header presence - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @return bool - */ - protected function _notHeader(Zend_Controller_Response_Abstract $response, $header) - { - return (null === $this->_getHeader($response, $header)); - } - - /** - * Retrieve response header - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @return string|null - */ - protected function _getHeader(Zend_Controller_Response_Abstract $response, $header) - { - $headers = $response->sendHeaders(); - $header = strtolower($header); - if (array_key_exists($header, $headers)) { - return $headers[$header]; - } - return null; - } - - /** - * Positive check for header contents matching pattern - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @param string $match - * @return bool - */ - protected function _headerContains(Zend_Controller_Response_Abstract $response, $header, $match) - { - if (null === ($fullHeader = $this->_getHeader($response, $header))) { - return false; - } - - $contents = str_replace($header . ': ', '', $fullHeader); - - return (strstr($contents, $match)); - } - - /** - * Negative check for header contents matching pattern - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @param string $match - * @return bool - */ - protected function _notHeaderContains(Zend_Controller_Response_Abstract $response, $header, $match) - { - if (null === ($fullHeader = $this->_getHeader($response, $header))) { - return true; - } - - $contents = str_replace($header . ': ', '', $fullHeader); - - return (!strstr($contents, $match)); - } - - /** - * Positive check for header contents matching regex - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @param string $pattern - * @return bool - */ - protected function _headerRegex(Zend_Controller_Response_Abstract $response, $header, $pattern) - { - if (null === ($fullHeader = $this->_getHeader($response, $header))) { - return false; - } - - $contents = str_replace($header . ': ', '', $fullHeader); - - return preg_match($pattern, $contents); - } - - /** - * Negative check for header contents matching regex - * - * @param Zend_Controller_Response_Abstract $response - * @param string $header - * @param string $pattern - * @return bool - */ - protected function _notHeaderRegex(Zend_Controller_Response_Abstract $response, $header, $pattern) - { - if (null === ($fullHeader = $this->_getHeader($response, $header))) { - return true; - } - - $contents = str_replace($header . ': ', '', $fullHeader); - - return !preg_match($pattern, $contents); - } -} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php deleted file mode 100644 index 43ad74ad3..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/ControllerTestCase.php +++ /dev/null @@ -1,1217 +0,0 @@ -=')) ? 'PHPUnit/Autoload.php' : 'PHPUnit/Framework.php'; - -/** @see Zend_Controller_Front */ -require_once 'Zend/Controller/Front.php'; - -/** @see Zend_Controller_Action_HelperBroker */ -require_once 'Zend/Controller/Action/HelperBroker.php'; - -/** @see Zend_Layout */ -require_once 'Zend/Layout.php'; - -/** @see Zend_Session */ -require_once 'Zend/Session.php'; - -/** @see Zend_Registry */ -require_once 'Zend/Registry.php'; - -/** - * Functional testing scaffold for MVC applications - * - * @uses PHPUnit_Framework_TestCase - * @category Zend - * @package Zend_Test - * @subpackage PHPUnit - * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -abstract class Zend_Test_PHPUnit_ControllerTestCase extends PHPUnit_Framework_TestCase -{ - /** - * @var mixed Bootstrap file path or callback - */ - public $bootstrap; - - /** - * @var Zend_Controller_Front - */ - protected $_frontController; - - /** - * @var Zend_Dom_Query - */ - protected $_query; - - /** - * @var Zend_Controller_Request_Abstract - */ - protected $_request; - - /** - * @var Zend_Controller_Response_Abstract - */ - protected $_response; - - /** - * XPath namespaces - * @var array - */ - protected $_xpathNamespaces = array(); - - /** - * Overloading: prevent overloading to special properties - * - * @param string $name - * @param mixed $value - * @return void - */ - public function __set($name, $value) - { - if (in_array($name, array('request', 'response', 'frontController'))) { - require_once 'Zend/Exception.php'; - throw new Zend_Exception(sprintf('Setting %s object manually is not allowed', $name)); - } - $this->$name = $value; - } - - /** - * Overloading for common properties - * - * Provides overloading for request, response, and frontController objects. - * - * @param mixed $name - * @return void - */ - public function __get($name) - { - switch ($name) { - case 'request': - return $this->getRequest(); - case 'response': - return $this->getResponse(); - case 'frontController': - return $this->getFrontController(); - } - - return null; - } - - /** - * Set up MVC app - * - * Calls {@link bootstrap()} by default - * - * @return void - */ - protected function setUp() - { - $this->bootstrap(); - } - - /** - * Bootstrap the front controller - * - * Resets the front controller, and then bootstraps it. - * - * If {@link $bootstrap} is a callback, executes it; if it is a file, it include's - * it. When done, sets the test case request and response objects into the - * front controller. - * - * @return void - */ - final public function bootstrap() - { - $this->reset(); - if (null !== $this->bootstrap) { - if ($this->bootstrap instanceof Zend_Application) { - $this->bootstrap->bootstrap(); - $this->_frontController = $this->bootstrap->getBootstrap()->getResource('frontcontroller'); - } elseif (is_callable($this->bootstrap)) { - call_user_func($this->bootstrap); - } elseif (is_string($this->bootstrap)) { - require_once 'Zend/Loader.php'; - if (Zend_Loader::isReadable($this->bootstrap)) { - include $this->bootstrap; - } - } - } - $this->frontController - ->setRequest($this->getRequest()) - ->setResponse($this->getResponse()); - } - - /** - * Dispatch the MVC - * - * If a URL is provided, sets it as the request URI in the request object. - * Then sets test case request and response objects in front controller, - * disables throwing exceptions, and disables returning the response. - * Finally, dispatches the front controller. - * - * @param string|null $url - * @return void - */ - public function dispatch($url = null) - { - // redirector should not exit - $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); - $redirector->setExit(false); - - // json helper should not exit - $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); - $json->suppressExit = true; - - $request = $this->getRequest(); - if (null !== $url) { - $request->setRequestUri($url); - } - $request->setPathInfo(null); - - $controller = $this->getFrontController(); - $this->frontController - ->setRequest($request) - ->setResponse($this->getResponse()) - ->throwExceptions(false) - ->returnResponse(false); - - if ($this->bootstrap instanceof Zend_Application) { - $this->bootstrap->run(); - } else { - $this->frontController->dispatch(); - } - } - - /** - * Reset MVC state - * - * Creates new request/response objects, resets the front controller - * instance, and resets the action helper broker. - * - * @todo Need to update Zend_Layout to add a resetInstance() method - * @return void - */ - public function reset() - { - $_SESSION = array(); - $_GET = array(); - $_POST = array(); - $_COOKIE = array(); - $this->resetRequest(); - $this->resetResponse(); - Zend_Layout::resetMvcInstance(); - Zend_Controller_Action_HelperBroker::resetHelpers(); - $this->frontController->resetInstance(); - Zend_Session::$_unitTestEnabled = true; - } - - /** - * Rest all view placeholders - * - * @return void - */ - protected function _resetPlaceholders() - { - $registry = Zend_Registry::getInstance(); - $remove = array(); - foreach ($registry as $key => $value) { - if (strstr($key, '_View_')) { - $remove[] = $key; - } - } - - foreach ($remove as $key) { - unset($registry[$key]); - } - } - - /** - * Reset the request object - * - * Useful for test cases that need to test multiple trips to the server. - * - * @return Zend_Test_PHPUnit_ControllerTestCase - */ - public function resetRequest() - { - if ($this->_request instanceof Zend_Controller_Request_HttpTestCase) { - $this->_request->clearQuery() - ->clearPost(); - } - $this->_request = null; - return $this; - } - - /** - * Reset the response object - * - * Useful for test cases that need to test multiple trips to the server. - * - * @return Zend_Test_PHPUnit_ControllerTestCase - */ - public function resetResponse() - { - $this->_response = null; - $this->_resetPlaceholders(); - return $this; - } - - /** - * Assert against DOM selection - * - * @param string $path CSS selector path - * @param string $message - * @return void - */ - public function assertQuery($path, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection - * - * @param string $path CSS selector path - * @param string $message - * @return void - */ - public function assertNotQuery($path, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; node should contain content - * - * @param string $path CSS selector path - * @param string $match content that should be contained in matched nodes - * @param string $message - * @return void - */ - public function assertQueryContentContains($path, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $match)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; node should NOT contain content - * - * @param string $path CSS selector path - * @param string $match content that should NOT be contained in matched nodes - * @param string $message - * @return void - */ - public function assertNotQueryContentContains($path, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $match)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; node should match content - * - * @param string $path CSS selector path - * @param string $pattern Pattern that should be contained in matched nodes - * @param string $message - * @return void - */ - public function assertQueryContentRegex($path, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; node should NOT match content - * - * @param string $path CSS selector path - * @param string $pattern pattern that should NOT be contained in matched nodes - * @param string $message - * @return void - */ - public function assertNotQueryContentRegex($path, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; should contain exact number of nodes - * - * @param string $path CSS selector path - * @param string $count Number of nodes that should match - * @param string $message - * @return void - */ - public function assertQueryCount($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; should NOT contain exact number of nodes - * - * @param string $path CSS selector path - * @param string $count Number of nodes that should NOT match - * @param string $message - * @return void - */ - public function assertNotQueryCount($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; should contain at least this number of nodes - * - * @param string $path CSS selector path - * @param string $count Minimum number of nodes that should match - * @param string $message - * @return void - */ - public function assertQueryCountMin($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against DOM selection; should contain no more than this number of nodes - * - * @param string $path CSS selector path - * @param string $count Maximum number of nodes that should match - * @param string $message - * @return void - */ - public function assertQueryCountMax($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Register XPath namespaces - * - * @param array $xpathNamespaces - * @return void - */ - public function registerXpathNamespaces($xpathNamespaces) - { - $this->_xpathNamespaces = $xpathNamespaces; - } - - /** - * Assert against XPath selection - * - * @param string $path XPath path - * @param string $message - * @return void - */ - public function assertXpath($path, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection - * - * @param string $path XPath path - * @param string $message - * @return void - */ - public function assertNotXpath($path, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; node should contain content - * - * @param string $path XPath path - * @param string $match content that should be contained in matched nodes - * @param string $message - * @return void - */ - public function assertXpathContentContains($path, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $match)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; node should NOT contain content - * - * @param string $path XPath path - * @param string $match content that should NOT be contained in matched nodes - * @param string $message - * @return void - */ - public function assertNotXpathContentContains($path, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $match)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; node should match content - * - * @param string $path XPath path - * @param string $pattern Pattern that should be contained in matched nodes - * @param string $message - * @return void - */ - public function assertXpathContentRegex($path, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; node should NOT match content - * - * @param string $path XPath path - * @param string $pattern pattern that should NOT be contained in matched nodes - * @param string $message - * @return void - */ - public function assertNotXpathContentRegex($path, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; should contain exact number of nodes - * - * @param string $path XPath path - * @param string $count Number of nodes that should match - * @param string $message - * @return void - */ - public function assertXpathCount($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; should NOT contain exact number of nodes - * - * @param string $path XPath path - * @param string $count Number of nodes that should NOT match - * @param string $message - * @return void - */ - public function assertNotXpathCount($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; should contain at least this number of nodes - * - * @param string $path XPath path - * @param string $count Minimum number of nodes that should match - * @param string $message - * @return void - */ - public function assertXpathCountMin($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert against XPath selection; should contain no more than this number of nodes - * - * @param string $path XPath path - * @param string $count Maximum number of nodes that should match - * @param string $message - * @return void - */ - public function assertXpathCountMax($path, $count, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path); - $constraint->registerXpathNamespaces($this->_xpathNamespaces); - $content = $this->response->outputBody(); - if (!$constraint->evaluate($content, __FUNCTION__, $count)) { - $constraint->fail($path, $message); - } - } - - /** - * Assert that response is a redirect - * - * @param string $message - * @return void - */ - public function assertRedirect($message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that response is NOT a redirect - * - * @param string $message - * @return void - */ - public function assertNotRedirect($message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that response redirects to given URL - * - * @param string $url - * @param string $message - * @return void - */ - public function assertRedirectTo($url, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $url)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that response does not redirect to given URL - * - * @param string $url - * @param string $message - * @return void - */ - public function assertNotRedirectTo($url, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $url)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that redirect location matches pattern - * - * @param string $pattern - * @param string $message - * @return void - */ - public function assertRedirectRegex($pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that redirect location does not match pattern - * - * @param string $pattern - * @param string $message - * @return void - */ - public function assertNotRedirectRegex($pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_Redirect(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response code - * - * @param int $code - * @param string $message - * @return void - */ - public function assertResponseCode($code, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $code)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response code - * - * @param int $code - * @param string $message - * @return void - */ - public function assertNotResponseCode($code, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $constraint->setNegate(true); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $code)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header exists - * - * @param string $header - * @param string $message - * @return void - */ - public function assertHeader($header, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header does not exist - * - * @param string $header - * @param string $message - * @return void - */ - public function assertNotHeader($header, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $constraint->setNegate(true); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header exists and contains the given string - * - * @param string $header - * @param string $match - * @param string $message - * @return void - */ - public function assertHeaderContains($header, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header does not exist and/or does not contain the given string - * - * @param string $header - * @param string $match - * @param string $message - * @return void - */ - public function assertNotHeaderContains($header, $match, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $constraint->setNegate(true); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header exists and matches the given pattern - * - * @param string $header - * @param string $pattern - * @param string $message - * @return void - */ - public function assertHeaderRegex($header, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert response header does not exist and/or does not match the given regex - * - * @param string $header - * @param string $pattern - * @param string $message - * @return void - */ - public function assertNotHeaderRegex($header, $pattern, $message = '') - { - $this->_incrementAssertionCount(); - require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php'; - $constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader(); - $constraint->setNegate(true); - $response = $this->response; - if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) { - $constraint->fail($response, $message); - } - } - - /** - * Assert that the last handled request used the given module - * - * @param string $module - * @param string $message - * @return void - */ - public function assertModule($module, $message = '') - { - $this->_incrementAssertionCount(); - if ($module != $this->request->getModuleName()) { - $msg = sprintf('Failed asserting last module used <"%s"> was "%s"', - $this->request->getModuleName(), - $module - ); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the last handled request did NOT use the given module - * - * @param string $module - * @param string $message - * @return void - */ - public function assertNotModule($module, $message = '') - { - $this->_incrementAssertionCount(); - if ($module == $this->request->getModuleName()) { - $msg = sprintf('Failed asserting last module used was NOT "%s"', $module); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the last handled request used the given controller - * - * @param string $controller - * @param string $message - * @return void - */ - public function assertController($controller, $message = '') - { - $this->_incrementAssertionCount(); - if ($controller != $this->request->getControllerName()) { - $msg = sprintf('Failed asserting last controller used <"%s"> was "%s"', - $this->request->getControllerName(), - $controller - ); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the last handled request did NOT use the given controller - * - * @param string $controller - * @param string $message - * @return void - */ - public function assertNotController($controller, $message = '') - { - $this->_incrementAssertionCount(); - if ($controller == $this->request->getControllerName()) { - $msg = sprintf('Failed asserting last controller used <"%s"> was NOT "%s"', - $this->request->getControllerName(), - $controller - ); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the last handled request used the given action - * - * @param string $action - * @param string $message - * @return void - */ - public function assertAction($action, $message = '') - { - $this->_incrementAssertionCount(); - if ($action != $this->request->getActionName()) { - $msg = sprintf('Failed asserting last action used <"%s"> was "%s"', $this->request->getActionName(), $action); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the last handled request did NOT use the given action - * - * @param string $action - * @param string $message - * @return void - */ - public function assertNotAction($action, $message = '') - { - $this->_incrementAssertionCount(); - if ($action == $this->request->getActionName()) { - $msg = sprintf('Failed asserting last action used <"%s"> was NOT "%s"', $this->request->getActionName(), $action); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the specified route was used - * - * @param string $route - * @param string $message - * @return void - */ - public function assertRoute($route, $message = '') - { - $this->_incrementAssertionCount(); - $router = $this->frontController->getRouter(); - if ($route != $router->getCurrentRouteName()) { - $msg = sprintf('Failed asserting matched route was "%s", actual route is %s', - $route, - $router->getCurrentRouteName() - ); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Assert that the route matched is NOT as specified - * - * @param string $route - * @param string $message - * @return void - */ - public function assertNotRoute($route, $message = '') - { - $this->_incrementAssertionCount(); - $router = $this->frontController->getRouter(); - if ($route == $router->getCurrentRouteName()) { - $msg = sprintf('Failed asserting route matched was NOT "%s"', $route); - if (!empty($message)) { - $msg = $message . "\n" . $msg; - } - $this->fail($msg); - } - } - - /** - * Retrieve front controller instance - * - * @return Zend_Controller_Front - */ - public function getFrontController() - { - if (null === $this->_frontController) { - $this->_frontController = Zend_Controller_Front::getInstance(); - } - return $this->_frontController; - } - - /** - * Retrieve test case request object - * - * @return Zend_Controller_Request_HttpTestCase - */ - public function getRequest() - { - if (null === $this->_request) { - require_once 'Zend/Controller/Request/HttpTestCase.php'; - $this->_request = new Zend_Controller_Request_HttpTestCase; - } - return $this->_request; - } - - /** - * Retrieve test case response object - * - * @return Zend_Controller_Response_HttpTestCase - */ - public function getResponse() - { - if (null === $this->_response) { - require_once 'Zend/Controller/Response/HttpTestCase.php'; - $this->_response = new Zend_Controller_Response_HttpTestCase; - } - return $this->_response; - } - - /** - * Retrieve DOM query object - * - * @return Zend_Dom_Query - */ - public function getQuery() - { - if (null === $this->_query) { - require_once 'Zend/Dom/Query.php'; - $this->_query = new Zend_Dom_Query; - } - return $this->_query; - } - - /** - * URL Helper - * - * @param array $urlOptions - * @param string $name - * @param bool $reset - * @param bool $encode - */ - public function url($urlOptions = array(), $name = null, $reset = false, $encode = true) - { - $frontController = $this->getFrontController(); - $router = $frontController->getRouter(); - if (!$router instanceof Zend_Controller_Router_Rewrite) { - throw new Exception('This url helper utility function only works when the router is of type Zend_Controller_Router_Rewrite'); - } - if (count($router->getRoutes()) == 0) { - $router->addDefaultRoutes(); - } - return $router->assemble($urlOptions, $name, $reset, $encode); - } - - public function urlizeOptions($urlOptions, $actionControllerModuleOnly = true) - { - $ccToDash = new Zend_Filter_Word_CamelCaseToDash(); - foreach ($urlOptions as $n => $v) { - if (in_array($n, array('action', 'controller', 'module'))) { - $urlOptions[$n] = $ccToDash->filter($v); - } - } - return $urlOptions; - } - - /** - * Increment assertion count - * - * @return void - */ - protected function _incrementAssertionCount() - { - $stack = debug_backtrace(); - foreach (debug_backtrace() as $step) { - if (isset($step['object']) - && $step['object'] instanceof PHPUnit_Framework_TestCase - ) { - if (version_compare(PHPUnit_Runner_Version::id(), '3.3.0', 'lt')) { - break; - } elseif (version_compare(PHPUnit_Runner_Version::id(), '3.3.3', 'lt')) { - $step['object']->incrementAssertionCounter(); - } else { - $step['object']->addToAssertionCount(1); - } - break; - } - } - } -} diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php deleted file mode 100644 index 92b071d21..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/DatabaseTestCase.php +++ /dev/null @@ -1,151 +0,0 @@ -getConnection()->getConnection(); - } - - /** - * Returns the database operation executed in test setup. - * - * @return PHPUnit_Extensions_Database_Operation_DatabaseOperation - */ - protected function getSetUpOperation() - { - return new PHPUnit_Extensions_Database_Operation_Composite(array( - new Zend_Test_PHPUnit_Db_Operation_Truncate(), - new Zend_Test_PHPUnit_Db_Operation_Insert(), - )); - } - - /** - * Returns the database operation executed in test cleanup. - * - * @return PHPUnit_Extensions_Database_Operation_DatabaseOperation - */ - protected function getTearDownOperation() - { - return PHPUnit_Extensions_Database_Operation_Factory::NONE(); - } - - /** - * Create a dataset based on multiple Zend_Db_Table instances - * - * @param array $tables - * @return Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet - */ - protected function createDbTableDataSet(array $tables=array()) - { - $dataSet = new Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet(); - foreach($tables AS $table) { - $dataSet->addTable($table); - } - return $dataSet; - } - - /** - * Create a table based on one Zend_Db_Table instance - * - * @param Zend_Db_Table_Abstract $table - * @param string $where - * @param string $order - * @param string $count - * @param string $offset - * @return Zend_Test_PHPUnit_Db_DataSet_DbTable - */ - protected function createDbTable(Zend_Db_Table_Abstract $table, $where=null, $order=null, $count=null, $offset=null) - { - return new Zend_Test_PHPUnit_Db_DataSet_DbTable($table, $where, $order, $count, $offset); - } - - /** - * Create a data table based on a Zend_Db_Table_Rowset instance - * - * @param Zend_Db_Table_Rowset_Abstract $rowset - * @param string - * @return Zend_Test_PHPUnit_Db_DataSet_DbRowset - */ - protected function createDbRowset(Zend_Db_Table_Rowset_Abstract $rowset, $tableName = null) - { - return new Zend_Test_PHPUnit_Db_DataSet_DbRowset($rowset, $tableName); - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php deleted file mode 100644 index d76a53645..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Connection.php +++ /dev/null @@ -1,149 +0,0 @@ -_connection = $db; - $this->_schema = $schema; - } - - /** - * Close this connection. - * - * @return void - */ - public function close() - { - $this->_connection->closeConnection(); - } - - /** - * Creates a table with the result of the specified SQL statement. - * - * @param string $resultName - * @param string $sql - * @return PHPUnit_Extensions_Database_DataSet_ITable - */ - public function createQueryTable($resultName, $sql) - { - return new Zend_Test_PHPUnit_Db_DataSet_QueryTable($resultName, $sql, $this); - } - - /** - * Returns a Zend_Db Connection - * - * @return Zend_Db_Adapter_Abstract - */ - public function getConnection() - { - return $this->_connection; - } - - /** - * Returns a database metadata object that can be used to retrieve table - * meta data from the database. - * - * @return PHPUnit_Extensions_Database_DB_IMetaData - */ - public function getMetaData() - { - if($this->_metaData === null) { - $this->_metaData = new Zend_Test_PHPUnit_Db_Metadata_Generic($this->getConnection(), $this->getSchema()); - } - return $this->_metaData; - } - - /** - * Returns the schema for the connection. - * - * @return string - */ - public function getSchema() - { - return $this->_schema; - } - - /** - * Returns the command used to truncate a table. - * - * @return string - */ - public function getTruncateCommand() - { - return "DELETE"; - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php deleted file mode 100644 index eb51c0d7b..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbRowset.php +++ /dev/null @@ -1,78 +0,0 @@ -getTable(); - if($table !== null) { - $tableName = $table->info('name'); - } else { - require_once "Zend/Test/PHPUnit/Db/Exception.php"; - throw new Zend_Test_PHPUnit_Db_Exception( - 'No table name was given to Rowset Table and table name cannot be infered from the table, '. - 'because the rowset is disconnected from database.' - ); - } - } - - $this->data = $rowset->toArray(); - - $columns = array(); - if(isset($this->data[0]) > 0) { - $columns = array_keys($this->data[0]); - } else if($rowset->getTable() != null) { - $columns = $rowset->getTable()->info('cols'); - } - - $this->tableName = $tableName; - $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($this->tableName, $columns); - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php deleted file mode 100644 index 4346f741c..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTable.php +++ /dev/null @@ -1,125 +0,0 @@ -tableName = $table->info('name'); - $this->_columns = $table->info('cols'); - - $this->_table = $table; - $this->_where = $where; - $this->_order = $order; - $this->_count = $count; - $this->_offset = $offset; - } - - /** - * Lazy load data via table fetchAll() method. - * - * @return void - */ - protected function loadData() - { - if ($this->data === null) { - $this->data = $this->_table->fetchAll( - $this->_where, $this->_order, $this->_count, $this->_offset - ); - if($this->data instanceof Zend_Db_Table_Rowset_Abstract) { - $this->data = $this->data->toArray(); - } - } - } - - /** - * Create Table Metadata object - */ - protected function createTableMetaData() - { - if ($this->tableMetaData === NULL) { - $this->loadData(); - $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($this->tableName, $this->_columns); - } - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php deleted file mode 100644 index e660e3027..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/DbTableDataSet.php +++ /dev/null @@ -1,103 +0,0 @@ -info('name'); - $this->tables[$tableName] = new Zend_Test_PHPUnit_Db_DataSet_DbTable($table, $where, $order, $count, $offset); - } - - /** - * Creates an iterator over the tables in the data set. If $reverse is - * true a reverse iterator will be returned. - * - * @param bool $reverse - * @return PHPUnit_Extensions_Database_DB_TableIterator - */ - protected function createIterator($reverse = FALSE) - { - return new PHPUnit_Extensions_Database_DataSet_DefaultTableIterator($this->tables, $reverse); - } - - /** - * Returns a table object for the given table. - * - * @param string $tableName - * @return PHPUnit_Extensions_Database_DB_Table - */ - public function getTable($tableName) - { - if (!isset($this->tables[$tableName])) { - throw new InvalidArgumentException("$tableName is not a table in the current database."); - } - - return $this->tables[$tableName]; - } - - /** - * Returns a list of table names for the database - * - * @return Array - */ - public function getTableNames() - { - return array_keys($this->tables); - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php deleted file mode 100644 index 8625b6e8e..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryDataSet.php +++ /dev/null @@ -1,90 +0,0 @@ -databaseConnection = $databaseConnection; - } - - /** - * Add a Table dataset representation by specifiying an arbitrary select query. - * - * By default a select * will be done on the given tablename. - * - * @param string $tableName - * @param string|Zend_Db_Select $query - */ - public function addTable($tableName, $query = NULL) - { - if ($query === NULL) { - $query = $this->databaseConnection->getConnection()->select(); - $query->from($tableName, Zend_Db_Select::SQL_WILDCARD); - } - - if($query instanceof Zend_Db_Select) { - $query = $query->__toString(); - } - - $this->tables[$tableName] = new Zend_Test_PHPUnit_Db_DataSet_QueryTable($tableName, $query, $this->databaseConnection); - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php deleted file mode 100644 index 54b448283..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/DataSet/QueryTable.php +++ /dev/null @@ -1,91 +0,0 @@ -data === null) { - $stmt = $this->databaseConnection->getConnection()->query($this->query); - $this->data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC); - } - } - - /** - * Create Table Metadata - */ - protected function createTableMetaData() - { - if ($this->tableMetaData === NULL) - { - $this->loadData(); - $keys = array(); - if(count($this->data) > 0) { - $keys = array_keys($this->data[0]); - } - $this->tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData( - $this->tableName, $keys - ); - } - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php deleted file mode 100644 index 714ed0446..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Exception.php +++ /dev/null @@ -1,40 +0,0 @@ -_connection = $db; - $this->_schema = $schema; - } - - /** - * List Tables - * - * @return array - */ - public function getTableNames() - { - return $this->_connection->listTables(); - } - - /** - * Get Table information - * - * @param string $tableName - * @return array - */ - protected function getTableDescription($tableName) - { - if(!isset($this->_tableMetadata[$tableName])) { - $this->_tableMetadata[$tableName] = $this->_connection->describeTable($tableName); - } - return $this->_tableMetadata[$tableName]; - } - - /** - * Returns an array containing the names of all the columns in the - * $tableName table, - * - * @param string $tableName - * @return array - */ - public function getTableColumns($tableName) - { - $tableMeta = $this->getTableDescription($tableName); - $columns = array_keys($tableMeta); - return $columns; - } - - /** - * Returns an array containing the names of all the primary key columns in - * the $tableName table. - * - * @param string $tableName - * @return array - */ - public function getTablePrimaryKeys($tableName) - { - $tableMeta = $this->getTableDescription($tableName); - - $primaryColumnNames = array(); - foreach($tableMeta AS $column) { - if($column['PRIMARY'] == true) { - $primaryColumnNames[] = $column['COLUMN_NAME']; - } - } - return $primaryColumnNames; - } - - /** - * Returns the name of the default schema. - * - * @return string - */ - public function getSchema() - { - return $this->_schema; - } - - /** - * Returns a quoted schema object. (table name, column name, etc) - * - * @param string $object - * @return string - */ - public function quoteSchemaObject($object) - { - return $this->_connection->quoteIdentifier($object); - } - - /** - * Returns true if the rdbms allows cascading - * - * @return bool - */ - public function allowsCascading() - { - return false; - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php deleted file mode 100644 index 2f162352d..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/DeleteAll.php +++ /dev/null @@ -1,81 +0,0 @@ -getTableMetaData()->getTableName(); - $connection->getConnection()->delete($tableName); - } catch (Exception $e) { - require_once "PHPUnit/Extensions/Database/Operation/Exception.php"; - throw new PHPUnit_Extensions_Database_Operation_Exception('DELETEALL', 'DELETE FROM '.$tableName.'', array(), $table, $e->getMessage()); - } - } - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php deleted file mode 100644 index c9dec6fd1..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Insert.php +++ /dev/null @@ -1,104 +0,0 @@ -createDataSet(); - - $dsIterator = $dataSet->getIterator(); - - foreach($dsIterator as $table) { - $tableName = $table->getTableMetaData()->getTableName(); - - $db = $connection->getConnection(); - for($i = 0; $i < $table->getRowCount(); $i++) { - $values = $this->buildInsertValues($table, $i); - try { - $db->insert($tableName, $values); - } catch (Exception $e) { - throw new PHPUnit_Extensions_Database_Operation_Exception("INSERT", "INSERT INTO ".$tableName." [..]", $values, $table, $e->getMessage()); - } - } - } - } - - /** - * - * @param PHPUnit_Extensions_Database_DataSet_ITable $table - * @param int $rowNum - * @return array - */ - protected function buildInsertValues(PHPUnit_Extensions_Database_DataSet_ITable $table, $rowNum) - { - $values = array(); - foreach($table->getTableMetaData()->getColumns() as $columnName) { - $values[$columnName] = $table->getValue($rowNum, $columnName); - } - return $values; - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php deleted file mode 100644 index 3d2dffe8b..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php +++ /dev/null @@ -1,130 +0,0 @@ -getReverseIterator() AS $table) { - try { - $tableName = $table->getTableMetaData()->getTableName(); - $this->_truncate($connection->getConnection(), $tableName); - } catch (Exception $e) { - throw new PHPUnit_Extensions_Database_Operation_Exception('TRUNCATE', 'TRUNCATE '.$tableName.'', array(), $table, $e->getMessage()); - } - } - } - - /** - * Truncate a given table. - * - * @param Zend_Db_Adapter_Abstract $db - * @param string $tableName - * @return void - */ - protected function _truncate(Zend_Db_Adapter_Abstract $db, $tableName) - { - $tableName = $db->quoteIdentifier($tableName, true); - if($db instanceof Zend_Db_Adapter_Pdo_Sqlite) { - $db->query('DELETE FROM '.$tableName); - } else if($db instanceof Zend_Db_Adapter_Db2) { - /*if(strstr(PHP_OS, "WIN")) { - $file = tempnam(sys_get_temp_dir(), "zendtestdbibm_"); - file_put_contents($file, ""); - $db->query('IMPORT FROM '.$file.' OF DEL REPLACE INTO '.$tableName); - unlink($file); - } else { - $db->query('IMPORT FROM /dev/null OF DEL REPLACE INTO '.$tableName); - }*/ - require_once "Zend/Exception.php"; - throw Zend_Exception("IBM Db2 TRUNCATE not supported."); - } else if($this->_isMssqlOrOracle($db)) { - $db->query('TRUNCATE TABLE '.$tableName); - } else if($db instanceof Zend_Db_Adapter_Pdo_Pgsql) { - $db->query('TRUNCATE '.$tableName.' CASCADE'); - } else { - $db->query('TRUNCATE '.$tableName); - } - } - - /** - * Detect if an adapter is for Mssql or Oracle Databases. - * - * @param Zend_Db_Adapter_Abstract $db - * @return bool - */ - private function _isMssqlOrOracle($db) - { - return ( - $db instanceof Zend_Db_Adapter_Pdo_Mssql || - $db instanceof Zend_Db_Adapter_Sqlsrv || - $db instanceof Zend_Db_Adapter_Pdo_Oci || - $db instanceof Zend_Db_Adapter_Oracle - ); - } -} \ No newline at end of file diff --git a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php b/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php deleted file mode 100644 index 882599196..000000000 --- a/airtime_mvc/tests/library/Zend/Test/PHPUnit/Db/SimpleTester.php +++ /dev/null @@ -1,95 +0,0 @@ -connection = $connection; - $this->setUpOperation = new PHPUnit_Extensions_Database_Operation_Composite(array( - new Zend_Test_PHPUnit_Db_Operation_Truncate(), - new Zend_Test_PHPUnit_Db_Operation_Insert(), - )); - $this->tearDownOperation = PHPUnit_Extensions_Database_Operation_Factory::NONE(); - } - - /** - * Set Up the database using the given Dataset and the SetUp strategy "Truncate, then Insert" - * - * @param PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet - */ - public function setUpDatabase(PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet) - { - $this->setDataSet($dataSet); - $this->onSetUp(); - } -} \ No newline at end of file From 73130f02e5fdcd33d705d7657e13f456a7fec8cc Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 18 Dec 2013 16:11:03 -0500 Subject: [PATCH 04/22] CC-5651: Unit Test the Scheduler Added xml cc_show seed file and cc_show creation test file --- .../files/cc_show_insertIntoAssertion.xml | 33 +++++++++++++++++++ .../application/models/files/cc_show_seed.xml | 18 ++++++++++ 2 files changed, 51 insertions(+) diff --git a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml b/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml index e69de29bb..97e2cc5ce 100644 --- a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml +++ b/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml @@ -0,0 +1,33 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable + + 1 + test show + + + + ffffff + 364492 + false + false + + + false + true + +
+
\ No newline at end of file diff --git a/airtime_mvc/tests/application/models/files/cc_show_seed.xml b/airtime_mvc/tests/application/models/files/cc_show_seed.xml index e69de29bb..2bef820ad 100644 --- a/airtime_mvc/tests/application/models/files/cc_show_seed.xml +++ b/airtime_mvc/tests/application/models/files/cc_show_seed.xml @@ -0,0 +1,18 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable +
+
\ No newline at end of file From bc7f83c9ff72b8d4f212e3fec5b35f0483806403 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 18 Dec 2013 16:26:22 -0500 Subject: [PATCH 05/22] CC-5651: Unit Test the Scheduler * Updated README --- airtime_mvc/tests/README.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/tests/README.txt b/airtime_mvc/tests/README.txt index 1672b89aa..9034b2977 100644 --- a/airtime_mvc/tests/README.txt +++ b/airtime_mvc/tests/README.txt @@ -1,15 +1,17 @@ To get the Airtime unit tests running: ========================== -1) Install PHPUnit +1) Install PHPUnit and DbUnit -wget https://phar.phpunit.de/phpunit.phar -chmod +x phpunit.phar -sudo mv phpunit.phar /usr/local/bin/phpunit - -2) Install the DbUnit extension +We explicitly install PHPUnit 3.4 because that's as a new of a version +as is supported by Zend Framework 1: sudo pear channel-discover pear.phpunit.de sudo pear channel-discover pear.symfony.com -sudo pear install --alldeps phpunit/DbUnit +sudo pear channel-discover pear.symfony-project.com +sudo pear install channel://pear.symfony-project.com/YAML +sudo pear install pear.phpunit.de/PHPUnit-3.4.15 +sudo pear install pear.phpunit.de/DbUnit-1.0.3 + + From 083ca601c9dd4906bec2bf84cd335f11cfc0c992 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 18 Dec 2013 16:42:32 -0500 Subject: [PATCH 06/22] CC-5651: Unit Test the Scheduler * README.txt update for unit tests --- airtime_mvc/tests/README.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/tests/README.txt b/airtime_mvc/tests/README.txt index 9034b2977..9489d7c6d 100644 --- a/airtime_mvc/tests/README.txt +++ b/airtime_mvc/tests/README.txt @@ -1,7 +1,7 @@ To get the Airtime unit tests running: ========================== -1) Install PHPUnit and DbUnit +1) Install PHPUnit We explicitly install PHPUnit 3.4 because that's as a new of a version as is supported by Zend Framework 1: @@ -10,8 +10,13 @@ sudo pear channel-discover pear.phpunit.de sudo pear channel-discover pear.symfony.com sudo pear channel-discover pear.symfony-project.com sudo pear install channel://pear.symfony-project.com/YAML -sudo pear install pear.phpunit.de/PHPUnit-3.4.15 -sudo pear install pear.phpunit.de/DbUnit-1.0.3 +sudo pear install pear.phpunit.de/PHPUnit-3.4.10 + + +DO NOT INSTALL the DbUnit package! +DbUnit overwrites a file that's actually part of the PHPUnit package, + /usr/share/php/PHPUnit/Extensions/Database/DataSet/QueryTable.php +with a version that's incompatible and gives an error for us. From 1cf5d3489e976efd5b6a8e7c4eac206f2a761d12 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 18 Dec 2013 17:40:13 -0500 Subject: [PATCH 07/22] CC-5651: Unit Test the Scheduler * Got the database connection working in our unit test --- airtime_mvc/tests/application/bootstrap.php | 1 + airtime_mvc/tests/application/models/ShowTest.php | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index d11b2e346..b5e40e141 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -35,4 +35,5 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { } require_once 'Zend/Application.php'; +require_once 'Zend/Config.php'; #require_once 'DatabaseTestCase.php'; diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index f16beb530..3b8f91d98 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -20,8 +20,16 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function getConnection() { if ($this->_connectionMock == null) { - $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production'); - $connection = Zend_Db::factory($config->db); + $config = new Zend_Config( + array( + 'host' => '127.0.0.1', + 'dbname' => 'airtime_test', + 'username' => 'airtime', + 'password' => 'airtime' + ) + ); + var_dump($config); + $connection = Zend_Db::factory('pdo_pgsql', $config); $this->_connectionMock = $this->createZendDbConnection( $connection, @@ -73,4 +81,4 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds ); } -} \ No newline at end of file +} From 813043f52a80fe5317fca61c4d6185bd9e756e87 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 18 Dec 2013 18:59:42 -0500 Subject: [PATCH 08/22] CC-5651: Unit Test the Scheduler * More database connection stuff --- airtime_mvc/tests/application/models/ShowTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 3b8f91d98..366c7b976 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -8,6 +8,9 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function setUp() { $this->bootstrap = array($this, 'appBootstrap'); + //TODO: Use AirtimeInstall.php to create the database and database tables + //AirtimeInstall::createDatabase(blah blah); + //AirtimeInstall::createDatabaseTables(blah blah); parent::setUp(); } @@ -28,7 +31,6 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase 'password' => 'airtime' ) ); - var_dump($config); $connection = Zend_Db::factory('pdo_pgsql', $config); $this->_connectionMock = $this->createZendDbConnection( From a7353ba6caf3b69b316729c4124acde9557b7c0b Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 19 Dec 2013 11:09:49 -0500 Subject: [PATCH 09/22] CC-5651: Unit Test the Scheduler * Improved bootstrapping, fixed a bunch of errors * Start a session, got Zend_Application working --- airtime_mvc/tests/application/bootstrap.php | 4 ++++ airtime_mvc/tests/application/models/ShowTest.php | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index b5e40e141..568ac0ef2 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -36,4 +36,8 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; +require_once 'Zend/Session.php'; #require_once 'DatabaseTestCase.php'; + +//Start the Session TODO: Move to an _initSession() function in a class +Zend_Session::start(); diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 366c7b976..5e69e0a9f 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -7,7 +7,8 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function setUp() { - $this->bootstrap = array($this, 'appBootstrap'); + //$this->bootstrap = array($this, 'appBootstrap'); + $this->appBootstrap(); //TODO: Use AirtimeInstall.php to create the database and database tables //AirtimeInstall::createDatabase(blah blah); //AirtimeInstall::createDatabaseTables(blah blah); @@ -17,6 +18,7 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function appBootstrap() { $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH .'/configs/application.ini'); + Zend_Session::start(); $this->application->bootstrap(); } From 585d62bfeff8398c62bb994f4aa55e401e88265f Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 19 Dec 2013 11:11:26 -0500 Subject: [PATCH 10/22] CC-5651: Unit Test the Scheduler * Comments --- airtime_mvc/tests/application/models/ShowTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 5e69e0a9f..1ea6e1517 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -7,7 +7,9 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function setUp() { + //XXX: Zend_Test_PHPUnit_DatabaseTestCase doesn't use this for whatever reason: //$this->bootstrap = array($this, 'appBootstrap'); + //So instead we just manually call the appBootstrap here: $this->appBootstrap(); //TODO: Use AirtimeInstall.php to create the database and database tables //AirtimeInstall::createDatabase(blah blah); From 6512f033d112bcca896898a1d95732957197ea73 Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 19 Dec 2013 11:16:06 -0500 Subject: [PATCH 11/22] CC-5651: Unit Test the Scheduler Remove zend session stuff Add services, install scripts to include path --- airtime_mvc/tests/application/bootstrap.php | 13 +++++++++---- airtime_mvc/tests/application/models/ShowTest.php | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index 568ac0ef2..d752e80bd 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -21,11 +21,20 @@ set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library') ))); +// Ensure library/ is on include_path +set_include_path(implode(PATH_SEPARATOR, array( + get_include_path(), + realpath(APPLICATION_PATH . '/../../install_minimal/include') +))); + set_include_path(APPLICATION_PATH . '/common' . PATH_SEPARATOR . get_include_path()); //Propel classes. set_include_path(APPLICATION_PATH . '/models' . PATH_SEPARATOR . get_include_path()); +//Services +set_include_path(APPLICATION_PATH . '/services' . PATH_SEPARATOR . get_include_path()); + //Controller plugins. set_include_path(APPLICATION_PATH . '/controllers/plugins' . PATH_SEPARATOR . get_include_path()); @@ -36,8 +45,4 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; -require_once 'Zend/Session.php'; #require_once 'DatabaseTestCase.php'; - -//Start the Session TODO: Move to an _initSession() function in a class -Zend_Session::start(); diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 1ea6e1517..0afc317f3 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -1,5 +1,7 @@ Date: Thu, 19 Dec 2013 11:40:35 -0500 Subject: [PATCH 12/22] CC-5651: Unit Test the Scheduler * Mock config for database connections --- airtime_mvc/tests/application/airtime.conf | 29 +++++++++++++++++++ airtime_mvc/tests/application/bootstrap.php | 4 +++ .../tests/application/models/ShowTest.php | 1 - 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 airtime_mvc/tests/application/airtime.conf diff --git a/airtime_mvc/tests/application/airtime.conf b/airtime_mvc/tests/application/airtime.conf new file mode 100755 index 000000000..21275e80a --- /dev/null +++ b/airtime_mvc/tests/application/airtime.conf @@ -0,0 +1,29 @@ +[database] +host = localhost +dbname = airtime_test +dbuser = airtime +dbpass = airtime + +[rabbitmq] +host = 127.0.0.1 +port = 5672 +user = airtime +password = GTUR1HVMU7GPIO3FETKY +vhost = /airtime + +[general] +api_key = H2NRICX6CM8F50CU123C +web_server_user = www-data +airtime_dir = /usr/share/airtime +base_url = localhost +base_port = 80 +base_dir = / +cache_ahead_hours = 1 + +[monit] +monit_user = guest +monit_password = airtime + +[soundcloud] +connection_retries = 3 +time_between_retries = 60 diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index d752e80bd..25b478cb9 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -43,6 +43,10 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { set_include_path('/usr/share/php/libzend-framework-php' . PATH_SEPARATOR . get_include_path()); } +$_SERVER['AIRTIME_CONF'] = 'airtime.conf'; + require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; #require_once 'DatabaseTestCase.php'; +require_once 'Zend/Session.php'; +Zend_Session::start(); diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 0afc317f3..71cd63eea 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -22,7 +22,6 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase public function appBootstrap() { $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH .'/configs/application.ini'); - Zend_Session::start(); $this->application->bootstrap(); } From c4adbab04e312428ae849f1450f3f37c7ac0f8a6 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 19 Dec 2013 12:01:32 -0500 Subject: [PATCH 13/22] CC-5651: Unit Test the Scheduler * Fixed the test airtime.conf a bit * Create the database tables and db properly --- .../tests/{application => }/airtime.conf | 0 airtime_mvc/tests/application/bootstrap.php | 2 -- .../tests/application/models/ShowTest.php | 24 ++++++++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) rename airtime_mvc/tests/{application => }/airtime.conf (100%) diff --git a/airtime_mvc/tests/application/airtime.conf b/airtime_mvc/tests/airtime.conf similarity index 100% rename from airtime_mvc/tests/application/airtime.conf rename to airtime_mvc/tests/airtime.conf diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index 25b478cb9..5c4581627 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -43,8 +43,6 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { set_include_path('/usr/share/php/libzend-framework-php' . PATH_SEPARATOR . get_include_path()); } -$_SERVER['AIRTIME_CONF'] = 'airtime.conf'; - require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; #require_once 'DatabaseTestCase.php'; diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 71cd63eea..29d426563 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -1,6 +1,7 @@ bootstrap = array($this, 'appBootstrap'); //So instead we just manually call the appBootstrap here: - $this->appBootstrap(); //TODO: Use AirtimeInstall.php to create the database and database tables - //AirtimeInstall::createDatabase(blah blah); - //AirtimeInstall::createDatabaseTables(blah blah); + //Load Database parameters + + //We need to load the config before our app bootstrap runs. The config + //is normally + $_SERVER['AIRTIME_CONF'] = 'airtime.conf'; + $CC_CONFIG = Config::getConfig(); + + $dbuser = $CC_CONFIG['dsn']['username']; + $dbpasswd = $CC_CONFIG['dsn']['password']; + $dbname = $CC_CONFIG['dsn']['database']; + $dbhost = $CC_CONFIG['dsn']['hostspec']; + echo($dbuser); + echo($dbpasswd); + echo($dbname); + echo($dbhost); + AirtimeInstall::createDatabase(); + AirtimeInstall::createDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost); + + $this->appBootstrap(); + parent::setUp(); } From 3b27e74ca02e53a5a3cd574943a796954b47baa3 Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 19 Dec 2013 15:31:12 -0500 Subject: [PATCH 14/22] CC-5651: Unit Test the Scheduler Got test to run! --- airtime_mvc/tests/application/bootstrap.php | 10 ++++++++++ airtime_mvc/tests/application/models/ShowTest.php | 1 + 2 files changed, 11 insertions(+) diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index 5c4581627..bb5bdb43e 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -21,6 +21,11 @@ set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library') ))); +set_include_path(implode(PATH_SEPARATOR, array( + get_include_path(), + realpath(APPLICATION_PATH . '/../library/propel/runtime/lib') +))); + // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( get_include_path(), @@ -45,6 +50,11 @@ if (file_exists('/usr/share/php/libzend-framework-php')) { require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; + +require_once APPLICATION_PATH.'/configs/conf.php'; +require_once 'propel/runtime/lib/Propel.php'; +Propel::init("../application/configs/airtime-conf-production.php"); + #require_once 'DatabaseTestCase.php'; require_once 'Zend/Session.php'; Zend_Session::start(); diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 29d426563..5a68462bb 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -31,6 +31,7 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase echo($dbhost); AirtimeInstall::createDatabase(); AirtimeInstall::createDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost); + AirtimeInstall::SetDefaultTimezone(); $this->appBootstrap(); From 298a9e6b7c6c6a88f28a221c50249970b1e106b8 Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 19 Dec 2013 16:03:16 -0500 Subject: [PATCH 15/22] CC-5651: Unit Test the Scheduler First test passes! --- airtime_mvc/tests/application/models/ShowTest.php | 6 +++--- .../models/files/cc_show_insertIntoAssertion.xml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 5a68462bb..5cbc7594d 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -88,11 +88,11 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase "add_show_genre" => null, "add_show_color" => "ffffff", "add_show_background_color" => "364492", - "cb_airtime_auth" => 0, - "cb_custom_auth" => 0, + "cb_airtime_auth" => false, + "cb_custom_auth" => false, "custom_username" => null, "custom_password" => null, - "add_show_linked" => 0 + "add_show_linked" => false ); $showService->setCcShow($data); diff --git a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml b/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml index 97e2cc5ce..d790f8985 100644 --- a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml +++ b/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml @@ -22,12 +22,12 @@ ffffff 364492 - false - false + + - false - true + + 1 \ No newline at end of file From fea3f4073a2210876629f01ee0e5b466fe2da6e2 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 19 Dec 2013 16:58:11 -0500 Subject: [PATCH 16/22] CC-5651: Unit Test the Scheduler * Added runtests.sh script for unit tests * Use the airtime_test database config in Config.php, propel * First unit test passes! :-) --- airtime_mvc/application/configs/conf.php | 9 +++++++-- airtime_mvc/build/build.properties | 2 +- airtime_mvc/build/runtime-conf.xml | 6 ++++++ airtime_mvc/tests/application/models/ShowTest.php | 8 ++------ airtime_mvc/tests/runtests.sh | 5 +++++ 5 files changed, 21 insertions(+), 9 deletions(-) create mode 100755 airtime_mvc/tests/runtests.sh diff --git a/airtime_mvc/application/configs/conf.php b/airtime_mvc/application/configs/conf.php index 13b4a06bd..903b845c2 100644 --- a/airtime_mvc/application/configs/conf.php +++ b/airtime_mvc/application/configs/conf.php @@ -18,8 +18,13 @@ class Config { "rootDir" => __DIR__."/../.." ); - $filename = isset($_SERVER['AIRTIME_CONF']) ? $_SERVER['AIRTIME_CONF'] : "/etc/airtime/airtime.conf"; - + //In the unit testing environment, we always want to use our local airtime.conf in airtime_mvc/application/test: + if (getenv('AIRTIME_UNIT_TEST') == '1') { + $filename = "airtime.conf"; + } else { + $filename = isset($_SERVER['AIRTIME_CONF']) ? $_SERVER['AIRTIME_CONF'] : "/etc/airtime/airtime.conf"; + } + $values = parse_ini_file($filename, true); // Name of the web server user diff --git a/airtime_mvc/build/build.properties b/airtime_mvc/build/build.properties index 1a83f8732..de8c64cb5 100644 --- a/airtime_mvc/build/build.properties +++ b/airtime_mvc/build/build.properties @@ -1,6 +1,6 @@ #Note: project.home is automatically generated by the propel-install script. #Any manual changes to this value will be overwritten. -project.home = /home/denise/airtime/airtime_mvc +project.home = /home/asantoni/airtime/airtime_mvc project.build = ${project.home}/build #Database driver diff --git a/airtime_mvc/build/runtime-conf.xml b/airtime_mvc/build/runtime-conf.xml index fff70863a..21f5bcfe2 100644 --- a/airtime_mvc/build/runtime-conf.xml +++ b/airtime_mvc/build/runtime-conf.xml @@ -8,6 +8,12 @@ pgsql:host=localhost;port=5432;dbname=airtime;user=airtime;password=airtime + + pgsql + + pgsql:host=localhost;port=5432;dbname=airtime_test;user=airtime;password=airtime + + diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 5cbc7594d..8b93e6dad 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -17,18 +17,14 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase //Load Database parameters //We need to load the config before our app bootstrap runs. The config - //is normally - $_SERVER['AIRTIME_CONF'] = 'airtime.conf'; + //is normally $CC_CONFIG = Config::getConfig(); $dbuser = $CC_CONFIG['dsn']['username']; $dbpasswd = $CC_CONFIG['dsn']['password']; $dbname = $CC_CONFIG['dsn']['database']; $dbhost = $CC_CONFIG['dsn']['hostspec']; - echo($dbuser); - echo($dbpasswd); - echo($dbname); - echo($dbhost); + AirtimeInstall::createDatabase(); AirtimeInstall::createDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost); AirtimeInstall::SetDefaultTimezone(); diff --git a/airtime_mvc/tests/runtests.sh b/airtime_mvc/tests/runtests.sh new file mode 100755 index 000000000..86d1ddf5b --- /dev/null +++ b/airtime_mvc/tests/runtests.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +export AIRTIME_UNIT_TEST="1" +phpunit + From 94912ed4453585f8029e563c847ff306ffae426f Mon Sep 17 00:00:00 2001 From: drigato Date: Mon, 6 Jan 2014 18:08:57 -0500 Subject: [PATCH 17/22] CC-5651: Unit Test the Scheduler Created file that returns test data Added a non-repeating, non-record&rebroadcast show creation test (not working yet) Updated the cc_show_seed.xml file to include all 5 show tables --- airtime_mvc/tests/application/bootstrap.php | 3 ++ .../tests/application/models/ShowTest.php | 26 +++++++++++ .../application/models/files/cc_show_seed.xml | 44 ++++++++++++++++++- 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index bb5bdb43e..54b634f05 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -43,6 +43,9 @@ set_include_path(APPLICATION_PATH . '/services' . PATH_SEPARATOR . get_include_p //Controller plugins. set_include_path(APPLICATION_PATH . '/controllers/plugins' . PATH_SEPARATOR . get_include_path()); +//test data +set_include_path(APPLICATION_PATH . '/../tests/application/testdata' . PATH_SEPARATOR . get_include_path()); + //Zend framework if (file_exists('/usr/share/php/libzend-framework-php')) { set_include_path('/usr/share/php/libzend-framework-php' . PATH_SEPARATOR . get_include_path()); diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 8b93e6dad..c26ac054a 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -3,6 +3,7 @@ require_once "Zend/Test/PHPUnit/DatabaseTestCase.php"; require_once "ShowService.php"; require_once "../application/configs/conf.php"; require_once "AirtimeInstall.php"; +require_once "ShowData.php"; class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase { @@ -103,4 +104,29 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds ); } + + /* Tests that a non-repeating, non-record, and non-rebroadcast show + * gets created properly + */ + public function testNoRepeatNoRRShowCreated() + { + $data = ShowData::getNoRepeatNoRRData(); + $showService = new Application_Service_ShowService(); + + $showService->addUpdateShow($data); + + $ds = new Zend_Test_PHPUnit_Db_DataSet_QueryDataSet( + $this->getConnection() + ); + $ds->addTable('cc_show', 'select * from cc_show'); + $ds->addTable('cc_show_days', 'select * from cc_show_days'); + $ds->addTable('cc_show_instances', 'select * from cc_show_instances'); + $ds->addTable('cc_show_rebroadcast', 'select * from cc_show_rebroadcast'); + $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); + + $this->assertDataSetsEqual( + $this->createXmlDataSet(dirname(__FILE__)."/files/cc_show_insertIntoAssertion.xml"), + $ds + ); + } } diff --git a/airtime_mvc/tests/application/models/files/cc_show_seed.xml b/airtime_mvc/tests/application/models/files/cc_show_seed.xml index 2bef820ad..988499585 100644 --- a/airtime_mvc/tests/application/models/files/cc_show_seed.xml +++ b/airtime_mvc/tests/application/models/files/cc_show_seed.xml @@ -14,5 +14,47 @@ live_stream_pass linked is_linkable - + + + + id + first_show + last_show + start_time + timezone + duration + day + repeat_type + next_pop_date + show_id + record +
+ + + id + starts + ends + show_id + record + rebroadcast + instance_id + file_id + time_filled + created + last_scheduled + modified_instance +
+ + + id + day_offset + start_time + show_id +
+ + + id + show_id + subjs_id +
\ No newline at end of file From 3baf7929ceeacbf05d05a715b6b528cc1238abef Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 7 Jan 2014 13:03:34 -0500 Subject: [PATCH 18/22] Added missing ShowData.php thingy for unit testing --- .../tests/application/testdata/ShowData.php | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 airtime_mvc/tests/application/testdata/ShowData.php diff --git a/airtime_mvc/tests/application/testdata/ShowData.php b/airtime_mvc/tests/application/testdata/ShowData.php new file mode 100644 index 000000000..70d4e2394 --- /dev/null +++ b/airtime_mvc/tests/application/testdata/ShowData.php @@ -0,0 +1,78 @@ + -1, + "add_show_instance_id" => -1, + "add_show_name" => "gggg", + "add_show_url" => null, + "add_show_genre" => null, + "add_show_description" => null, + "add_show_start_date" => "2014-01-08", + "add_show_start_time" => "00:00", + "add_show_end_date_no_repeat" => "2014-01-08", + "add_show_end_time" => "01:00", + "add_show_duration" => "01:00", + "add_show_timezone" => "America/Toronto", + "add_show_repeats" => 0, + "add_show_linked" => 0, + "add_show_repeat_type" => 0, + "add_show_monthly_repeat_type" => 2, + "add_show_end_date" => "2014-01-08", + "add_show_no_end" => 1, + "cb_airtime_auth" => 0, + "cb_custom_auth" => 0, + "custom_username" => null, + "custom_password" => null, + "add_show_record" => 0, + "add_show_rebroadcast" => 0, + "add_show_rebroadcast_date_absolute_1" => null, + "add_show_rebroadcast_time_absolute_1" => null, + "add_show_rebroadcast_date_absolute_2" => null, + "add_show_rebroadcast_time_absolute_2" => null, + "add_show_rebroadcast_date_absolute_3" => null, + "add_show_rebroadcast_time_absolute_3" => null, + "add_show_rebroadcast_date_absolute_4" => null, + "add_show_rebroadcast_time_absolute_4" => null, + "add_show_rebroadcast_date_absolute_5" => null, + "add_show_rebroadcast_time_absolute_5" => null, + "add_show_rebroadcast_date_absolute_6" => null, + "add_show_rebroadcast_time_absolute_6" => null, + "add_show_rebroadcast_date_absolute_7" => null, + "add_show_rebroadcast_time_absolute_7" => null, + "add_show_rebroadcast_date_absolute_8" => null, + "add_show_rebroadcast_time_absolute_8" => null, + "add_show_rebroadcast_date_absolute_9" => null, + "add_show_rebroadcast_time_absolute_9" => null, + "add_show_rebroadcast_date_absolute_10" => null, + "add_show_rebroadcast_time_absolute_10" => null, + "add_show_rebroadcast_date_1" => null, + "add_show_rebroadcast_time_1" => null, + "add_show_rebroadcast_date_2" => null, + "add_show_rebroadcast_time_2" => null, + "add_show_rebroadcast_date_3" => null, + "add_show_rebroadcast_time_3" => null, + "add_show_rebroadcast_date_4" => null, + "add_show_rebroadcast_time_4" => null, + "add_show_rebroadcast_date_5" => null, + "add_show_rebroadcast_time_5" => null, + "add_show_rebroadcast_date_6" => null, + "add_show_rebroadcast_time_6" => null, + "add_show_rebroadcast_date_7" => null, + "add_show_rebroadcast_time_7" => null, + "add_show_rebroadcast_date_8" => null, + "add_show_rebroadcast_time_8" => null, + "add_show_rebroadcast_date_9" => null, + "add_show_rebroadcast_time_9" => null, + "add_show_rebroadcast_date_10" => null, + "add_show_rebroadcast_time_10" => null, + "add_show_hosts_autocomplete" => null, + "add_show_background_color" => "3061c0", + "add_show_color" => "ffffff", + "add_show_hosts" => null, + "add_show_day_check" => null + ); + } +} \ No newline at end of file From ef13d5966f3b6c0e8e41c53a3c2180638510b597 Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 8 Jan 2014 15:51:11 -0500 Subject: [PATCH 19/22] CC-5651: Unit Test the Scheduler Added test for a non-repeat and non-record show Added a helper class --- airtime_mvc/tests/application/bootstrap.php | 3 + .../tests/application/helpers/TestHelper.php | 29 ++++++ .../tests/application/models/ShowTest.php | 15 ++- .../application/models/files/cc_show_seed.xml | 65 ++----------- .../models/files/noRepeatNoRRShowCreated.xml | 93 +++++++++++++++++++ .../tests/application/testdata/ShowData.php | 12 +-- 6 files changed, 154 insertions(+), 63 deletions(-) create mode 100644 airtime_mvc/tests/application/helpers/TestHelper.php create mode 100644 airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml diff --git a/airtime_mvc/tests/application/bootstrap.php b/airtime_mvc/tests/application/bootstrap.php index 54b634f05..c30574ccc 100644 --- a/airtime_mvc/tests/application/bootstrap.php +++ b/airtime_mvc/tests/application/bootstrap.php @@ -46,6 +46,9 @@ set_include_path(APPLICATION_PATH . '/controllers/plugins' . PATH_SEPARATOR . ge //test data set_include_path(APPLICATION_PATH . '/../tests/application/testdata' . PATH_SEPARATOR . get_include_path()); +//helper functions +set_include_path(APPLICATION_PATH . '/../tests/application/helpers' . PATH_SEPARATOR . get_include_path()); + //Zend framework if (file_exists('/usr/share/php/libzend-framework-php')) { set_include_path('/usr/share/php/libzend-framework-php' . PATH_SEPARATOR . get_include_path()); diff --git a/airtime_mvc/tests/application/helpers/TestHelper.php b/airtime_mvc/tests/application/helpers/TestHelper.php new file mode 100644 index 000000000..9b332bda0 --- /dev/null +++ b/airtime_mvc/tests/application/helpers/TestHelper.php @@ -0,0 +1,29 @@ +setIdentity('admin') + ->setCredential('admin'); + + $auth = Zend_Auth::getInstance(); + $result = $auth->authenticate($authAdapter); + if ($result->isValid()) { + //all info about this user from the login table omit only the password + $userInfo = $authAdapter->getResultRowObject(null, 'password'); + + //the default storage is a session with namespace Zend_Auth + $authStorage = $auth->getStorage(); + $authStorage->write($userInfo); + + //Application_Model_LoginAttempts::resetAttempts($_SERVER['REMOTE_ADDR']); + //Application_Model_Subjects::resetLoginAttempts($username); + + //$tempSess = new Zend_Session_Namespace("referrer"); + //$tempSess->referrer = 'login'; + } + } +} \ No newline at end of file diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index c26ac054a..8574e55e5 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -4,6 +4,7 @@ require_once "ShowService.php"; require_once "../application/configs/conf.php"; require_once "AirtimeInstall.php"; require_once "ShowData.php"; +require_once "TestHelper.php"; class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase { @@ -110,6 +111,8 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase */ public function testNoRepeatNoRRShowCreated() { + TestHelper::loginUser(); + $data = ShowData::getNoRepeatNoRRData(); $showService = new Application_Service_ShowService(); @@ -120,13 +123,21 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase ); $ds->addTable('cc_show', 'select * from cc_show'); $ds->addTable('cc_show_days', 'select * from cc_show_days'); - $ds->addTable('cc_show_instances', 'select * from cc_show_instances'); + $ds->addTable('cc_show_instances', 'select id, starts, ends, show_id, record, rebroadcast, instance_id, file_id, time_filled, last_scheduled, modified_instance from cc_show_instances'); $ds->addTable('cc_show_rebroadcast', 'select * from cc_show_rebroadcast'); $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); $this->assertDataSetsEqual( - $this->createXmlDataSet(dirname(__FILE__)."/files/cc_show_insertIntoAssertion.xml"), + $this->createXmlDataSet(dirname(__FILE__)."/files/noRepeatNoRRShowCreated.xml"), $ds ); } + + /* Tests that a weekly repeating, non-record, non-rebroadcast show + * gets created correctly + */ + public function testWeeklyRepeatNoRRShowCreated() + { + + } } diff --git a/airtime_mvc/tests/application/models/files/cc_show_seed.xml b/airtime_mvc/tests/application/models/files/cc_show_seed.xml index 988499585..ced616de7 100644 --- a/airtime_mvc/tests/application/models/files/cc_show_seed.xml +++ b/airtime_mvc/tests/application/models/files/cc_show_seed.xml @@ -1,60 +1,15 @@ - +
id - name - url - genre - description - color - background_color - live_stream_using_airtime_auth - live_stream_using_custom_auth - live_stream_user - live_stream_pass - linked - is_linkable -
- - - id - first_show - last_show - start_time - timezone - duration - day - repeat_type - next_pop_date - show_id - record -
- - - id - starts - ends - show_id - record - rebroadcast - instance_id - file_id - time_filled - created - last_scheduled - modified_instance -
- - - id - day_offset - start_time - show_id -
- - - id - show_id - subjs_id + subjid + keystr + valstr + + 1 + + shows_populated_until + 2016-02-01 05:00:00 +
\ No newline at end of file diff --git a/airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml b/airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml new file mode 100644 index 000000000..f3ef6512a --- /dev/null +++ b/airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml @@ -0,0 +1,93 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable + + 1 + test show + + + + ffffff + 364492 + + + + + + 1 + +
+ + + id + first_show + last_show + start_time + timezone + duration + day + repeat_type + next_pop_date + show_id + record + + 1 + 2016-01-01 + + 00:00:00 + America/Toronto + 01:00 + 5 + -1 + 2016-01-01 + 1 + 0 + +
+ + + id + starts + ends + show_id + record + rebroadcast + instance_id + file_id + time_filled + last_scheduled + modified_instance + + 1 + 2016-01-01 05:00:00 + 2016-01-01 06:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + +
+ + +
+ + +
+
\ No newline at end of file diff --git a/airtime_mvc/tests/application/testdata/ShowData.php b/airtime_mvc/tests/application/testdata/ShowData.php index 70d4e2394..217ffd4c0 100644 --- a/airtime_mvc/tests/application/testdata/ShowData.php +++ b/airtime_mvc/tests/application/testdata/ShowData.php @@ -6,21 +6,21 @@ Class ShowData return array( "add_show_id" => -1, "add_show_instance_id" => -1, - "add_show_name" => "gggg", + "add_show_name" => "test show", "add_show_url" => null, "add_show_genre" => null, "add_show_description" => null, - "add_show_start_date" => "2014-01-08", + "add_show_start_date" => "2016-01-01", "add_show_start_time" => "00:00", - "add_show_end_date_no_repeat" => "2014-01-08", + "add_show_end_date_no_repeat" => "2016-01-01", "add_show_end_time" => "01:00", - "add_show_duration" => "01:00", + "add_show_duration" => "01h 00m", "add_show_timezone" => "America/Toronto", "add_show_repeats" => 0, "add_show_linked" => 0, "add_show_repeat_type" => 0, "add_show_monthly_repeat_type" => 2, - "add_show_end_date" => "2014-01-08", + "add_show_end_date" => "2016-01-01", "add_show_no_end" => 1, "cb_airtime_auth" => 0, "cb_custom_auth" => 0, @@ -69,7 +69,7 @@ Class ShowData "add_show_rebroadcast_date_10" => null, "add_show_rebroadcast_time_10" => null, "add_show_hosts_autocomplete" => null, - "add_show_background_color" => "3061c0", + "add_show_background_color" => "364492", "add_show_color" => "ffffff", "add_show_hosts" => null, "add_show_day_check" => null From 71022b14132e09eed4b45d301f60f451d9c2a6f1 Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 8 Jan 2014 15:52:46 -0500 Subject: [PATCH 20/22] CC-5651: Unit Test the Scheduler Removed unused code --- airtime_mvc/tests/application/helpers/TestHelper.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/airtime_mvc/tests/application/helpers/TestHelper.php b/airtime_mvc/tests/application/helpers/TestHelper.php index 9b332bda0..861a0044f 100644 --- a/airtime_mvc/tests/application/helpers/TestHelper.php +++ b/airtime_mvc/tests/application/helpers/TestHelper.php @@ -18,12 +18,6 @@ class TestHelper //the default storage is a session with namespace Zend_Auth $authStorage = $auth->getStorage(); $authStorage->write($userInfo); - - //Application_Model_LoginAttempts::resetAttempts($_SERVER['REMOTE_ADDR']); - //Application_Model_Subjects::resetLoginAttempts($username); - - //$tempSess = new Zend_Session_Namespace("referrer"); - //$tempSess->referrer = 'login'; } } } \ No newline at end of file From 4e668b9d77060412d742cbb7cf99487d8a1f9bdb Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 9 Jan 2014 14:38:03 -0500 Subject: [PATCH 21/22] CC-5651: Unit Test the Scheduler Added new test for creating a weekly repeating show Renamed xml files to better reflect which test it belongs to --- .../tests/application/models/ShowTest.php | 31 +++- ...ml => test_ccShowInsertedIntoDatabase.xml} | 0 ...d.xml => test_noRepeatNoRRShowCreated.xml} | 6 +- .../test_weeklyRepeatNoEndNoRRShowCreated.xml | 145 ++++++++++++++++++ .../tests/application/testdata/ShowData.php | 77 +++++++++- 5 files changed, 249 insertions(+), 10 deletions(-) rename airtime_mvc/tests/application/models/files/{cc_show_insertIntoAssertion.xml => test_ccShowInsertedIntoDatabase.xml} (100%) rename airtime_mvc/tests/application/models/files/{noRepeatNoRRShowCreated.xml => test_noRepeatNoRRShowCreated.xml} (94%) create mode 100644 airtime_mvc/tests/application/models/files/test_weeklyRepeatNoEndNoRRShowCreated.xml diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 8574e55e5..9500f4ed9 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -101,7 +101,7 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds->addTable('cc_show', 'select * from cc_show'); $this->assertDataSetsEqual( - $this->createXmlDataSet(dirname(__FILE__)."/files/cc_show_insertIntoAssertion.xml"), + $this->createXmlDataSet(dirname(__FILE__)."/files/test_ccShowInsertedIntoDatabase.xml"), $ds ); } @@ -114,7 +114,7 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase TestHelper::loginUser(); $data = ShowData::getNoRepeatNoRRData(); - $showService = new Application_Service_ShowService(); + $showService = new Application_Service_ShowService(null, $data); $showService->addUpdateShow($data); @@ -128,16 +128,35 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); $this->assertDataSetsEqual( - $this->createXmlDataSet(dirname(__FILE__)."/files/noRepeatNoRRShowCreated.xml"), + $this->createXmlDataSet(dirname(__FILE__)."/files/test_noRepeatNoRRShowCreated.xml"), $ds ); } /* Tests that a weekly repeating, non-record, non-rebroadcast show - * gets created correctly + * with no end date gets created correctly */ - public function testWeeklyRepeatNoRRShowCreated() + public function testWeeklyRepeatNoEndNoRRShowCreated() { - + TestHelper::loginUser(); + + $data = ShowData::getWeeklyRepeatNoEndNoRRData(); + $showService = new Application_Service_ShowService(null, $data); + + $showService->addUpdateShow($data); + + $ds = new Zend_Test_PHPUnit_Db_DataSet_QueryDataSet( + $this->getConnection() + ); + $ds->addTable('cc_show', 'select * from cc_show'); + $ds->addTable('cc_show_days', 'select * from cc_show_days'); + $ds->addTable('cc_show_instances', 'select id, starts, ends, show_id, record, rebroadcast, instance_id, file_id, time_filled, last_scheduled, modified_instance from cc_show_instances'); + $ds->addTable('cc_show_rebroadcast', 'select * from cc_show_rebroadcast'); + $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); + + $this->assertDataSetsEqual( + $this->createXmlDataSet(dirname(__FILE__)."/files/test_weeklyRepeatNoEndNoRRShowCreated.xml"), + $ds + ); } } diff --git a/airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml b/airtime_mvc/tests/application/models/files/test_ccShowInsertedIntoDatabase.xml similarity index 100% rename from airtime_mvc/tests/application/models/files/cc_show_insertIntoAssertion.xml rename to airtime_mvc/tests/application/models/files/test_ccShowInsertedIntoDatabase.xml diff --git a/airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml b/airtime_mvc/tests/application/models/files/test_noRepeatNoRRShowCreated.xml similarity index 94% rename from airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml rename to airtime_mvc/tests/application/models/files/test_noRepeatNoRRShowCreated.xml index f3ef6512a..e68e42c2d 100644 --- a/airtime_mvc/tests/application/models/files/noRepeatNoRRShowCreated.xml +++ b/airtime_mvc/tests/application/models/files/test_noRepeatNoRRShowCreated.xml @@ -48,7 +48,7 @@ 2016-01-01 00:00:00 - America/Toronto + UTC 01:00 5 -1 @@ -72,8 +72,8 @@ modified_instance 1 - 2016-01-01 05:00:00 - 2016-01-01 06:00:00 + 2016-01-01 00:00:00 + 2016-01-01 01:00:00 1 0 0 diff --git a/airtime_mvc/tests/application/models/files/test_weeklyRepeatNoEndNoRRShowCreated.xml b/airtime_mvc/tests/application/models/files/test_weeklyRepeatNoEndNoRRShowCreated.xml new file mode 100644 index 000000000..21333d2bc --- /dev/null +++ b/airtime_mvc/tests/application/models/files/test_weeklyRepeatNoEndNoRRShowCreated.xml @@ -0,0 +1,145 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable + + 1 + test show + + + + ffffff + 364492 + + + + + + 1 + +
+ + + id + first_show + last_show + start_time + timezone + duration + day + repeat_type + next_pop_date + show_id + record + + 1 + 2016-01-01 + + 00:00:00 + UTC + 01:00 + 5 + 0 + 2016-02-05 + 1 + 0 + +
+ + + id + starts + ends + show_id + record + rebroadcast + instance_id + file_id + time_filled + last_scheduled + modified_instance + + 1 + 2016-01-01 00:00:00 + 2016-01-01 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 2 + 2016-01-08 00:00:00 + 2016-01-08 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 3 + 2016-01-15 00:00:00 + 2016-01-15 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 4 + 2016-01-22 00:00:00 + 2016-01-22 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 5 + 2016-01-29 00:00:00 + 2016-01-29 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + +
+ + +
+ + +
+
\ No newline at end of file diff --git a/airtime_mvc/tests/application/testdata/ShowData.php b/airtime_mvc/tests/application/testdata/ShowData.php index 217ffd4c0..1bbfd29a8 100644 --- a/airtime_mvc/tests/application/testdata/ShowData.php +++ b/airtime_mvc/tests/application/testdata/ShowData.php @@ -15,7 +15,7 @@ Class ShowData "add_show_end_date_no_repeat" => "2016-01-01", "add_show_end_time" => "01:00", "add_show_duration" => "01h 00m", - "add_show_timezone" => "America/Toronto", + "add_show_timezone" => "UTC", "add_show_repeats" => 0, "add_show_linked" => 0, "add_show_repeat_type" => 0, @@ -75,4 +75,79 @@ Class ShowData "add_show_day_check" => null ); } + + public static function getWeeklyRepeatNoEndNoRRData() + { + return array( + "add_show_id" => -1, + "add_show_instance_id" => -1, + "add_show_name" => "test show", + "add_show_url" => null, + "add_show_genre" => null, + "add_show_description" => null, + "add_show_start_date" => "2016-01-01", + "add_show_start_time" => "00:00", + "add_show_end_date_no_repeat" => "2016-01-01", + "add_show_end_time" => "01:00", + "add_show_duration" => "01h 00m", + "add_show_timezone" => "UTC", + "add_show_repeats" => 1, + "add_show_linked" => 0, + "add_show_repeat_type" => 0, + "add_show_monthly_repeat_type" => 2, + "add_show_end_date" => "2016-01-01", + "add_show_no_end" => 1, + "cb_airtime_auth" => 0, + "cb_custom_auth" => 0, + "custom_username" => null, + "custom_password" => null, + "add_show_record" => 0, + "add_show_rebroadcast" => 0, + "add_show_rebroadcast_date_absolute_1" => null, + "add_show_rebroadcast_time_absolute_1" => null, + "add_show_rebroadcast_date_absolute_2" => null, + "add_show_rebroadcast_time_absolute_2" => null, + "add_show_rebroadcast_date_absolute_3" => null, + "add_show_rebroadcast_time_absolute_3" => null, + "add_show_rebroadcast_date_absolute_4" => null, + "add_show_rebroadcast_time_absolute_4" => null, + "add_show_rebroadcast_date_absolute_5" => null, + "add_show_rebroadcast_time_absolute_5" => null, + "add_show_rebroadcast_date_absolute_6" => null, + "add_show_rebroadcast_time_absolute_6" => null, + "add_show_rebroadcast_date_absolute_7" => null, + "add_show_rebroadcast_time_absolute_7" => null, + "add_show_rebroadcast_date_absolute_8" => null, + "add_show_rebroadcast_time_absolute_8" => null, + "add_show_rebroadcast_date_absolute_9" => null, + "add_show_rebroadcast_time_absolute_9" => null, + "add_show_rebroadcast_date_absolute_10" => null, + "add_show_rebroadcast_time_absolute_10" => null, + "add_show_rebroadcast_date_1" => null, + "add_show_rebroadcast_time_1" => null, + "add_show_rebroadcast_date_2" => null, + "add_show_rebroadcast_time_2" => null, + "add_show_rebroadcast_date_3" => null, + "add_show_rebroadcast_time_3" => null, + "add_show_rebroadcast_date_4" => null, + "add_show_rebroadcast_time_4" => null, + "add_show_rebroadcast_date_5" => null, + "add_show_rebroadcast_time_5" => null, + "add_show_rebroadcast_date_6" => null, + "add_show_rebroadcast_time_6" => null, + "add_show_rebroadcast_date_7" => null, + "add_show_rebroadcast_time_7" => null, + "add_show_rebroadcast_date_8" => null, + "add_show_rebroadcast_time_8" => null, + "add_show_rebroadcast_date_9" => null, + "add_show_rebroadcast_time_9" => null, + "add_show_rebroadcast_date_10" => null, + "add_show_rebroadcast_time_10" => null, + "add_show_hosts_autocomplete" => null, + "add_show_background_color" => "364492", + "add_show_color" => "ffffff", + "add_show_hosts" => null, + "add_show_day_check" => array(5) + ); + } } \ No newline at end of file From 0f4099e48163ef7b7557407048166834322571d8 Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 9 Jan 2014 16:58:56 -0500 Subject: [PATCH 22/22] CC-5651: Unit Test the Scheduler Added test for deleting a show instance --- .../tests/application/models/ShowTest.php | 27 ++++ .../models/files/test_deleteShowInstance.xml | 145 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 airtime_mvc/tests/application/models/files/test_deleteShowInstance.xml diff --git a/airtime_mvc/tests/application/models/ShowTest.php b/airtime_mvc/tests/application/models/ShowTest.php index 9500f4ed9..b57558460 100644 --- a/airtime_mvc/tests/application/models/ShowTest.php +++ b/airtime_mvc/tests/application/models/ShowTest.php @@ -159,4 +159,31 @@ class ShowTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds ); } + + /* Tests that a show instances gets deleted from it's repeating sequence + * properly + */ + public function testDeleteShowInstance() + { + TestHelper::loginUser(); + + $data = ShowData::getWeeklyRepeatNoEndNoRRData(); + $service_show = new Application_Service_ShowService(null, $data); + $service_show->addUpdateShow($data); + //$service_show->deleteShow(3, true); + + $ds = new Zend_Test_PHPUnit_Db_DataSet_QueryDataSet( + $this->getConnection() + ); + $ds->addTable('cc_show', 'select * from cc_show'); + $ds->addTable('cc_show_days', 'select * from cc_show_days'); + $ds->addTable('cc_show_instances', 'select id, starts, ends, show_id, record, rebroadcast, instance_id, file_id, time_filled, last_scheduled, modified_instance from cc_show_instances'); + $ds->addTable('cc_show_rebroadcast', 'select * from cc_show_rebroadcast'); + $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); + + $this->assertDataSetsEqual( + $this->createXmlDataSet(dirname(__FILE__)."/files/test_deleteShowInstance.xml"), + $ds + ); + } } diff --git a/airtime_mvc/tests/application/models/files/test_deleteShowInstance.xml b/airtime_mvc/tests/application/models/files/test_deleteShowInstance.xml new file mode 100644 index 000000000..ac61f015c --- /dev/null +++ b/airtime_mvc/tests/application/models/files/test_deleteShowInstance.xml @@ -0,0 +1,145 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable + + 1 + test show + + + + ffffff + 364492 + + + + + + 1 + +
+ + + id + first_show + last_show + start_time + timezone + duration + day + repeat_type + next_pop_date + show_id + record + + 1 + 2016-01-01 + + 00:00:00 + UTC + 01:00 + 5 + 0 + 2016-02-05 + 1 + 0 + +
+ + + id + starts + ends + show_id + record + rebroadcast + instance_id + file_id + time_filled + last_scheduled + modified_instance + + 1 + 2016-01-01 00:00:00 + 2016-01-01 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 2 + 2016-01-08 00:00:00 + 2016-01-08 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 3 + 2016-01-15 00:00:00 + 2016-01-15 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + 1 + + + 4 + 2016-01-22 00:00:00 + 2016-01-22 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + + + 5 + 2016-01-29 00:00:00 + 2016-01-29 01:00:00 + 1 + 0 + 0 + + + 00:00:00 + + + +
+ + +
+ + +
+
\ No newline at end of file