prophesize(Security::class); if (null !== $isGranted) { $security->isGranted(Argument::any(), Argument::any())->willReturn($isGranted); } $export = $this->prophesize(ExportInterface::class); $exportManager = $this->prophesize(ExportManager::class); $exportManager->getExport($savedExport->getExportAlias())->willReturn($export->reveal()); $voter = new SavedExportVoter($exportManager->reveal(), $security->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); 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, ]; } } }