Codeception / Codeception/module-doctrine
Why flush is necesary on methods like grabFromRepository?
- Ngôn ngữ chính
- PHP
- Star
- 4
- Fork
- 2
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
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?
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với src/Codeception/Module/Doctrine2.php, tại khu vực quanh flush được tham chiếu trong grabEntitiesFromRepository, sau đó lần theo các lệnh gọi từ tests/_support/Base/BaseActor.php tại các dòng 193, 164 và 405–423. Tái hiện thiết lập của bài kiểm thử chức năng và kiểm tra thời điểm transaction trở thành rollback-only; hoàn tất khi xác định được liệu flush của module có gây ra commit failure hay không và nguyên nhân đã được xác nhận được ghi lại hoặc khắc phục.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- php, symfony
- Lĩnh vực
- backend, testing-qa
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100