From b5011655130adbcff17f533a8d894d1564571ae1 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Thu, 9 Oct 2025 01:01:28 +0200 Subject: [PATCH] Fix using `refresh_all()` with `flush_after()` --- src/Persistence/PersistenceManager.php | 1 + .../Persistence/AutoRefreshTestCase.php | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Persistence/PersistenceManager.php b/src/Persistence/PersistenceManager.php index 5f35cde0d..a1a1055b1 100644 --- a/src/Persistence/PersistenceManager.php +++ b/src/Persistence/PersistenceManager.php @@ -426,6 +426,7 @@ private function flushAllStrategies(): void $this->flush($om); } } + PersistedObjectsTracker::updateIds(); } /** diff --git a/tests/Integration/Persistence/AutoRefreshTestCase.php b/tests/Integration/Persistence/AutoRefreshTestCase.php index b6d8e78fe..f2d021d5e 100644 --- a/tests/Integration/Persistence/AutoRefreshTestCase.php +++ b/tests/Integration/Persistence/AutoRefreshTestCase.php @@ -37,6 +37,7 @@ use function Zenstruck\Foundry\factory; use function Zenstruck\Foundry\Persistence\assert_not_persisted; use function Zenstruck\Foundry\Persistence\assert_persisted; +use function Zenstruck\Foundry\Persistence\flush_after; use function Zenstruck\Foundry\Persistence\refresh; use function Zenstruck\Foundry\Persistence\refresh_all; @@ -223,6 +224,22 @@ public function it_can_refresh_all_objects(): void self::assertSame('foo', $object2->getProp1()); } + #[Test] + public function it_can_refresh_all_objects_in_flush_after(): void + { + [$object1, $object2] = flush_after(fn() => $this->factory()->many(2)->create()); + $objectId1 = $object1->id; + $objectId2 = $object2->id; + + refresh_all(); + + $this->updateObject($objectId1); + $this->updateObject($objectId2); + + self::assertSame('foo', $object1->getProp1()); + self::assertSame('foo', $object2->getProp1()); + } + #[Test] #[DataProvider('provideRepositoryMethod')] public function it_can_refresh_objects_fetched_from_repository_decorator(string $methodName, array $params): void @@ -273,7 +290,7 @@ public function it_can_refresh_object_fetched_find_and_id(): void PersistedObjectsTracker::reset(); self::assertNull( - $this->factory()::repository()->find(42) + $this->factory()::repository()->find(43) ); $object = $this->factory()::repository()->find($id);