From 17a81d7e666723b42b54df7a7c6022339eeb50b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 15 Dec 2021 23:05:25 +0100 Subject: [PATCH] build base context data --- .../Service/Context/BaseContextData.php | 53 +++++++++++++++ .../config/services.yaml | 5 ++ .../Service/Context/BaseContextDataTest.php | 66 +++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 src/Bundle/ChillDocGeneratorBundle/Service/Context/BaseContextData.php create mode 100644 src/Bundle/ChillDocGeneratorBundle/tests/Service/Context/BaseContextDataTest.php diff --git a/src/Bundle/ChillDocGeneratorBundle/Service/Context/BaseContextData.php b/src/Bundle/ChillDocGeneratorBundle/Service/Context/BaseContextData.php new file mode 100644 index 000000000..0194b8d08 --- /dev/null +++ b/src/Bundle/ChillDocGeneratorBundle/Service/Context/BaseContextData.php @@ -0,0 +1,53 @@ +security = $security; + $this->normalizer = $normalizer; + } + + public function getData(): array + { + $data = []; + $user = $this->security->getUser(); + + $data['creator'] = $this->normalizer->normalize( + $user instanceof User ? $user : null, + 'docgen', + ['docgen:expects' => User::class, 'groups' => ['docgen:read']] + ); + $data['createdAt'] = $this->normalizer->normalize(new DateTimeImmutable(), 'docgen', [ + 'docgen:expects' => DateTimeImmutable::class, 'groups' => ['docgen:read'], + ]); + $data['location'] = $this->normalizer->normalize( + $user instanceof User ? $user->getCurrentLocation() : null, + 'docgen', + ['docgen:expects' => Location::class, 'groups' => ['docgen:expects']] + ); + + return $data; + } +} diff --git a/src/Bundle/ChillDocGeneratorBundle/config/services.yaml b/src/Bundle/ChillDocGeneratorBundle/config/services.yaml index 54bf5a697..5bdfe2a11 100644 --- a/src/Bundle/ChillDocGeneratorBundle/config/services.yaml +++ b/src/Bundle/ChillDocGeneratorBundle/config/services.yaml @@ -34,6 +34,11 @@ services: autowire: true autoconfigure: true + Chill\DocGeneratorBundle\Service\Context\: + resource: "../Service/Context/" + autowire: true + autoconfigure: true + Chill\DocGeneratorBundle\GeneratorDriver\: resource: "../GeneratorDriver/" autowire: true diff --git a/src/Bundle/ChillDocGeneratorBundle/tests/Service/Context/BaseContextDataTest.php b/src/Bundle/ChillDocGeneratorBundle/tests/Service/Context/BaseContextDataTest.php new file mode 100644 index 000000000..8496bdda1 --- /dev/null +++ b/src/Bundle/ChillDocGeneratorBundle/tests/Service/Context/BaseContextDataTest.php @@ -0,0 +1,66 @@ +buildBaseContext(); + + $actual = $context->getData(); + + $this->assertIsArray($actual); + $this->assertArrayHasKey('creator', $actual); + $this->assertArrayHasKey('createdAt', $actual); + } + + public function testGenerateWithUser() + { + $security = $this->prophesize(Security::class); + $security->getUser()->willReturn(new User()); + + $context = $this->buildBaseContext($security->reveal()); + + $actual = $context->getData(); + + $this->assertIsArray($actual); + $this->assertArrayHasKey('creator', $actual); + $this->assertArrayHasKey('createdAt', $actual); + } + + private function buildBaseContext( + ?Security $security = null, + ?NormalizerInterface $normalizer = null + ): BaseContextData { + return new BaseContextData( + $security ?? self::$container->get(Security::class), + $normalizer ?? self::$container->get(NormalizerInterface::class) + ); + } +}