app = $this->prophesize(Application::class); $this->app->offsetGet('orm.em')->willReturn($this->prophesize(EntityManager::class)); $this->sut = new Manager($this->app->reveal()); } public function testGetVisaWithoutAnyCheckers() { $file = $this->prophesize(File::class); $visa = $this->sut->getVisa($file->reveal()); $this->assertInstanceOf(Visa::class, $visa); } public function testGetVisaWithOnlyOneCheckerApplicable() { $file = $this->prophesize(File::class); $checker1 = $this->prophesize(CheckerInterface::class); $checker1->isApplicable($file->reveal()) ->willReturn(false); $checker1->check(Argument::any(), $file->reveal()) ->shouldNotBeCalled(); $checker2 = $this->prophesize(CheckerInterface::class); $checker2->isApplicable($file->reveal()) ->willReturn(true); $checker2->check(Argument::any(), $file->reveal()) ->willReturn(new Response(true, $checker2->reveal())); $this->sut->registerCheckers([$checker1->reveal(), $checker2->reveal()]); $visa = $this->sut->getVisa($file->reveal()); $this->assertInstanceOf(Visa::class, $visa); $responses = $visa->getResponses(); $this->assertCount(1, $responses); $this->assertSame($checker2->reveal(), $responses[0]->getChecker()); } }