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 ] ], true) ); $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode() ); } /** * @dataProvider provideValidDataMove */ 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', ] ], true) ); $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']); } /** * @dataProvider provideValidDataMove */ 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 ], true) ); $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode() ); $data = \json_decode($client->getResponse()->getContent(), true); $this->assertEquals(null, $data); } /** * @dataProvider provideValidDataEditMember */ 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(); $form['household_member[endDate]'] = (new \DateTime('tomorrow')) ->format('Y-m-d'); $crawler = $client->submit($form); $this->assertEquals(302, $client->getResponse()->getStatusCode()); } 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 ($i <= 1); } public function provideValidDataEditMember(): \Iterator { self::bootKernel(); $em = self::$container->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'] ]; } }