/** * 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(); }
/** * 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()); }
/** * Test application call service */ public function testAppCallService() { $config = array(); $app = new \Duality\App(dirname(__FILE__), $config); $expected = '\\Duality\\Service\\Validator'; $this->assertInstanceOf($expected, $app->call('validator', array(), false)); $this->assertInstanceOf($expected, $app->call('validator')); }
/** * 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(); }
/** * 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(); }
/** * 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(); }
/** * 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(); }
/** * 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(); }
/** * 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()); }
/** * 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); }
/** * 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(); }
/** * 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(); }
/** * 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(); }
/** * 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); }
/** * 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(); }
/** * 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(); }
/** * 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'); }
/** * Test session service */ public function testSession() { $app = new \Duality\App(dirname(__FILE__), null); $session = $app->call('session'); $this->assertInstanceOf('\\Duality\\Service\\Session\\Dummy', $session); }
/** * 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(); }
/** * 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(); }