setAvailableDispositions(2); $this->dispose($assignment); $this->dispose($assignment)->setStatus(Disposition::STATUS_CALLED_OFF); $this->assertSame(VoterInterface::ACCESS_GRANTED, $this->voteDispose($assignment)); } public function testAFullAssignmentCannotBeStaffed(): void { $assignment = (new Assignment())->setAvailableDispositions(2); $this->dispose($assignment); $this->dispose($assignment); $this->assertSame(VoterInterface::ACCESS_DENIED, $this->voteDispose($assignment)); } private function dispose(Assignment $assignment): Disposition { $disposition = new Disposition(new Application($assignment, new Teamer())); $assignment->addDisposition($disposition); return $disposition; } private function voteDispose(Assignment $assignment): int { $security = $this->createStub(Security::class); $security->method('isGranted')->willReturnCallback(fn (string $role) => 'ROLE_ADMINISTRATIVE' === $role); return (new ApplicationVoter($security))->vote( $this->createStub(TokenInterface::class), new Application($assignment, new Teamer()), [ApplicationVoter::DISPOSE], ); } }