@@ -26,6 +26,9 @@ require_once 'Zend/Feed/Pubsubhubbub/Model/ModelAbstract.php';
/** @see Zend_Feed_Pubsubhubbub_Model_SubscriptionInterface */
require_once 'Zend/Feed/Pubsubhubbub/Model/SubscriptionInterface.php';
+/** @see Zend_Date */
+require_once 'Zend/Date.php';
+
/**
* @category Zend
* @package Zend_Feed_Pubsubhubbub
@@ -37,7 +40,7 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
extends Zend_Feed_Pubsubhubbub_Model_ModelAbstract
implements Zend_Feed_Pubsubhubbub_Model_SubscriptionInterface
{
-
+
/**
* Save subscription to RDMBS
*
@@ -53,10 +56,10 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
);
}
$result = $this->_db->find($data['id']);
- if ($result) {
+ if (count($result)) {
$data['created_time'] = $result->current()->created_time;
$now = new Zend_Date;
- if ($data['lease_seconds']) {
+ if (isset($data['lease_seconds'])) {
$data['expiration_time'] = $now->add($data['lease_seconds'], Zend_Date::SECOND)
->get('yyyy-MM-dd HH:mm:ss');
}
@@ -70,11 +73,11 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
$this->_db->insert($data);
return true;
}
-
+
/**
* Get subscription by ID/key
- *
- * @param string $key
+ *
+ * @param string $key
* @return array
*/
public function getSubscription($key)
@@ -85,16 +88,16 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
.' of "' . $key . '" must be a non-empty string');
}
$result = $this->_db->find($key);
- if ($result) {
- return (array) $result->current();
+ if (count($result)) {
+ return $result->current()->toArray();
}
return false;
}
/**
* Determine if a subscription matching the key exists
- *
- * @param string $key
+ *
+ * @param string $key
* @return bool
*/
public function hasSubscription($key)
@@ -105,12 +108,12 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
.' of "' . $key . '" must be a non-empty string');
}
$result = $this->_db->find($key);
- if ($result) {
+ if (count($result)) {
return true;
}
return false;
}
-
+
/**
* Delete a subscription
*
@@ -120,7 +123,7 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
public function deleteSubscription($key)
{
$result = $this->_db->find($key);
- if ($result) {
+ if (count($result)) {
$this->_db->delete(
$this->_db->getAdapter()->quoteInto('id = ?', $key)
);
@@ -128,5 +131,5 @@ class Zend_Feed_Pubsubhubbub_Model_Subscription
}
return false;
}
-
+
}
@@ -29,6 +29,7 @@ require_once 'Zend/Feed/Pubsubhubbub/PubsubhubbubTest.php';
require_once 'Zend/Feed/Pubsubhubbub/PublisherTest.php';
require_once 'Zend/Feed/Pubsubhubbub/SubscriberTest.php';
require_once 'Zend/Feed/Pubsubhubbub/SubscriberHttpTest.php';
+require_once 'Zend/Feed/Pubsubhubbub/Model/AllTests.php';
require_once 'Zend/Feed/Pubsubhubbub/Subscriber/CallbackTest.php';
@@ -56,6 +57,7 @@ class Zend_Feed_Pubsubhubbub_AllTests
$suite->addTestSuite('Zend_Feed_Pubsubhubbub_PublisherTest');
$suite->addTestSuite('Zend_Feed_Pubsubhubbub_SubscriberTest');
$suite->addTestSuite('Zend_Feed_Pubsubhubbub_SubscriberHttpTest');
+ $suite->addTest(Zend_Feed_Pubsubhubbub_Model_AllTests::suite());
$suite->addTestSuite('Zend_Feed_Pubsubhubbub_Subscriber_CallbackTest');
return $suite;
*/
if (!defined('PHPUnit_MAIN_METHOD')) {
- define('PHPUnit_MAIN_METHOD', 'Zend_Feed_Pubsubhubbub_AllTests::main');
+ define('PHPUnit_MAIN_METHOD', 'Zend_Feed_Pubsubhubbub_Model_AllTests::main');
}
-require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
-
-require_once 'Zend/Feed/Pubsubhubbub/PubsubhubbubTest.php';
-require_once 'Zend/Feed/Pubsubhubbub/PublisherTest.php';
-require_once 'Zend/Feed/Pubsubhubbub/SubscriberTest.php';
-require_once 'Zend/Feed/Pubsubhubbub/SubscriberHttpTest.php';
-require_once 'Zend/Feed/Pubsubhubbub/Subscriber/CallbackTest.php';
+require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
+require_once 'Zend/Feed/Pubsubhubbub/Model/SubscriptionTest.php';
/**
* @category Zend
* @package Zend_Feed
* @subpackage UnitTests
* @group Zend_Feed
- * @group Zend_Feed_Subsubhubbub
+ * @group Zend_Feed_Pubsubhubbub
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
-class Zend_Feed_Pubsubhubbub_AllTests
+class Zend_Feed_Pubsubhubbub_Model_AllTests
{
public static function main()
{
@@ -51,17 +46,11 @@ class Zend_Feed_Pubsubhubbub_AllTests
public static function suite()
{
$suite = new PHPUnit_Framework_TestSuite('Zend Framework - Zend');
-
- $suite->addTestSuite('Zend_Feed_Pubsubhubbub_PubsubhubbubTest');
- $suite->addTestSuite('Zend_Feed_Pubsubhubbub_PublisherTest');
- $suite->addTestSuite('Zend_Feed_Pubsubhubbub_SubscriberTest');
- $suite->addTestSuite('Zend_Feed_Pubsubhubbub_SubscriberHttpTest');
- $suite->addTestSuite('Zend_Feed_Pubsubhubbub_Subscriber_CallbackTest');
-
+ $suite->addTestSuite('Zend_Feed_Pubsubhubbub_Model_SubscriptionTest');
return $suite;
}
}
-if (PHPUnit_MAIN_METHOD == 'Zend_Feed_Pubsubhubbub_AllTests::main') {
+if (PHPUnit_MAIN_METHOD == 'Zend_Feed_Pubsubhubbub_Model_AllTests::main') {
Zend_Feed_Pubsubhubbub_AllTests::main();
}
--- /dev/null
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to
[email protected] so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package UnitTests
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
+
+require_once 'Zend/Feed/Pubsubhubbub/Model/Subscription.php';
+/**
+ * @category Zend
+ * @package Zend_Feed
+ * @subpackage UnitTests
+ * @group Zend_Feed
+ * @group Zend_Feed_Pubsubhubbub_Model
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Feed_Pubsubhubbub_Model_SubscriptionTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @group ZF-10069
+ */
+ public function testAllOperations()
+ {
+ $this->_initDb();
+ $subscription = new Zend_Feed_Pubsubhubbub_Model_Subscription();
+ $id = uniqid();
+ $this->assertFalse($subscription->hasSubscription($id));
+ $this->assertFalse($subscription->getSubscription($id));
+ $this->assertFalse($subscription->deleteSubscription($id));
+ $this->assertTrue($subscription->setSubscription(array('id' => $id)));
+
+ $this->assertTrue($subscription->hasSubscription($id));
+ $dataSubscription = $subscription->getSubscription($id);
+ $this->assertType('array', $dataSubscription);
+ $keys = array('id', 'topic_url', 'hub_url',
+ 'created_time', 'lease_seconds',
+ 'verify_token', 'secret',
+ 'expiration_time', 'subscription_state');
+
+ $this->assertSame($keys, array_keys($dataSubscription));
+ $this->assertFalse($subscription->setSubscription(array('id' => $id)));
+ $this->assertTrue($subscription->deleteSubscription($id));
+ }
+
+ public function testImpemetsSubscriptionInterface()
+ {
+ $reflection = new ReflectionClass('Zend_Feed_Pubsubhubbub_Model_Subscription');
+ $this->assertTrue($reflection->implementsInterface('Zend_Feed_Pubsubhubbub_Model_SubscriptionInterface'));
+ unset($reflection);
+ }
+
+ protected function _initDb()
+ {
+ if (!extension_loaded('pdo')
+ && !in_array('sqlite', PDO::getAvailableDrivers())) {
+ $this->markTestSkipped('Test only with pdo_sqlite');
+ }
+ $db = Zend_Db::factory('Pdo_Sqlite', array('dbname' => ':memory:'));
+ Zend_Db_Table::setDefaultAdapter($db);
+ $this->_createTable();
+ }
+
+ protected function _createTable()
+ {
+ $sql = "CREATE TABLE subscription ("
+ . "id varchar(32) NOT NULL DEFAULT '', "
+ . "topic_url varchar(255) DEFAULT NULL, "
+ . "hub_url varchar(255) DEFAULT NULL, "
+ . "created_time datetime DEFAULT NULL, "
+ . "lease_seconds bigint(20) DEFAULT NULL, "
+ . "verify_token varchar(255) DEFAULT NULL, "
+ . "secret varchar(255) DEFAULT NULL, "
+ . "expiration_time datetime DEFAULT NULL, "
+ . "subscription_state varchar(12) DEFAULT NULL, "
+ . "PRIMARY KEY (id) "
+ . ");";
+
+ Zend_Db_Table::getDefaultAdapter()->getConnection()->query($sql);
+ }
+}
\ No newline at end of file