builder( baseContext: ['resource_class' => Client::class, 'groups' => ['client:read', 'default:read']], granted: true, ); $context = $builder->createFromRequest(new Request(), true); self::assertContains('client:read:accounting', $context['groups']); } public function testDoesNotAddAccountingGroupWhenNotGranted(): void { $builder = $this->builder( baseContext: ['resource_class' => Client::class, 'groups' => ['client:read', 'default:read']], granted: false, ); $context = $builder->createFromRequest(new Request(), true); self::assertNotContains('client:read:accounting', $context['groups']); } public function testDoesNotAddAccountingGroupOnWrite(): void { $builder = $this->builder( baseContext: ['resource_class' => Client::class, 'groups' => ['client:write:main']], granted: true, ); // normalization = false -> ecriture : pas de groupe de lecture ajoute. $context = $builder->createFromRequest(new Request(), false); self::assertNotContains('client:read:accounting', $context['groups']); } public function testIgnoresOtherResources(): void { $builder = $this->builder( baseContext: ['resource_class' => 'App\Other\Resource', 'groups' => ['other:read']], granted: true, ); $context = $builder->createFromRequest(new Request(), true); self::assertSame(['other:read'], $context['groups']); } /** * @param array $baseContext */ private function builder(array $baseContext, bool $granted): ClientReadGroupContextBuilder { $decorated = $this->createStub(SerializerContextBuilderInterface::class); $decorated->method('createFromRequest')->willReturn($baseContext); $security = $this->createStub(Security::class); $security->method('isGranted')->willReturn($granted); return new ClientReadGroupContextBuilder($decorated, $security); } }