prophesize(ExportInterface::class); $exportManager = $this->prophesize(ExportManager::class); $exportManager->getExport('dummy_export')->willReturn($export->reveal()); $exportManager->isGrantedForElement(Argument::any())->willReturn($isGranted); $accessDecisionManager = $this->prophesize(AccessDecisionManagerInterface::class); $voter = new SavedExportVoter($exportManager->reveal(), $accessDecisionManager->reveal()); $token = new UsernamePasswordToken($user, 'default', ['ROLE_USER']); self::assertEquals($expectedResult, $voter->vote($token, $savedExport, [$attribute])); } public static function voteProvider(): iterable { $alls = [SavedExportVoter::GENERATE, SavedExportVoter::GENERATE, SavedExportVoter::EDIT, SavedExportVoter::DELETE]; $userA = new User(); $userB = new User(); $userC = new User(); $group = new UserGroup(); $group->addUser($userC); $savedExport = new SavedExport(); $savedExport->setExportAlias('dummy_export'); $savedExport->setUser($userA); // abstain foreach ($alls as $attribute) { yield [ $attribute, new \stdClass(), $userA, VoterInterface::ACCESS_ABSTAIN, true, ]; } yield [ 'dummy', $savedExport, $userA, VoterInterface::ACCESS_ABSTAIN, false, ]; foreach ($alls as $attribute) { yield [ $attribute, $savedExport, $userA, VoterInterface::ACCESS_GRANTED, true, ]; } yield [ SavedExportVoter::GENERATE, $savedExport, $userA, VoterInterface::ACCESS_DENIED, false, ]; foreach ($alls as $attribute) { yield [ $attribute, $savedExport, $userB, VoterInterface::ACCESS_DENIED, true, ]; } $savedExport = new SavedExport(); $savedExport->setExportAlias('dummy_export'); $savedExport->setUser($userA); $savedExport->addShare($userB); yield [ SavedExportVoter::GENERATE, $savedExport, $userB, VoterInterface::ACCESS_DENIED, false, ]; yield [ SavedExportVoter::GENERATE, $savedExport, $userB, VoterInterface::ACCESS_GRANTED, true, ]; foreach ([SavedExportVoter::EDIT, SavedExportVoter::DELETE] as $attribute) { yield [ $attribute, $savedExport, $userB, VoterInterface::ACCESS_DENIED, true, ]; } } }