buildController($persons); $request = new Request(query: ['caller' => $caller]); $response = $controller->findCaller($request); $actual = json_decode($response->getContent(), true); self::assertEqualsCanonicalizing($expected, $actual); } public static function provideFindCaller(): iterable { yield [ '32486540600', [], ['found' => false, 'name' => null], ]; yield [ '32486540600', [new Person()], ['found' => true, 'name' => 'pppp'], ] ; yield [ '32486540600', [new Person(), new Person()], ['found' => true, 'name' => 'multiple'], ]; } public function testFindCallerWithoutCallerArgument(): void { self::expectException(BadRequestHttpException::class); $controller = $this->buildController([]); $request = new Request(query: []); $controller->findCaller($request); } public function testFindCallerWithEmptyCallerArgument(): void { self::expectException(BadRequestHttpException::class); $controller = $this->buildController([]); $request = new Request(query: ['caller' => '']); $controller->findCaller($request); } public function testFindCallerWithInvalidCaller(): void { self::expectException(BadRequestHttpException::class); $controller = $this->buildController([]); $request = new Request(query: ['caller' => 'abcde']); $controller->findCaller($request); } private function buildController(array $personsFound): FindCallerController { $phonenumberHelper = $subject = new PhonenumberHelper( new ArrayAdapter(), new ParameterBag([ 'chill_main.phone_helper' => [ 'default_carrier_code' => 'BE', ], ]), new NullLogger() ); $personRepository = $this->prophesize(PersonRepository::class); $personRepository->findByPhoneNumber(Argument::any(), Argument::type('int'), Argument::type('int'))->willReturn($personsFound); $personRender = $this->prophesize(PersonRenderInterface::class); $personRender->renderString(Argument::type(Person::class), Argument::type('array'))->willReturn('pppp'); return new FindCallerController($phonenumberHelper, $personRepository->reveal(), $personRender->reveal()); } }