示例#1
0
 /**
  * Test dummy session service
  */
 public function testDummySession()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $session = $app->call('session');
     $expected = 'dummy';
     $session->add('dummy', $expected);
     $session->set('dummy', $expected);
     $result = $session->get('dummy');
     $this->assertEquals($expected, $result);
     $expected = TRUE;
     $result = $session->has('dummy');
     $this->assertEquals($expected, $result);
     $expected = array('dummy' => 'dummy');
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = array();
     $session->remove('dummy');
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = 'dummy';
     $session->add('dummy', $expected);
     $result = $session->take('dummy');
     $this->assertEquals($expected, $result);
     $expected = array('dummy', 'dummy');
     $session->importArray($expected);
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = array();
     $session->reset();
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $session->terminate();
 }
示例#2
0
 /**
  * Test localization service
  * 
  * @requires extension intl
  */
 public function testLocalization()
 {
     $config = array('locale' => array('default' => 'en_US', 'dir' => 'tests/data/lang', 'timezone' => 'Europe/Lisbon'));
     $app = new \Duality\App(dirname(__FILE__) . '/../../..', $config);
     $locale = $app->call('locale');
     $result = $locale->getDisplayLanguage();
     $this->assertEquals('English', $result);
     $result = $locale->getNumber(1001.11);
     $this->assertEquals('1,001.11', $result);
     $result = $locale->parseNumber('1.001,11');
     $this->assertEquals(1.001, $result);
     $result = $locale->getCurrency(1001.11);
     $this->assertEquals('€1,001.11', $result);
     $result = $locale->getNumberFormatter();
     $this->assertInstanceOf('\\NumberFormatter', $result);
     $result = $locale->getDateFormatter();
     $this->assertInstanceOf('\\IntlDateFormatter', $result);
     $result = $locale->t('key');
     $this->assertEquals('value', $result);
     $expected = 'valor';
     $result = $locale->t('key', array(), 'es_ES');
     $this->assertEquals($expected, $result);
     $locale->getCalendar();
     $locale->getTimeZone();
     $locale->terminate();
 }
示例#3
0
 /**
  * Test auth service
  */
 public function testAuth()
 {
     $config = array('services' => array('session' => '\\Duality\\Service\\Session\\Dummy'), 'db' => array('dsn' => DB_DSN, 'user' => DB_USER, 'pass' => DB_PASS), 'auth' => array('table' => 'dummy', 'user' => 'email', 'pass' => 'pass'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $auth = $app->call('auth');
     $this->assertInstanceOf('\\Duality\\Service\\Auth\\Database', $auth);
     $db = $app->call('db');
     $db->setName('duality');
     $table = new Table($db);
     $table->setName('dummy');
     $schema = array('id' => 'auto', 'email' => 'varchar(80)', 'pass' => 'varchar(80)');
     $db->getPDO()->exec($db->getDropTable($table));
     $db->getPDO()->exec($db->getCreateTable($table, $schema));
     $table->setColumns($schema);
     $table->setPrimaryKey('id');
     $table->add(1, array('email' => 'dummy', 'pass' => 'dummy'));
     $expected = true;
     $result = $auth->login('dummy', 'dummy');
     $this->assertEquals($expected, $result);
     $table->remove(1);
     $expected = false;
     $result = $auth->login('dummy', 'dummy');
     $this->assertEquals($expected, $result);
     $db->getPDO()->exec($db->getDropTable($table));
     $this->assertEquals(true, $auth->isLogged());
     $this->assertEquals('dummy', $auth->whoAmI());
     $auth->logout();
     $this->assertEquals(false, $auth->isLogged());
     $this->assertEquals(null, $auth->whoAmI());
     $this->assertNull($auth->terminate());
 }
示例#4
0
 /**
  * Test validator service
  */
 public function testValidator()
 {
     $config = array('server' => array('url' => '/', 'hostname' => 'localhost'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $server = $app->call('server');
     $request = new Request(new Url('http://localhost/dummy'));
     $request->setParams(array('key' => 'value'));
     $request->setMethod('GET');
     $server->setRequest($request);
     $validator = $app->call('validator');
     $item = new RuleItem('key', $request->getParam('key'), 'required|number|alpha|email|equals|password|length:2:3', 'The key is valid', 'The key is invalid');
     $item->setPassMessage('The key is valid');
     $item->setFailMessage('The key is invalid');
     $validator->addRuleItem($item);
     $validator->validate();
     $expected = false;
     $result = $validator->ok();
     $this->assertEquals($expected, $result);
     $expected = array('key' => 'The key is invalid');
     $result = $validator->getMessages();
     $this->assertEquals($expected, $result);
     $expected = array('key' => 'The key is invalid');
     $result = $validator->getErrorMessages();
     $this->assertEquals($expected, $result);
     $expected = 'The key is invalid';
     $result = $validator->getMessage('key');
     $this->assertEquals($expected, $result);
     $validator->terminate();
 }
示例#5
0
 /**
  * Test native session service
  * 
  * @runInSeparateProcess
  */
 public function testNativeSession()
 {
     $config = array('services' => array('session' => '\\Duality\\Service\\Session\\Native'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $session = $app->call('session');
     $expected = 'dummy';
     $session->add('dummy', $expected);
     $session->set('dummy', $expected);
     $result = $session->get('dummy');
     $this->assertEquals($expected, $result);
     $expected = TRUE;
     $result = $session->has('dummy');
     $this->assertEquals($expected, $result);
     $expected = array('dummy' => 'dummy');
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = array();
     $session->remove('dummy');
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = 'dummy';
     $session->add('dummy', $expected);
     $result = $session->take('dummy');
     $this->assertEquals($expected, $result);
     $expected = array('dummy', 'dummy');
     $session->importArray($expected);
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $expected = array();
     $session->reset();
     $result = $session->asArray();
     $this->assertEquals($expected, $result);
     $session->terminate();
 }
示例#6
0
 /**
  * Test cache service
  * @requires extension apc
  */
 public function testCache()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $cache = $app->call('cache');
     $expected = 'dummy';
     $cache->add('dummy', $expected);
     $result = $cache->get('dummy');
     $this->assertEquals($expected, $result);
     $expected = 'dummy';
     $cache->put('dummy', $expected);
     $result = $cache->get('dummy');
     $this->assertEquals($expected, $result);
     $expected = array();
     $cache->remove('dummy');
     $result = $cache->asArray();
     $this->assertEquals($expected, $result);
     $expected1 = 'dummy';
     $expected2 = array();
     $cache->put('dummy', $expected1);
     $result1 = $cache->pull('dummy');
     $result2 = $cache->asArray();
     $this->assertEquals($expected1, $result1);
     $this->assertEquals($expected2, $result2);
     $expected = array();
     $cache->reset();
     $result = $cache->asArray();
     $this->assertEquals($expected, $result);
     $expected = array('dummy' => 'dummy');
     $cache->importArray($expected);
     $result = $cache->asArray();
     $this->assertEquals($expected, $result);
     $cache->terminate();
 }
示例#7
0
 /**
  * Test auth service
  * 
  * @requires extension ldap
  */
 public function testAuth()
 {
     $config = array('services' => array('session' => '\\Duality\\Service\\Session\\Dummy', 'auth' => '\\Duality\\Service\\Auth\\LDAP'), 'auth' => array('host' => 'localhost'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $auth = $app->call('auth');
     $this->assertInstanceOf('\\Duality\\Service\\Auth\\LDAP', $auth);
     $expected = false;
     $result = $auth->login('dummy', 'dummy');
     $this->assertEquals($expected, $result);
     $this->assertNull($auth->terminate());
 }
示例#8
0
 /**
  * Test entity structure
  */
 public function testEntity()
 {
     $config = array('db' => array('dsn' => DB_DSN, 'user' => DB_USER, 'pass' => DB_PASS));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $db = $app->call('db');
     $entity = new \Model($db);
     $name = 'dummy';
     $expected = array(new Property('id'), new Property($name));
     $entity->addPropertiesFromArray(array($name));
     $result = $entity->getProperties();
     $this->assertEquals($expected, $result);
 }
示例#9
0
 /**
  * Test mailer service
  */
 public function testMailer()
 {
     $config = array('mailer' => array('from' => array('email' => '*****@*****.**', 'name' => 'Duality Mailer'), 'smtp' => array('host' => 'smtp.gmail.com', 'user' => 'username', 'pass' => 'password', 'encr' => 'tls', 'port' => 587, 'dbgl' => 1)));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $mailer = $app->call('mailer');
     // SMTP
     $mailer->setSMTP('smtp.gmail.com', 'username', 'password', 'tls', 587, 1);
     // Prepare
     $mailer->to('*****@*****.**')->copy('*****@*****.**')->copy('*****@*****.**', false)->reply('*****@*****.**', 'no-reply')->from('*****@*****.**', 'Dummy Duality Test')->subject('Dummy Subject')->body('<p>Dummy Body</p>', 'dummy body')->attach(array('./tests/data/log.txt'))->pretend(true);
     $me =& $this;
     $mailer->send(function ($result, $mail) use($me) {
         $me->assertTrue($result);
     });
     $mailer->terminate();
 }
示例#10
0
 /**
  * Test security service
  */
 public function testSecurity()
 {
     $config = array('server' => array('url' => '/', 'hostname' => 'localhost'), 'security' => array('algo' => 'sha1', 'salt' => 'dummy'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $request = new Request(new Url('http://localhost/items'));
     $request->setParams(array('key' => 'value', 'array' => array('value')));
     $request->setMethod('POST');
     $app->call('server')->setRequest($request);
     $security = $app->call('security');
     $expected = 'f64133af6818761d95c8230953e5c9ddee1d0cf3';
     $result = $security->encrypt('dummy');
     $this->assertEquals($expected, $result);
     $expected = 'f64133af6818761d95c8230953e5c9ddee1d0cf3';
     $result = $security->decrypt($result);
     $this->assertEquals($expected, $result);
     $security->terminate();
 }
示例#11
0
 /**
  * Test performance service
  */
 public function testPerformance()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $performance = $app->call('performance');
     $string = '';
     for ($i = 0; $i < 10; $i++) {
         $string .= $i . ' ';
         $performance->checkpoint($i);
     }
     $total = $performance->getCurrentTime();
     $expected = 11;
     $result = count($performance->asArray());
     $this->assertEquals($expected, $result);
     $expected = 0;
     $result = $performance->reset();
     $this->assertEquals($expected, $result);
     $performance->terminate();
 }
示例#12
0
 /**
  * Test logger service
  * 
  * @runInSeparateProcess
  */
 public function testLogger()
 {
     //$this->markTestSkipped('Do not use Duality error_handler.');
     $config = array('logger' => array('buffer' => 'tests/data/log.txt'));
     $app = new \Duality\App(dirname(__FILE__) . '/../../..', $config);
     $logger = $app->call('logger');
     // Test NOTICE
     $logger->log('dummy');
     // Test E_USER_WARNING
     $logger->log('dummy', E_USER_WARNING);
     // Test E_USER_ERROR
     $logger->log('dummy', E_USER_ERROR);
     // Terminate
     $expected = 'Ops! Something went wrong...';
     ob_start();
     $logger->terminate();
     $result = ob_get_clean();
     $this->assertEquals($expected, $result);
 }
示例#13
0
 /**
  * Test commander service
  */
 public function testCommander()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $cmd = $app->call('cmd');
     $cmd->addResponder('/dummy/', function () {
         echo 'response';
     });
     $expected = "Command not found\n";
     $cmd->setInput('');
     ob_start();
     $cmd->listen();
     $result = ob_get_clean();
     $this->assertEquals($expected, $result);
     $expected = 'response';
     $cmd->setInput('dummy.php dummy');
     ob_start();
     $cmd->listen();
     $result = ob_get_clean();
     $this->assertEquals($expected, $result);
     $cmd->terminate();
 }
示例#14
0
 /**
  * Test HTTP client service
  */
 public function testClient()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $client = $app->call('client');
     $expected = 'dummy';
     $client->setUserAgent($expected);
     $result = $client->getUserAgent();
     $this->assertEquals($expected, $result);
     $url = new Url('http://google.pt/');
     $request = $client->createRequest($url);
     $response = $client->execute($request);
     $this->assertInstanceOf('\\Duality\\Structure\\Http\\Response', $response);
     $expected = 'Moved Permanently';
     $result = $response->getCodeString();
     $this->assertEquals($expected, $result);
     $url = new Url('http://google.pt/');
     $request = $client->createRequest($url);
     $request->addHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
     $response = $client->execute($request);
     $client->getCurlHandler();
     $client->terminate();
 }
示例#15
0
 /**
  * Test paginator service
  */
 public function testPaginator()
 {
     $config = array('server' => array('url' => '/', 'hostname' => 'localhost'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $paginator = $app->call('paginator');
     $request = new Request(new Url('http://localhost/items'));
     $request->setParams(array('page' => 2));
     $app->call('server')->setRequest($request);
     $paginator->config('http://localhost/items', 20, 3);
     $expected = 'http://localhost/items?page=1';
     $result = $paginator->getFirstPageUrl();
     $this->assertEquals($expected, $result);
     $expected = 'http://localhost/items?page=7';
     $result = $paginator->getLastPageUrl();
     $this->assertEquals($expected, $result);
     $expected = 'http://localhost/items?page=3';
     $result = $paginator->getNextPageUrl();
     $this->assertEquals($expected, $result);
     $expected = 'http://localhost/items?page=1';
     $result = $paginator->getPreviousPageUrl();
     $this->assertEquals($expected, $result);
     $expected = '';
     $result = $paginator->getPageUrl(-1);
     $this->assertEquals($expected, $result);
     $expected = 3;
     $result = $paginator->getCurrentOffset();
     $this->assertEquals($expected, $result);
     // Ask out of range page
     $request = new Request(new Url('http://localhost/items'));
     $request->setParams(array('page' => 21));
     $app->call('server')->setRequest($request);
     $paginator->config('http://localhost/items?', 20, 3);
     $expected = 0;
     $result = $paginator->getCurrentOffset();
     $this->assertEquals($expected, $result);
     // Terminate
     $paginator->terminate();
 }
示例#16
0
 /**
  * Test MySql database service with invalid config
  * 
  * @requires extension pdo
  * 
  * @expectedException \Duality\Core\DualityException
  */
 public function testMySqlInvalidConfig()
 {
     $config = array('db' => array());
     $app = new \Duality\App(dirname(__FILE__), $config);
     $app->call('db');
 }
示例#17
0
 /**
  * Test database table
  * 
  * @requires extension pdo
  */
 public function testTable()
 {
     $config = array('db' => array('dsn' => DB_DSN, 'user' => DB_USER, 'pass' => DB_PASS));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $db = $app->call('db');
     $db->setName('duality');
     $table = new Table($db);
     $table->setName('dummy');
     $schema = array('id' => 'auto', 'email' => 'varchar(80)');
     $sql = $db->getDropTable($table);
     $db->getPDO()->exec($sql);
     $sql = $db->getCreateTable($table, $schema);
     $db->getPDO()->exec($sql);
     $expected = array();
     $table->setColumns($schema);
     $result = $table->toArray();
     $this->assertEquals($expected, $result);
     $table->setPrimaryKey('id');
     $expected = array(1 => array('id' => 1, 'email' => 'dummy1'));
     $table->add(1, array('email' => 'dummy1'));
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $expected = array(1 => array('id' => 1, 'email' => 'dummy2'));
     $table->set(1, array('id' => 1, 'email' => 'dummy2'));
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $expected = array(1 => array('id' => 1, 'email' => 'dummy2'));
     $table->find(0, 10, 'id = ?', array(1));
     $result = $table->toArray();
     $this->assertEquals($expected, $result);
     $expected = array(1 => array('id' => 1, 'email' => 'dummy2'));
     $filter = new Filter($table);
     $filter->columns('id,email')->where('id = ?', array(1))->group('id')->limit(0, 10);
     $table->filter($filter);
     $result = $table->toArray();
     $this->assertEquals($expected, $result);
     $expected = array('id' => 1, 'email' => 'dummy2');
     $result = $table->get(1);
     $this->assertEquals($expected, $result);
     $result = $table->has(1);
     $this->assertTrue($result);
     $expected = array(1 => array('id' => 1, 'email' => 'dummy2'));
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $expected = array(1 => array('id' => 1, 'email' => 'dummy3'), 2 => array('id' => 2, 'email' => 'dummy4'));
     $data = array(1 => array('email' => 'dummy3'), 2 => array('email' => 'dummy4'));
     $table->importArray($data);
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $expected = $expected = array(2 => array('id' => 2, 'email' => 'dummy4'));
     $table->remove(1);
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $expected = array();
     $table->reset();
     $result = $table->find()->toArray();
     $this->assertEquals($expected, $result);
     $result = $db->getTable('dummy');
     $this->assertInstanceOf('\\Duality\\Structure\\Database\\Table', $result);
     $sql = $db->getDropTable($table);
     $db->getPDO()->exec($sql);
     $result = $db->getTable('dummy');
     $this->assertFalse($result);
     // Clean up
     $this->cleanUp();
 }
示例#18
0
 /**
  * Test invalid action not found
  * 
  * @expectedException \Duality\Core\DualityException
  */
 public function testInvalidAction()
 {
     $config = array('server' => array('url' => '/', 'hostname' => 'localhost'));
     $app = new \Duality\App(dirname(__FILE__), $config);
     $server = $app->call('server');
     $request = new \Duality\Structure\Http\Request(new \Duality\Structure\Url('http://localhost/uri'));
     $request->setParams(array('key' => 'value'));
     $request->setMethod('GET');
     $server->setRequest($request);
     $pattern = '/\\/uri/';
     $server->addRoute($pattern, '\\Duality\\Service\\Controller\\Base@dummy');
     $server->listen();
 }
示例#19
0
 /**
  * Test session service
  */
 public function testSession()
 {
     $app = new \Duality\App(dirname(__FILE__), null);
     $session = $app->call('session');
     $this->assertInstanceOf('\\Duality\\Service\\Session\\Dummy', $session);
 }
示例#20
0
 /**
  * Test locale service alias
  * 
  * @requires extension intl
  */
 public function testAppCallLocaleServiceAlias()
 {
     $config = array('locale' => array('default' => 'en_US', 'dir' => DATA_PATH . '/lang', 'timezone' => 'Europe/Lisbon'));
     $app = new \Duality\App(dirname(__FILE__) . '/../..', $config);
     $expected = '\\Duality\\Service\\Localization';
     $this->assertInstanceOf($expected, $app->getLocale());
 }