summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2025-12-19 12:47:30 +0000
committerGreg Roach <greg@subaqua.co.uk>2025-12-19 12:47:30 +0000
commit85ca24a2537fd226aad3b96fc7dae008b2bfd51b (patch)
treecc994cc9f40625058f02e959557db2352d7775a8 /tests
parent0d449a2e0ca2b3ca6b17df4d18c102bdfae98d86 (diff)
downloadwebtrees-85ca24a2537fd226aad3b96fc7dae008b2bfd51b.tar.gz
webtrees-85ca24a2537fd226aad3b96fc7dae008b2bfd51b.tar.bz2
webtrees-85ca24a2537fd226aad3b96fc7dae008b2bfd51b.zip
Refactor edit/create/delete fact to allow facts to be added in order
Diffstat (limited to 'tests')
-rw-r--r--tests/app/GedcomRecordTest.php118
1 files changed, 116 insertions, 2 deletions
diff --git a/tests/app/GedcomRecordTest.php b/tests/app/GedcomRecordTest.php
index df6270fc80..4ac353fa7c 100644
--- a/tests/app/GedcomRecordTest.php
+++ b/tests/app/GedcomRecordTest.php
@@ -19,13 +19,127 @@ declare(strict_types=1);
namespace Fisharebest\Webtrees;
+use Fisharebest\Webtrees\Contracts\UserInterface;
+use Fisharebest\Webtrees\Services\GedcomImportService;
+use Fisharebest\Webtrees\Services\TreeService;
+use Fisharebest\Webtrees\Services\UserService;
+use InvalidArgumentException;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(GedcomRecord::class)]
class GedcomRecordTest extends TestCase
{
- public function testClassExists(): void
+ protected static bool $uses_database = true;
+
+ private UserInterface $user;
+ private Tree $tree;
+
+ public function setUp(): void
+ {
+ parent::setUp();
+ $user_service = new UserService();
+ $this->user = $user_service->create('test', 'test', 'test', '*');
+ Auth::login($this->user);
+
+ $tree_service = new TreeService(new GedcomImportService());
+ $this->tree = $tree_service->create('test', 'test');
+ $this->tree->setUserPreference($this->user, UserInterface::PREF_TREE_ROLE, UserInterface::ROLE_MANAGER);
+ }
+
+ public function tearDown(): void
+ {
+ $tree_service = new TreeService(new GedcomImportService());
+ $tree_service->delete($this->tree);
+
+ $user_service = new UserService();
+ $user_service->delete($this->user);
+
+ parent::tearDown();
+ }
+
+ public function testCreateFact(): void
{
- self::assertTrue(class_exists(GedcomRecord::class));
+ $individual = $this->tree->createIndividual('0 @@ INDI');
+
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT bar', false);
+ $individual->createFact('1 FACT bar', false);
+
+ $facts = $individual->facts(['FACT']);
+
+ $this->assertCount(4, $facts);
+
+ $individual->createFact('1 FACT baz', false, $facts[2]->id());
+
+ $facts = $individual->facts(['FACT']);
+
+ $this->assertCount(5, $facts);
+ $this->assertSame('1 FACT foo', $facts[0]->gedcom());
+ $this->assertSame('1 FACT foo', $facts[1]->gedcom());
+ $this->assertSame('1 FACT baz', $facts[2]->gedcom());
+ $this->assertSame('1 FACT bar', $facts[3]->gedcom());
+ $this->assertSame('1 FACT bar', $facts[4]->gedcom());
+ }
+
+ public function createFactWithInvalidData(): void
+ {
+ $this->expectException(InvalidArgumentException::class);
+
+ $individual = $this->tree->createIndividual('0 @@ INDI');
+ $individual->createFact('2 FOO bar', false);
+ }
+
+ public function testDeleteFact(): void
+ {
+ $individual = $this->tree->createIndividual('0 @@ INDI');
+
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT bar', false);
+ $individual->createFact('1 FACT bar', false);
+
+ $facts = $individual->facts(['FACT']);
+
+ $individual->deleteFact($facts[2]->id(), false);
+
+ $facts = $individual->facts(['FACT']);
+
+ $this->assertCount(3, $facts);
+ $this->assertSame('1 FACT foo', $facts[0]->gedcom());
+ $this->assertSame('1 FACT foo', $facts[1]->gedcom());
+ $this->assertSame('1 FACT bar', $facts[2]->gedcom());
+ }
+
+ public function testUpdateFact(): void
+ {
+ $individual = $this->tree->createIndividual('0 @@ INDI');
+
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT foo', false);
+ $individual->createFact('1 FACT bar', false);
+ $individual->createFact('1 FACT bar', false);
+
+ $facts = $individual->facts(['FACT']);
+
+ $individual->updateFact($facts[2]->id(), '1 FACT baz', false);
+
+ $facts = $individual->facts(['FACT']);
+
+ $this->assertCount(4, $facts);
+ $this->assertSame('1 FACT foo', $facts[0]->gedcom());
+ $this->assertSame('1 FACT foo', $facts[1]->gedcom());
+ $this->assertSame('1 FACT baz', $facts[2]->gedcom());
+ $this->assertSame('1 FACT bar', $facts[3]->gedcom());
+ }
+
+ public function updateFactWithInvalidData(): void
+ {
+ $this->expectException(InvalidArgumentException::class);
+
+ $individual = $this->tree->createIndividual('0 @@ INDI');
+ $individual->createFact('1 FACT foo', false);
+ $facts = $individual->facts(['FACT']);
+ $individual->updateFact($facts[0]->id(), '2 FOO bar', false);
}
}