-
-
Save mablae/986b498ab3e773445e8f809f154fd9cc to your computer and use it in GitHub Desktop.
ZF2 and Doctrine Data Fixtures testing environment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @author Marco Pivetta <[email protected]> | |
*/ | |
use Zend\ServiceManager\ServiceManager; | |
use Zend\Mvc\Service\ServiceManagerConfig; | |
use DoctrineORMModuleTest\Framework\TestCase; | |
use ContentTest\Util\ServiceManagerFactory; | |
use Zend\Loader\StandardAutoloader; | |
chdir(__DIR__); | |
$previousDir = '.'; | |
while (!file_exists('config/application.config.php')) { | |
$dir = dirname(getcwd()); | |
if ($previousDir === $dir) { | |
throw new RuntimeException( | |
'Unable to locate "config/application.config.php":' | |
. ' is the Content module in a sub-directory of your application skeleton?' | |
); | |
} | |
$previousDir = $dir; | |
chdir($dir); | |
} | |
if (!((@include_once __DIR__ . '/../../../../../vendor/autoload.php') || !(@include_once __DIR__ . '/../../../../autoload.php'))) { | |
throw new RuntimeException('vendor/autoload.php could not be found. Did you run `php composer.phar install`?'); | |
} | |
if (!$config = @include __DIR__ . '/TestConfiguration.php') { | |
$config = require __DIR__ . '/TestConfiguration.php.dist'; | |
} | |
$loader = new StandardAutoloader(); | |
$loader->registerNamespace('ContentTest', __DIR__ . 'ContentTest'); | |
$loader->registerNamespace('ContentDataFixture', __DIR__ . 'ContentDataFixture'); | |
$loader->register(); | |
$serviceManager = new ServiceManager(new ServiceManagerConfig( | |
isset($config['service_manager']) ? $config['service_manager'] : array() | |
)); | |
$serviceManager->setService('ApplicationConfig', $config); | |
/** @var $moduleManager \Zend\ModuleManager\ModuleManager */ | |
$moduleManager = $serviceManager->get('ModuleManager'); | |
$moduleManager->loadModules(); | |
ServiceManagerFactory::setApplicationConfig($config); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project name="Com2 CMS Image module" default="build"> | |
<target name="build" depends="install,prepare,lint,phploc,pdepend,phpmd-ci,phpcs-ci,phpcpd,phpdox,phpunit,phpcb"/> | |
<target name="build-parallel" depends="install,prepare,lint,tools-parallel,phpunit,phpcb"/> | |
<target name="tools-parallel" description="Run tools in parallel"> | |
<parallel threadCount="2"> | |
<sequential> | |
<antcall target="pdepend"/> | |
<antcall target="phpmd-ci"/> | |
</sequential> | |
<antcall target="phpcpd"/> | |
<antcall target="phpcs-ci"/> | |
<antcall target="phploc"/> | |
<antcall target="phpdox"/> | |
</parallel> | |
</target> | |
<target name="clean" description="Cleanup build artifacts"> | |
<delete dir="${basedir}/satis"/> | |
<delete dir="${basedir}/build/api"/> | |
<delete dir="${basedir}/build/code-browser"/> | |
<delete dir="${basedir}/build/coverage"/> | |
<delete dir="${basedir}/build/logs"/> | |
<delete dir="${basedir}/build/pdepend"/> | |
</target> | |
<target name="get-composer" depends="clean" description="Installs composer executable in the project"> | |
<exec executable="bash" failonerror="true"> | |
<arg value="-c"/> | |
<arg value="curl -s https://getcomposer.org/installer | php"/> | |
</exec> | |
</target> | |
<target name="build-satis" depends="get-composer" description="Creates packages.json via Satis"> | |
<exec executable="php"> | |
<arg value="${basedir}/composer.phar" /> | |
<arg value="create-project" /> | |
<arg value="composer/satis" /> | |
</exec> | |
</target> | |
<target name="build-composer-packages" depends="build-satis" description="Creates packages.json via Satis"> | |
<exec executable="php"> | |
<arg value="${basedir}/satis/bin/satis" /> | |
<arg value="build" /> | |
<arg value="repositories.json" /> | |
<arg value="${basedir}/build" /> | |
</exec> | |
</target> | |
<target name="install" depends="get-composer" description="Installs dependencies and sets up the project"> | |
<exec executable="php" failonerror="true"> | |
<arg value="${basedir}/composer.phar" /> | |
<arg value="update" /> | |
<arg value="--prefer-dist" /> | |
</exec> | |
</target> | |
<target name="prepare" depends="clean" description="Prepare for build"> | |
<mkdir dir="${basedir}/build/api"/> | |
<mkdir dir="${basedir}/build/code-browser"/> | |
<mkdir dir="${basedir}/build/coverage"/> | |
<mkdir dir="${basedir}/build/logs"/> | |
<mkdir dir="${basedir}/build/pdepend"/> | |
<mkdir dir="${basedir}/build/phpdox"/> | |
</target> | |
<target name="lint" description="Perform syntax check of sourcecode files"> | |
<apply executable="php" failonerror="true"> | |
<arg value="-l" /> | |
<fileset dir="${basedir}/src"> | |
<include name="**/*.php" /> | |
<modified /> | |
</fileset> | |
<fileset dir="${basedir}/tests"> | |
<include name="**/*.php" /> | |
<modified /> | |
</fileset> | |
</apply> | |
</target> | |
<target name="phploc" description="Measure project size using PHPLOC"> | |
<exec executable="phploc"> | |
<arg value="--log-csv" /> | |
<arg value="${basedir}/build/logs/phploc.csv" /> | |
<arg path="${basedir}/src" /> | |
</exec> | |
</target> | |
<target name="pdepend" description="Calculate software metrics using PHP_Depend"> | |
<exec executable="pdepend"> | |
<arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" /> | |
<arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" /> | |
<arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" /> | |
<arg path="${basedir}/src" /> | |
</exec> | |
</target> | |
<target name="phpmd" | |
description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing."> | |
<exec executable="phpmd"> | |
<arg path="${basedir}/src" /> | |
<arg value="text" /> | |
<arg value="${basedir}/phpmd.xml.dist" /> | |
</exec> | |
</target> | |
<target name="phpmd-ci" description="Perform project mess detection using PHPMD creating a log file for the continuous integration server"> | |
<exec executable="phpmd"> | |
<arg path="${basedir}/src" /> | |
<arg value="xml" /> | |
<arg value="${basedir}/phpmd.xml.dist" /> | |
<arg value="--reportfile" /> | |
<arg value="${basedir}/build/logs/pmd.xml" /> | |
</exec> | |
</target> | |
<target name="phpcs" | |
description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing."> | |
<exec executable="phpcs"> | |
<arg value="--standard=PSR2" /> | |
<arg path="${basedir}/src" /> | |
</exec> | |
</target> | |
<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server"> | |
<exec executable="phpcs"> | |
<arg value="--report=checkstyle" /> | |
<arg value="--report-file=${basedir}/build/logs/checkstyle.xml" /> | |
<arg value="--standard=PSR2" /> | |
<arg path="${basedir}/src" /> | |
</exec> | |
</target> | |
<target name="phpcpd" description="Find duplicate code using PHPCPD"> | |
<exec executable="phpcpd"> | |
<arg value="--log-pmd" /> | |
<arg value="${basedir}/build/logs/pmd-cpd.xml" /> | |
<arg path="${basedir}/src" /> | |
</exec> | |
</target> | |
<target name="phpdox" description="Generate API documentation using phpDox"> | |
<exec executable="phpdox"> | |
<arg value="-f" /> | |
<arg value="${basedir}/phpdox.xml.dist" /> | |
</exec> | |
</target> | |
<target name="phpunit" description="Run unit tests with PHPUnit"> | |
<exec executable="phpunit" failonerror="true"> | |
<arg value="-c" /> | |
<arg value="${basedir}/phpunit.xml.dist" /> | |
</exec> | |
</target> | |
<target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser"> | |
<exec executable="phpcb"> | |
<arg value="--log" /> | |
<arg path="${basedir}/build/logs" /> | |
<arg value="--source" /> | |
<arg path="${basedir}/src" /> | |
<arg value="--output" /> | |
<arg path="${basedir}/build/code-browser" /> | |
</exec> | |
</target> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace ContentTest\EntityRepository; | |
use PHPUnit_Framework_TestCase; | |
use ContentTest\Util\ServiceManagerFactory; | |
use Content\EntityRepository\PageRepository; | |
/** | |
* Tests for PageRepository | |
* | |
* @author Marco Pivetta <[email protected]> | |
*/ | |
class PageRepositoryTest extends PHPUnit_Framework_TestCase | |
{ | |
/** | |
* @var \Doctrine\Common\DataFixtures\Executor\AbstractExecutor | |
*/ | |
protected $fixtureExectutor; | |
/** | |
* @var PageRepository | |
*/ | |
protected $repository; | |
public function setUp() | |
{ | |
$sm = ServiceManagerFactory::getServiceManager(); | |
$this->repository = $sm->get('Content\EntityRepository\PageRepository'); | |
$this->fixtureExectutor = $sm->get('Doctrine\Common\DataFixtures\Executor\AbstractExecutor'); | |
$this->assertInstanceOf('Content\EntityRepository\PageRepository', $this->repository); | |
} | |
/** | |
* @covers \Content\EntityRepository\PageRepository::getRootPages | |
*/ | |
public function testGetRootPages() | |
{ | |
$pageWithNoLogs = new PageWithNoLogs(); | |
$this->fixtureExectutor->execute(array($pageWithNoLogs)); | |
$this->assertEmpty($this->repository->getRootPages()); | |
$this->assertCount(1, $this->repository->findAll()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace ContentDataFixture; | |
use Doctrine\Common\DataFixtures\AbstractFixture; | |
use Doctrine\Common\Persistence\ObjectManager; | |
use Content\Entity\Page; | |
/** | |
* @author Marco Pivetta <[email protected]> | |
*/ | |
class PageWithNoLogs extends AbstractFixture | |
{ | |
/** | |
* @var Page | |
*/ | |
protected $page; | |
/** | |
* {inheritDoc} | |
*/ | |
public function load(ObjectManager $manager) | |
{ | |
$this->page = new Page(); | |
$manager->persist($this->page); | |
$manager->flush(); | |
} | |
/** | |
* @return Page | |
*/ | |
public function getPage() | |
{ | |
return $this->page; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @author Marco Pivetta <[email protected]> | |
*/ | |
namespace ContentTest\Util; | |
use Zend\ServiceManager\ServiceManager; | |
use Zend\ServiceManager\ServiceLocatorInterface; | |
use Zend\Mvc\Service\ServiceManagerConfig; | |
use Doctrine\Common\DataFixtures\Purger\ORMPurger as FixturePurger; | |
use Doctrine\Common\DataFixtures\Executor\ORMExecutor as FixtureExecutor; | |
use Doctrine\ORM\Tools\SchemaTool; | |
/** | |
* Base test case to be used when a new service manager instance is required | |
*/ | |
abstract class ServiceManagerFactory | |
{ | |
/** | |
* @var array | |
*/ | |
private static $config = array(); | |
/** | |
* @static | |
* @param array $config | |
*/ | |
public static function setApplicationConfig(array $config) | |
{ | |
static::$config = $config; | |
} | |
/** | |
* @static | |
* @return array | |
*/ | |
public static function getApplicationConfig() | |
{ | |
return static::$config; | |
} | |
/** | |
* @param array|null $config | |
* @return ServiceManager | |
*/ | |
public static function getServiceManager(array $config = null) | |
{ | |
$config = $config ?: static::getApplicationConfig(); | |
$serviceManager = new ServiceManager(new ServiceManagerConfig( | |
isset($config['service_manager']) ? $config['service_manager'] : array() | |
)); | |
$serviceManager->setService('ApplicationConfig', $config); | |
/* @var $moduleManager \Zend\ModuleManager\ModuleManagerInterface */ | |
$moduleManager = $serviceManager->get('ModuleManager'); | |
$moduleManager->loadModules(); | |
// @todo move to own factory class/add to merged configuration? Create a test module? | |
$serviceManager->setFactory( | |
'Doctrine\Common\DataFixtures\Executor\AbstractExecutor', | |
function(ServiceLocatorInterface $sl) | |
{ | |
/* @var $em \Doctrine\ORM\EntityManager */ | |
$em = $sl->get('Doctrine\ORM\EntityManager'); | |
$schemaTool = new SchemaTool($em); | |
$schemaTool->createSchema($em->getMetadataFactory()->getAllMetadata()); | |
return new FixtureExecutor($em, new FixturePurger($em)); | |
} | |
); | |
return $serviceManager; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment