createMock(ValidatorInterface::class); $this->factory = new MembersEditorFactory($validator); } public function testMovePersonWithoutSharedHousehold() { $person = new Person(); $position = (new Position()) ->setShareHousehold(false); $household1 = new Household(); $household2 = new Household(); $editor = $this->factory->createEditor($household1); $editor->addMovement( DateTimeImmutable::createFromFormat('Y-m-d', '2020-01-01'), $person, $position ); $persistables = $editor->getPersistable(); $this->assertEquals(1, count($persistables)); $membership1 = $person->getHouseholdParticipations()->first(); $this->assertSame($household1, $membership1->getHousehold()); $this->assertNull($membership1->getEndDate()); // move to another household $date = DateTimeImmutable::createFromFormat('Y-m-d', '2021-01-01'); $editor = $this->factory->createEditor($household2); $editor->addMovement( $date, $person, $position ); $persistables = $editor->getPersistable(); $this->assertEquals(1, count($persistables)); $membership2 = $person->getHouseholdParticipations()->last(); $this->assertNull($membership2->getEndDate()); $this->assertSame($household2, $membership2->getHousehold()); $this->assertNull( $membership1->getEndDate(), 'assert that the membership1 is not closed' ); } public function testMovePersonWithSharedHousehold() { $person = new Person(); $position = (new Position()) ->setShareHousehold(true); $household1 = new Household(); $household2 = new Household(); $editor = $this->factory->createEditor($household1); $editor->addMovement( DateTimeImmutable::createFromFormat('Y-m-d', '2020-01-01'), $person, $position ); $persistables = $editor->getPersistable(); $this->assertEquals(\count($persistables), 1); $membership1 = $persistables[0]; $this->assertSame($household1, $membership1->getHousehold()); $this->assertNull($membership1->getEndDate()); // move to another household $date = DateTimeImmutable::createFromFormat('Y-m-d', '2021-01-01'); $editor = $this->factory->createEditor($household2); $editor->addMovement( $date, $person, $position ); $persistables = $editor->getPersistable(); $this->assertEquals(1, count($persistables)); $membership2 = $persistables[0]; $this->assertSame($household2, $membership2->getHousehold()); $this->assertNull($membership2->getEndDate()); $this->assertNotNull( $membership1->getEndDate(), 'assert that the membership1 is closed' ); $this->assertEquals($date, $membership1->getEndDate()); } }