|
17 | 17 | use Zenstruck\Foundry\Persistence\PersistentObjectFactory; |
18 | 18 | use Zenstruck\Foundry\Persistence\ProxyGenerator; |
19 | 19 | use Zenstruck\Foundry\Test\ResetDatabase; |
| 20 | +use Zenstruck\Foundry\Tests\Fixture\Document\DocumentWithReadonly; |
| 21 | +use Zenstruck\Foundry\Tests\Fixture\Entity\EdgeCases\EntityWithReadonly\EntityWithReadonly; |
20 | 22 | use Zenstruck\Foundry\Tests\Fixture\Factories\Object1Factory; |
21 | 23 | use Zenstruck\Foundry\Tests\Fixture\Model\GenericModel; |
22 | 24 |
|
@@ -208,28 +210,45 @@ public static function useGetterOnObjectCreatedInDataProvider(): iterable |
208 | 210 | ]; |
209 | 211 | } |
210 | 212 |
|
211 | | - // todo: FixMe! this is a known bug, currently the afterPersist callback is not called when creating objects in data provider |
212 | | - // |
213 | | - // #[Test] |
214 | | - // #[DataProvider('createOneObjectInDataProviderWithAfterPersistCallback')] |
215 | | - // public function assert_after_persist_callbacks_are_triggered(?GenericModel $providedData): void |
216 | | - // { |
217 | | - // static::factory()::assert()->count(1); |
218 | | - // |
219 | | - // self::assertSame('after persist callback', $providedData->getProp1()); |
220 | | - // } |
221 | | - // |
222 | | - // public static function createOneObjectInDataProviderWithAfterPersistCallback(): iterable |
223 | | - // { |
224 | | - // yield [ |
225 | | - // static::factory() |
226 | | - // ->afterPersist(fn(GenericModel $object) => $object->setProp1('after persist callback')) |
227 | | - // ->create() |
228 | | - // ]; |
229 | | - // } |
| 213 | + #[Test] |
| 214 | + #[DataProvider('createOneObjectInDataProviderWithAfterPersistCallback')] |
| 215 | + public function assert_after_persist_callbacks_are_triggered(?GenericModel $providedData): void |
| 216 | + { |
| 217 | + static::factory()::assert()->count(1); |
| 218 | + |
| 219 | + self::assertSame('after persist callback', $providedData?->getProp1()); |
| 220 | + } |
| 221 | + |
| 222 | + public static function createOneObjectInDataProviderWithAfterPersistCallback(): iterable |
| 223 | + { |
| 224 | + yield [ |
| 225 | + static::factory() |
| 226 | + ->afterPersist(fn(GenericModel $object) => $object->setProp1('after persist callback')) |
| 227 | + ->create() |
| 228 | + ]; |
| 229 | + } |
| 230 | + |
| 231 | + #[Test] |
| 232 | + #[DataProvider('createObjectWithReadonlyProperties')] |
| 233 | + public function assert_it_can_create_objects_with_readonly_properties(DocumentWithReadonly|EntityWithReadonly|null $providedData): void |
| 234 | + { |
| 235 | + static::objectWithReadonlyFactory()::assert()->count(1); |
| 236 | + |
| 237 | + self::assertSame(1, $providedData?->prop); |
| 238 | + } |
| 239 | + |
| 240 | + public static function createObjectWithReadonlyProperties(): iterable |
| 241 | + { |
| 242 | + yield [static::objectWithReadonlyFactory()->create()]; |
| 243 | + } |
230 | 244 |
|
231 | 245 | /** |
232 | 246 | * @return PersistentObjectFactory<GenericModel> |
233 | 247 | */ |
234 | 248 | abstract protected static function factory(): PersistentObjectFactory; |
| 249 | + |
| 250 | + /** |
| 251 | + * @return PersistentObjectFactory<DocumentWithReadonly|EntityWithReadonly> |
| 252 | + */ |
| 253 | + abstract protected static function objectWithReadonlyFactory(): PersistentObjectFactory; |
235 | 254 | } |
0 commit comments