From 6570d5cbe21af37a147cb966c12e45801230b2a9 Mon Sep 17 00:00:00 2001 From: FabienSalles Date: Fri, 8 Nov 2019 12:00:48 +0100 Subject: [PATCH] Fix error when we use VO for the marking property Fix Illegal offset type when we use ValueObject instead of string for the marking property #28203 #22031 --- .../MarkingStore/MethodMarkingStore.php | 2 +- .../MarkingStore/MethodMarkingStoreTest.php | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Workflow/MarkingStore/MethodMarkingStore.php b/src/Symfony/Component/Workflow/MarkingStore/MethodMarkingStore.php index a2341aadbd..3835765265 100644 --- a/src/Symfony/Component/Workflow/MarkingStore/MethodMarkingStore.php +++ b/src/Symfony/Component/Workflow/MarkingStore/MethodMarkingStore.php @@ -61,7 +61,7 @@ final class MethodMarkingStore implements MarkingStoreInterface } if ($this->singleState) { - $marking = [$marking => 1]; + $marking = [(string) $marking => 1]; } return new Marking($marking); diff --git a/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php b/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php index 7b5c7ffa91..7393faa825 100644 --- a/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php +++ b/src/Symfony/Component/Workflow/Tests/MarkingStore/MethodMarkingStoreTest.php @@ -52,4 +52,35 @@ class MethodMarkingStoreTest extends TestCase $this->assertEquals($marking, $marking2); } + + public function testGetMarkingWithValueObject() + { + $subject = new Subject($this->createValueObject('first_place')); + + $markingStore = new MethodMarkingStore(true); + + $marking = $markingStore->getMarking($subject); + + $this->assertInstanceOf(Marking::class, $marking); + $this->assertCount(1, $marking->getPlaces()); + $this->assertSame('first_place', (string) $subject->getMarking()); + } + + private function createValueObject(string $markingValue) + { + return new class($markingValue) { + /** @var string */ + private $markingValue; + + public function __construct(string $markingValue) + { + $this->markingValue = $markingValue; + } + + public function __toString() + { + return $this->markingValue; + } + }; + } }