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

Research direction

Start with src/Codeception/Module/Doctrine2.php around the flush referenced in grabEntitiesFromRepository, then trace the calls from tests/_support/Base/BaseActor.php at lines 193, 164, and 405–423. Reproduce the functional test setup and inspect when the transaction becomes rollback-only; done means identifying whether the module flush causes the commit failure and documenting or fixing the confirmed cause.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, symfony
Domain
backend, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.