diff --git a/src/Db/Adapter.php b/src/Db/Adapter.php index 88049de85..b9a9ecca8 100644 --- a/src/Db/Adapter.php +++ b/src/Db/Adapter.php @@ -31,8 +31,12 @@ class Adapter extends \Zend\Db\Adapter\Adapter /** * {@inheritdoc} */ - public function __construct($driver, PlatformInterface $platform = null, ResultSetInterface $queryResultPrototype = null, ProfilerInterface $profiler = null) - { + public function __construct( + $driver, + PlatformInterface $platform = null, + ResultSetInterface $queryResultPrototype = null, + ProfilerInterface $profiler = null + ) { if ($driver instanceof Config) { $driver = $driver->toArray(); } @@ -85,7 +89,6 @@ class Adapter extends \Zend\Db\Adapter\Adapter $table = $this->prepareTable($table); $sql = $this->getSql(); - /** @var Insert $sqlInsert */ $sqlInsert = $sql->insert($table); $sqlInsert->values($values); diff --git a/src/Di.php b/src/Di.php index 3522584b7..0c29d2eb9 100644 --- a/src/Di.php +++ b/src/Di.php @@ -12,12 +12,21 @@ class Di extends Container { private static $instance; + /** + * Di constructor. + * + * @param array $values + */ public function __construct(array $values = []) { parent::__construct($values); static::$instance = $this; } + /** + * @return Di + * @throws \RuntimeException + */ public static function getInstance() { if (static::$instance instanceof Container) { @@ -27,6 +36,11 @@ class Di extends Container throw new \RuntimeException('The container has not been initialized'); } + /** + * @param $id + * @return mixed + * @throws \RuntimeException + */ public function __get($id) { if ($this->offsetExists($id)) { diff --git a/src/ServiceProviders/ConfigServiceProvider.php b/src/ServiceProviders/ConfigServiceProvider.php index 6739530ab..7c5da60d0 100644 --- a/src/ServiceProviders/ConfigServiceProvider.php +++ b/src/ServiceProviders/ConfigServiceProvider.php @@ -7,6 +7,10 @@ use Pimple\ServiceProviderInterface; use TorrentPier\Config; use Zend\Config\Factory; +/** + * Class ConfigServiceProvider + * @package TorrentPier\ServiceProviders + */ class ConfigServiceProvider implements ServiceProviderInterface { /** diff --git a/src/ServiceProviders/DbServiceProvider.php b/src/ServiceProviders/DbServiceProvider.php index 714c7a8f7..3c3447a0d 100644 --- a/src/ServiceProviders/DbServiceProvider.php +++ b/src/ServiceProviders/DbServiceProvider.php @@ -7,6 +7,10 @@ use Pimple\ServiceProviderInterface; use TorrentPier\Db\Adapter; use TorrentPier\Db\Connection; +/** + * Class DbServiceProvider + * @package TorrentPier\ServiceProviders + */ class DbServiceProvider implements ServiceProviderInterface { /** diff --git a/src/ServiceProviders/RequestServiceProvider.php b/src/ServiceProviders/RequestServiceProvider.php index 7813bfce9..4aa598659 100644 --- a/src/ServiceProviders/RequestServiceProvider.php +++ b/src/ServiceProviders/RequestServiceProvider.php @@ -6,6 +6,10 @@ use Pimple\Container; use Pimple\ServiceProviderInterface; use Symfony\Component\HttpFoundation\Request; +/** + * Class RequestServiceProvider + * @package TorrentPier\ServiceProviders + */ class RequestServiceProvider implements ServiceProviderInterface { public function register(Container $container) diff --git a/src/ServiceProviders/SphinxServiceProvider.php b/src/ServiceProviders/SphinxServiceProvider.php index ec4551dae..0f52ea595 100644 --- a/src/ServiceProviders/SphinxServiceProvider.php +++ b/src/ServiceProviders/SphinxServiceProvider.php @@ -11,6 +11,10 @@ use Zend\Db\Adapter\Adapter; use Zend\Db\Adapter\Driver\Mysqli\Mysqli; use Zend\Db\Adapter\Driver\Pdo\Pdo; +/** + * Class SphinxServiceProvider + * @package TorrentPier\ServiceProviders + */ class SphinxServiceProvider implements ServiceProviderInterface { /** diff --git a/src/ServiceProviders/TranslationServiceProvider.php b/src/ServiceProviders/TranslationServiceProvider.php index a50cf7f35..82bcf1a30 100644 --- a/src/ServiceProviders/TranslationServiceProvider.php +++ b/src/ServiceProviders/TranslationServiceProvider.php @@ -7,6 +7,10 @@ use Pimple\ServiceProviderInterface; use Symfony\Component\Translation\Loader\PhpFileLoader; use Symfony\Component\Translation\Translator; +/** + * Class TranslationServiceProvider + * @package TorrentPier\ServiceProviders + */ class TranslationServiceProvider implements ServiceProviderInterface { public function register(Container $container) diff --git a/src/ServiceProviders/TwigServiceProvider.php b/src/ServiceProviders/TwigServiceProvider.php index c36ff0cee..99352d147 100644 --- a/src/ServiceProviders/TwigServiceProvider.php +++ b/src/ServiceProviders/TwigServiceProvider.php @@ -6,6 +6,10 @@ use Pimple\Container; use Pimple\ServiceProviderInterface; use Symfony\Bridge\Twig\Extension\TranslationExtension; +/** + * Class TwigServiceProvider + * @package TorrentPier\ServiceProviders + */ class TwigServiceProvider implements ServiceProviderInterface { public function register(Container $container) diff --git a/src/ServiceProviders/ViewServiceProvider.php b/src/ServiceProviders/ViewServiceProvider.php index d8ba1c3d7..435945bd6 100644 --- a/src/ServiceProviders/ViewServiceProvider.php +++ b/src/ServiceProviders/ViewServiceProvider.php @@ -6,6 +6,10 @@ use Pimple\Container; use Pimple\ServiceProviderInterface; use TorrentPier\View; +/** + * Class ViewServiceProvider + * @package TorrentPier\ServiceProviders + */ class ViewServiceProvider implements ServiceProviderInterface { public function register(Container $container) diff --git a/src/View.php b/src/View.php index b75664d68..d8288a3d6 100644 --- a/src/View.php +++ b/src/View.php @@ -9,6 +9,11 @@ class View */ protected $twig; + /** + * View constructor. + * + * @param \Twig_Environment $twig + */ public function __construct(\Twig_Environment $twig) { $this->twig = $twig; @@ -17,11 +22,10 @@ class View /** * @param $template * @param array $params - * * @return string */ public function make($template, $params = []) { - return $this->twig->render($template.'.twig', $params); + return $this->twig->render($template . '.twig', $params); } } diff --git a/tests/src/ConfigTest.php b/tests/src/ConfigTest.php index 465101b32..23a74d172 100644 --- a/tests/src/ConfigTest.php +++ b/tests/src/ConfigTest.php @@ -31,7 +31,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase } /** - * Get value from array by key + * Get value from array by key. * * @see \TorrentPier\Config::get */ diff --git a/tests/src/Db/AdapterTest.php b/tests/src/Db/AdapterTest.php new file mode 100644 index 000000000..4bceb590d --- /dev/null +++ b/tests/src/Db/AdapterTest.php @@ -0,0 +1,209 @@ +getMock(Result::class, ['getGeneratedValue', 'getAffectedRows']); + $resultMock->method('getGeneratedValue')->willReturn(self::AFFECTED_ROWS); + $resultMock->method('getAffectedRows')->willReturn(self::AFFECTED_ROWS); + + $this->statementMock = $this->getMock(Statement::class, ['execute']); + $this->statementMock->method('execute')->willReturn($resultMock); + + $this->adapterMock = $this->getMockBuilder(Adapter::class) + ->setMethods(['getSql', 'getPlatform', 'getDriver']) + ->disableOriginalConstructor() + ->getMock(); + + $platformMock = $this->getMock(AbstractPlatform::class, ['getName', 'quoteIdentifier', 'quoteValue']); + $platformMock->method('quoteIdentifier')->willReturnCallback(function($v) { return '`' . $v . '`'; }); + $platformMock->method('quoteValue')->willReturnCallback(function($v) { + if (is_int($v)) { + return $v; + } elseif ($v instanceof \DateTime) { + $v = $v->format('Y-m-d H:i:s'); + } + + return '\'' . $v . '\''; + }); + $platformMock->method('getName')->willReturn('platform name'); + $this->adapterMock->method('getPlatform')->willReturn($platformMock); + + $connectionMock = $this->getMock(Connection::class); + + $driverMock = $this->getMock(Pdo::class, [], [ + $connectionMock, + $this->statementMock, + $resultMock, + ]); + $this->adapterMock->method('getDriver')->willReturn($driverMock); + + $this->sqlMock = $this->getMockBuilder(Sql::class) + ->setMethods(['prepareStatementForSqlObject']) + ->setConstructorArgs([$this->adapterMock]) + ->getMock(); + $this->adapterMock->method('getSql')->willReturn($this->sqlMock); + } + + /** + * Create sql insert query. + * @covers \TorrentPier\Db\Adapter::insert + */ + public function testInsert() + { + $date = new \DateTime('now', new \DateTimeZone('UTC')); + + $this->sqlMock->expects(static::once()) + ->method('prepareStatementForSqlObject') + ->willReturnCallback(function (Insert $sqlObject) use ($date) { + static::assertEquals( + join(' ', [ + "INSERT INTO", + "`tableName` (`field_int`, `field_str`, `field_date`)", + "VALUES (123, 'string', '{$date->format('Y-m-d H:i:s')}')", + ]), + $this->sqlMock->buildSqlString($sqlObject) + ); + return $this->statementMock; + }); + + $actual = $this->adapterMock->insert('tableName', [ + 'field_int' => 123, + 'field_str' => 'string', + 'field_date' => $date, + ]); + + static::assertEquals(self::AFFECTED_ROWS, $actual); + } + + /** + * Create sql update query. + * @covers \TorrentPier\Db\Adapter::update + */ + public function testUpdate() + { + $date = new \DateTime('now', new \DateTimeZone('UTC')); + + $this->sqlMock->expects(static::once()) + ->method('prepareStatementForSqlObject') + ->willReturnCallback(function (Update $sqlObject) use ($date) { + static::assertEquals( + join(' ', [ + "UPDATE `tableName` SET", + "`field_int` = 123, `field_str` = 'string', `field_date` = '{$date->format('Y-m-d H:i:s')}'", + "WHERE \"field_id\" = 1" + ]), + $this->sqlMock->buildSqlString($sqlObject) + ); + return $this->statementMock; + }); + + $actual = $this->adapterMock->update('tableName', [ + 'field_int' => 123, + 'field_str' => 'string', + 'field_date' => $date, + ], [ + 'field_id' => 1 + ]); + + static::assertEquals(self::AFFECTED_ROWS, $actual); + } + + /** + * Create sql delete query. + * @covers \TorrentPier\Db\Adapter::delete + */ + public function testDelete() + { + $this->sqlMock->expects(static::once()) + ->method('prepareStatementForSqlObject') + ->willReturnCallback(function (Delete $sqlObject) { + static::assertEquals( + "DELETE FROM `tableName` WHERE \"field_id\" = 1", + $this->sqlMock->buildSqlString($sqlObject) + ); + return $this->statementMock; + }); + + $actual = $this->adapterMock->delete('tableName', [ + 'field_id' => 1 + ]); + + static::assertEquals(self::AFFECTED_ROWS, $actual); + } + + /** + * Create sql increment query. + * @covers \TorrentPier\Db\Adapter::increment + */ + public function testIncrement() + { + $this->sqlMock->expects(static::once()) + ->method('prepareStatementForSqlObject') + ->willReturnCallback(function (Update $sqlObject) { + static::assertEquals( + "UPDATE `tableName` SET `inc` = \"inc\" + 1 WHERE \"field_id\" = 1", + $this->sqlMock->buildSqlString($sqlObject) + ); + return $this->statementMock; + }); + + $actual = $this->adapterMock->increment('tableName', 'inc', ['field_id' => 1]); + + static::assertEquals(self::AFFECTED_ROWS, $actual); + } + + /** + * Create sql decrement query. + * @covers \TorrentPier\Db\Adapter::decrement + */ + public function testDecrement() + { + $this->sqlMock->expects(static::once()) + ->method('prepareStatementForSqlObject') + ->willReturnCallback(function (Update $sqlObject) { + static::assertEquals( + "UPDATE `tableName` SET `inc` = \"inc\" - 1 WHERE \"field_id\" = 1", + $this->sqlMock->buildSqlString($sqlObject) + ); + return $this->statementMock; + }); + + $actual = $this->adapterMock->decrement('tableName', 'inc', ['field_id' => 1]); + + static::assertEquals(self::AFFECTED_ROWS, $actual); + } +} diff --git a/tests/src/ViewTest.php b/tests/src/ViewTest.php index a3517762c..87033d9c8 100644 --- a/tests/src/ViewTest.php +++ b/tests/src/ViewTest.php @@ -9,13 +9,14 @@ namespace TorrentPier; class ViewTest extends \PHPUnit_Framework_TestCase { /** - * @see \TorrentPier\View::make + * @covers \TorrentPier\View::make */ public function testMake() { $templateFileName = 'template'; $templateParam = ['key' => 'value']; + /** @var \Twig_Environment|\PHPUnit_Framework_MockObject_MockObject $mockTwig */ $mockTwig = $this ->getMockBuilder(\Twig_Environment::class) ->setMethods(['render'])