Codeception / Codeception/module-doctrine

Why flush is necesary on methods like grabFromRepository?

Open
#13 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
4
Forks
2
PR merge metrics
No merged PRs in 30d

Description

I have configured `Doctrine2` and `Symfony` modules as follow:

```yaml
modules:
enabled:
- Symfony:
app_path: 'src'
environment: 'test'
- Doctrine2:
depends: Symfony
cleanup: true
```

and I have created a helper to be used as part of my Functional tests as follow (snippet with relevant parts only):

```php
public function grabWorkableEntityForCase(int $schemeID = CcType::VISA, ?int $cId = null): Cases
{
/** @var Cases $caseEntity */
$caseEntity = $this->grabEntityFromRepository(Cases::class, [
'ccType' => $schemeID,
(new Criteria())->orderBy(['id' => Criteria::DESC])->setMaxResults(1)
]);

// If we need an specific Case just override the previous value
if (null !== $cId) {
$caseEntity = $this->grabEntityFromRepository(Cases::class, ['id' => $cId]);
}

// Unlock it
$caseEntity->removeLock();

//Grab dispute cycle RFI
$disputeCycle = $this->grabEntityFromRepository(DisputeCycle::class, ['id' => DisputeCycle::RETRIEVAL]);
$functionalCode = $this->grabEntityFromRepository(FunctionCode::class, [
'disputeCycle' => $disputeCycle,
(new Criteria())->orderBy(['id' => Criteria::DESC])->setMaxResults(1)
]);

// And assigned to a worker if need be otherwise use always a random user
if (null !== $userID) {
$user = $this->grabEntityFromRepository(User::class, ['id' => $userID]);
} else {
$user = $this->grabWorkableUserEntity();
}

$caseEntity->setUser($user);

$this->haveInRepository($caseEntity);

return $caseEntity;
}
```
from my test the code above is being called as:
```php
public function _before(FunctionalTester $I)
{
$this->user = $I->grabWorkableUserEntity();
$this->case = $I->grabWorkableEntityForCase();
$I->flushAllTables(false, $this->case->getId());
}
```
But I end up with the following error:
```
1) WriteOffOutcomeFunctionalCest: Will record and send fee collection
Test tests/functional/FullWriteOffOutcomeFunctionalCest.php:willRecordAndSendFeeCollection

[Doctrine\DBAL\ConnectionException] Transaction commit failed because the transaction has been marked for rollback only.

Scenario Steps:

15. $I->grabEntityFromRepository("App\Entity\DisputeCycle",{"id":1}) at tests/_support/Base/BaseActor.php:193
14. $I->grabEntityFromRepository("App\Entity\Cases",{"ccType":1,"0":"Doctrine\\Common\\Collections\\Criteria"}) at tests/_support/Base/BaseActor.php:164
13. $I->emptyTable("App\Entity\StatusHist",38613) at tests/_support/Base/BaseActor.php:405
12. $I->emptyTable("App\Entity\ProcessingOutcome",38613) at tests/_support/Base/BaseActor.php:387
11. $I->emptyTable("App\Entity\DisputeResponse",38613) at tests/_support/Base/BaseActor.php:396
10. $I->emptyTable("App\Entity\EventsHistory",38613) at tests/_support/Base/BaseActor.php:423
```
from the error above lines 193 is:
```php
$disputeCycle = $this->grabEntityFromRepository(DisputeCycle::class, ['id' => DisputeCycle::RETRIEVAL]);
```

I am not sure if the [`flush`](https://github.com/Codeception/module-doctrine2/blob/master/src/Codeception/Module/Doctrine2.php#L935) inside `grabEntitiesFromRepository` method is what is causing this or what could be the reason of it, true story is that I have been trying to debug this for hours without success so any help is more than welcome. What I am a missing here?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.