diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 0b975e9d..15896e0e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,6 +6,7 @@ xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" colors="true" beStrictAboutOutputDuringTests="true" + executionOrder="random" > diff --git a/src/Services/DatabaseTools/ORMDatabaseTool.php b/src/Services/DatabaseTools/ORMDatabaseTool.php index 7c1f77da..4b167f80 100644 --- a/src/Services/DatabaseTools/ORMDatabaseTool.php +++ b/src/Services/DatabaseTools/ORMDatabaseTool.php @@ -218,7 +218,8 @@ protected function cleanDatabase(): void protected function disableForeignKeyChecksIfApplicable(): void { - if (!$this->isMysql()) { + // Don't disable FOREIGN_KEY_CHECKS is the database is not created yet + if (!$this->isMysql() || !$this->connection->isConnected()) { return; } diff --git a/tests/Test/ConfigSqliteTest.php b/tests/Test/ConfigSqliteTest.php index 68bcb8c0..b5c4fce0 100644 --- a/tests/Test/ConfigSqliteTest.php +++ b/tests/Test/ConfigSqliteTest.php @@ -323,7 +323,7 @@ public function testLoadDependentFixturesWithDependencyInjected(): void /** * Use nelmio/alice. */ - public function testLoadFixturesFiles(): void + public function testLoadFixturesFiles(): array { $fixtures = $this->databaseTool->loadAliceFixture([ '@AcmeBundle/DataFixtures/ORM/user.yml', @@ -362,6 +362,8 @@ public function testLoadFixturesFiles(): void ; $this->assertIsString($user->getName()); + + return $fixtures; } /** @@ -383,8 +385,24 @@ public function testLoadNonexistentFixturesFiles(): void */ public function testLoadFixturesFilesWithPurgeModeTruncate(): void { + // Load initial fixtures + $this->testLoadFixturesFiles(); + + $em = $this->getContainer() + ->get('doctrine.orm.entity_manager'); + + $users = $em->getRepository(User::class) + ->findAll(); + + // There are 10 users in the database + $this->assertSame( + 10, + count($users) + ); + $this->databaseTool->setPurgeMode(ORMPurger::PURGE_MODE_TRUNCATE); + // Load fixtures with append = true $fixtures = $this->databaseTool->loadAliceFixture([ '@AcmeBundle/DataFixtures/ORM/user.yml', ], true); @@ -397,7 +415,18 @@ public function testLoadFixturesFilesWithPurgeModeTruncate(): void $fixtures ); - $id = 1; + $users = $em->getRepository(User::class) + ->findAll(); + + // There are only 10 users in the database + $this->assertSame( + 10, + count($users) + ); + + // Auto-increment hasn't been altered, so ids start from 11 + $id = 11; + /** @var User $user */ foreach ($fixtures as $user) { $this->assertSame($id++, $user->getId());