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) + ); + } +}