get(EntityManagerInterface::class); $membershipIds = $em->createQuery('SELECT m.id FROM ' . HouseholdMember::class . ' m ' . 'JOIN m.person p ' . 'JOIN p.center c ' . 'WHERE c.name = :center AND m.endDate IS NULL') ->setParameter('center', 'Center A') ->getScalarResult(); shuffle($membershipIds); yield [array_pop($membershipIds)['id']]; } public function provideValidDataMove(): Iterator { self::bootKernel(); $em = self::$container->get(EntityManagerInterface::class); $yesterday = new DateTimeImmutable('yesterday'); $personIds = $em->createQuery( 'SELECT p.id FROM ' . Person::class . ' p ' . 'JOIN p.center c ' . 'WHERE ' . 'c.name = :center ' ) ->setParameter('center', 'Center A') ->setMaxResults(100) ->getScalarResult(); shuffle($personIds); $household = new Household(); $em->persist($household); $em->flush(); $positions = $em->createQuery('SELECT pos.id FROM ' . Position::class . ' pos ' . 'WHERE pos.shareHouseHold = TRUE') ->getResult(); $i = 0; do { $id = array_pop($personIds)['id']; $person = self::$container->get(EntityManagerInterface::class) ->getRepository(Person::class) ->find($id); $participation = $person->getCurrentHouseholdParticipationShareHousehold(); if (null === $participation || ( null === $participation->getEndDate() && $participation->getStartDate() <= $yesterday )) { ++$i; yield [ $id, $household->getId(), $positions[random_int(0, count($positions) - 1)]['id'], new DateTimeImmutable('tomorrow'), ]; } } while (1 >= $i); } /** * @dataProvider provideValidDataEditMember * * @param mixed $memberId */ public function testEditMember($memberId) { $client = $this->getClientAuthenticated(); $crawler = $client->request( Request::METHOD_GET, "/fr/person/household/member/{$memberId}/edit" ); $this->assertResponseIsSuccessful(); $form = $crawler->selectButton('Enregistrer') ->form(); $crawler = $client->submit($form); $this->assertEquals(302, $client->getResponse()->getStatusCode()); } /** * @dataProvider provideValidDataMove * * @param mixed $personId * @param mixed $householdId * @param mixed $positionId */ public function testLeaveWithoutHousehold($personId, $householdId, $positionId, DateTimeInterface $date) { $client = $this->getClientAuthenticated(); $client->request( Request::METHOD_POST, '/api/1.0/person/household/members/move.json', [], // parameters [], // files [], // server json_encode( [ 'concerned' => [ [ 'person' => [ 'type' => 'person', 'id' => $personId, ], 'start_date' => [ 'datetime' => $date->format(DateTimeInterface::RFC3339), ], 'position' => [ 'type' => 'household_position', 'id' => $positionId, ], 'holder' => false, 'comment' => 'Introduced by automated test', ], ], 'destination' => null, ] ) ); $this->assertEquals( Response::HTTP_OK, $client->getResponse()->getStatusCode() ); $data = json_decode($client->getResponse()->getContent(), true); $this->assertEquals(null, $data); } /** * @dataProvider provideValidDataMove * * @param mixed $personId * @param mixed $householdId * @param mixed $positionId */ public function testMoveMember($personId, $householdId, $positionId, DateTimeInterface $date) { $client = $this->getClientAuthenticated(); $client->request( Request::METHOD_POST, '/api/1.0/person/household/members/move.json', [], // parameters [], // files [], // server json_encode( [ 'concerned' => [ [ 'person' => [ 'type' => 'person', 'id' => $personId, ], 'start_date' => [ 'datetime' => $date->format(DateTimeInterface::RFC3339), ], 'position' => [ 'type' => 'household_position', 'id' => $positionId, ], 'holder' => false, 'comment' => 'Introduced by automated test', ], ], 'destination' => [ 'type' => 'household', 'id' => $householdId, ], ] ) ); $this->assertEquals( Response::HTTP_OK, $client->getResponse()->getStatusCode() ); } /** * @dataProvider provideValidDataMove * * @param mixed $personId * @param mixed $householdId * @param mixed $positionId */ public function testMoveMemberToNewHousehold($personId, $householdId, $positionId, DateTimeInterface $date) { $client = $this->getClientAuthenticated(); $client->request( Request::METHOD_POST, '/api/1.0/person/household/members/move.json', [], // parameters [], // files [], // server json_encode( [ 'concerned' => [ [ 'person' => [ 'type' => 'person', 'id' => $personId, ], 'start_date' => [ 'datetime' => $date->format(DateTimeInterface::RFC3339), ], 'position' => [ 'type' => 'household_position', 'id' => $positionId, ], 'holder' => false, 'comment' => 'Introduced by automated test', ], ], 'destination' => [ 'type' => 'household', ], ] ) ); $this->assertEquals( Response::HTTP_OK, $client->getResponse()->getStatusCode() ); $data = json_decode($client->getResponse()->getContent(), true); $this->assertIsArray($data); $this->assertArrayHasKey('members', $data); $this->assertIsArray($data['members']); $this->assertEquals( 1, count($data['members']), 'assert new household count one member' ); $this->assertArrayHasKey('person', $data['members'][0]); $this->assertArrayHasKey('id', $data['members'][0]['person']); $this->assertEquals($personId, $data['members'][0]['person']['id']); } }