Skip to content

Commit e398a6c

Browse files
committed
fix: enum denormalization
1 parent 0d9551c commit e398a6c

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

src/Bundle/Resources/config/services.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515

1616
<service id="dunglas_doctrine_json_odm.normalizer.array" class="Symfony\Component\Serializer\Normalizer\ArrayDenormalizer" public="false" />
1717

18+
<service id="dunglas_doctrine_json_odm.normalizer.backed_enum" class="Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer" public="false" />
19+
1820
<service id="dunglas_doctrine_json_odm.serializer" class="Dunglas\DoctrineJsonOdm\Serializer" public="true">
1921
<argument type="collection">
22+
<argument type="service" id="dunglas_doctrine_json_odm.normalizer.backed_enum" />
2023
<argument type="service" id="dunglas_doctrine_json_odm.normalizer.array" />
2124
<argument type="service" id="dunglas_doctrine_json_odm.normalizer.object" />
2225
</argument>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
/*
4+
* (c) Kévin Dunglas <[email protected]>
5+
*
6+
* This source file is subject to the MIT license that is bundled
7+
* with this source code in the file LICENSE.
8+
*/
9+
10+
namespace Dunglas\DoctrineJsonOdm\Tests\Fixtures\TestBundle\Enum;
11+
12+
enum InputMode: string
13+
{
14+
case EMAIL = 'email';
15+
}

tests/FunctionalTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Dunglas\DoctrineJsonOdm\Tests\Fixtures\TestBundle\Document\ScalarValue;
1717
use Dunglas\DoctrineJsonOdm\Tests\Fixtures\TestBundle\Entity\Foo;
1818
use Dunglas\DoctrineJsonOdm\Tests\Fixtures\TestBundle\Entity\Product;
19+
use Dunglas\DoctrineJsonOdm\Tests\Fixtures\TestBundle\Enum\InputMode;
1920
use Symfony\Component\Console\Input\StringInput;
2021

2122
/**
@@ -192,4 +193,28 @@ public function testStoreAndRetrieveDocumentWithInstantiatedOtherSerializer(): v
192193
$retrievedProduct = $manager->find(Product::class, $product->id);
193194
$this->assertEquals($attributes, $retrievedProduct->attributes);
194195
}
196+
197+
/**
198+
* @requires PHP 8.1
199+
*/
200+
public function testStoreAndRetrieveEnum(): void
201+
{
202+
$attribute = new Attribute();
203+
$attribute->key = 'email';
204+
$attribute->value = InputMode::EMAIL;
205+
206+
$product = new Product();
207+
$product->name = 'My product';
208+
$product->attributes = [$attribute];
209+
210+
$manager = self::$kernel->getContainer()->get('doctrine')->getManagerForClass(Product::class);
211+
$manager->persist($product);
212+
$manager->flush();
213+
214+
$manager->clear();
215+
216+
$retrievedProduct = $manager->find(Product::class, $product->id);
217+
218+
$this->assertSame(InputMode::EMAIL, $retrievedProduct->attributes[0]->value);
219+
}
195220
}

0 commit comments

Comments
 (0)