Skip to content

Commit d9161e2

Browse files
committed
making sure tests are up to date
1 parent f11150c commit d9161e2

33 files changed

Lines changed: 676 additions & 63 deletions

.phpunit.result.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":1,"defects":{"Gedcomx\\Unit\\GedcomxFileTests::testCreateGedxFile":5},"times":{"Gedcomx\\Tests\\Unit\\Agent\\AddressTests::testAddressDeserialization":0.012,"Gedcomx\\Tests\\Unit\\Agent\\AddressTests::testAddressGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Agent\\AddressTests::testAddressWithMinimalData":0,"Gedcomx\\Tests\\Unit\\Agent\\AgentTests::testAgentDeserialization":0.002,"Gedcomx\\Tests\\Unit\\Agent\\AgentTests::testAgentGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Agent\\AgentTests::testAgentWithoutNames":0,"Gedcomx\\Tests\\Unit\\Conclusion\\DocumentTests::testDocumentDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Conclusion\\DocumentTests::testDocumentGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\DocumentTests::testDocumentWithoutText":0,"Gedcomx\\Tests\\Unit\\Conclusion\\EventTests::testEventDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Conclusion\\EventTests::testEventGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\EventTests::testEventWithoutRoles":0,"Gedcomx\\Tests\\Unit\\Conclusion\\FactTests::testFactDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\FactTests::testFactGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\FactTests::testFactWithoutDate":0,"Gedcomx\\Tests\\Unit\\Conclusion\\GenderTests::testGenderDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\GenderTests::testGenderGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\GenderTests::testGenderWithNullType":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NameTests::testNameDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NameTests::testNameGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NameTests::testNameWithMultipleForms":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PersonTests::testPerson":0.002,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceDescriptionTests::testPlaceDescriptionDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceDescriptionTests::testPlaceDescriptionGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceDescriptionTests::testPlaceDescriptionWithoutCoordinates":0,"Gedcomx\\Tests\\Unit\\Conclusion\\RelationshipTests::testRelationshipDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Conclusion\\RelationshipTests::testRelationshipGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\RelationshipTests::testRelationshipWithoutFacts":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\CommentTests::testCommentDeserialization":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\CommentTests::testCommentGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\CommentTests::testCommentWithoutContributor":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionReferenceTests::testDiscussionReferenceGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionReferenceTests::testDiscussionReferenceWithoutResourceId":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionReferenceTests::testDiscussionReferenceEmpty":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionTests::testDiscussionDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionTests::testDiscussionGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\DiscussionTests::testDiscussionWithoutComments":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\UserTests::testUserDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\UserTests::testUserGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\UserTests::testUserWithMinimalData":0,"Gedcomx\\Unit\\GedcomxFileTests::testReadGedcomxFile":0.002,"Gedcomx\\Unit\\GedcomxFileTests::testXMLSerialization":0.002,"Gedcomx\\Unit\\GedcomxFileTests::testXMLDeserialization":0.001,"Gedcomx\\Unit\\GedcomxFileTests::testCreateGedxFile":0.003,"Gedcomx\\Tests\\Unit\\Source\\SourceCitationTests::testSourceCitationGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Source\\SourceCitationTests::testSourceCitationWithLanguage":0,"Gedcomx\\Tests\\Unit\\Source\\SourceCitationTests::testSourceCitationEmpty":0,"Gedcomx\\Tests\\Unit\\Source\\SourceDescriptionTests::testSourceDescriptionDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Source\\SourceDescriptionTests::testSourceDescriptionGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Source\\SourceDescriptionTests::testSourceDescriptionWithoutCitations":0,"Gedcomx\\Tests\\Unit\\Source\\SourceReferenceTests::testSourceReferenceGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Source\\SourceReferenceTests::testSourceReferenceWithoutDescription":0,"Gedcomx\\Tests\\Unit\\Source\\SourceReferenceTests::testSourceReferenceWithAttribution":0,"Gedcomx\\Tests\\Unit\\XMLTests::testDeserializeXML":0,"Gedcomx\\Tests\\Unit\\Agent\\OnlineAccountTests::testOnlineAccountDeserialization":0,"Gedcomx\\Tests\\Unit\\Agent\\OnlineAccountTests::testOnlineAccountGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Agent\\OnlineAccountTests::testOnlineAccountWithoutServiceHomepage":0,"Gedcomx\\Tests\\Unit\\Conclusion\\DateInfoTests::testDateInfoDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Conclusion\\DateInfoTests::testDateInfoGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\DateInfoTests::testDateInfoWithoutFormal":0,"Gedcomx\\Tests\\Unit\\Conclusion\\EventRoleTests::testEventRoleDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\EventRoleTests::testEventRoleGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\EventRoleTests::testEventRoleWithoutDetails":0,"Gedcomx\\Tests\\Unit\\Conclusion\\IdentifierTests::testIdentifierDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\IdentifierTests::testIdentifierGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\IdentifierTests::testIdentifierWithoutType":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NameFormTests::testNameFormDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Conclusion\\NameFormTests::testNameFormGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NameFormTests::testNameFormWithoutParts":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NamePartTests::testNamePartDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NamePartTests::testNamePartGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\NamePartTests::testNamePartWithoutType":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceReferenceTests::testPlaceReferenceDeserialization":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceReferenceTests::testPlaceReferenceGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Conclusion\\PlaceReferenceTests::testPlaceReferenceWithoutNormalized":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ArtifactMetadataTests::testArtifactMetadataConstruction":0.001,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ArtifactMetadataTests::testArtifactMetadataGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ArtifactMetadataTests::testArtifactMetadataWithEmptyData":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ChangeInfoTests::testChangeInfoDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ChangeInfoTests::testChangeInfoGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\ChangeInfoTests::testChangeInfoWithoutReason":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MatchInfoTests::testMatchInfoDeserialization":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MatchInfoTests::testMatchInfoGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MatchInfoTests::testMatchInfoWithoutCollection":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeAnalysisTests::testMergeAnalysisConstruction":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeAnalysisTests::testMergeAnalysisGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeAnalysisTests::testMergeAnalysisWithEmptyData":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeConflictTests::testMergeConflictConstruction":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeConflictTests::testMergeConflictGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeConflictTests::testMergeConflictWithEmptyData":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeTests::testMergeDeserialization":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeTests::testMergeGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Extensions\\FamilySearch\\MergeTests::testMergeWithoutResources":0,"Gedcomx\\Tests\\Unit\\Source\\CitationFieldTests::testCitationFieldDeserialization":0,"Gedcomx\\Tests\\Unit\\Source\\CitationFieldTests::testCitationFieldGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Source\\CitationFieldTests::testCitationFieldEmpty":0,"Gedcomx\\Tests\\Unit\\Source\\CoverageTests::testCoverageDeserialization":0.001,"Gedcomx\\Tests\\Unit\\Source\\CoverageTests::testCoverageGettersAndSetters":0,"Gedcomx\\Tests\\Unit\\Source\\CoverageTests::testCoverageWithoutSpatial":0}}

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@ The test suite passes without deprecation warnings on all supported PHP versions
9393
### Test Coverage
9494

9595
Current baseline:
96-
- 54 test cases with 147 assertions
97-
- Core models: Person, Gender, Fact, Name, Event, Relationship, Document, PlaceDescription
98-
- Agent models: Agent, Address
99-
- Source models: SourceDescription, SourceReference, SourceCitation
100-
- FamilySearch extensions: User, Discussion, Comment, DiscussionReference, ChildAndParentsRelationship
101-
- File format: GEDCOM X file (.gedx) read/write, XML serialization/deserialization
96+
- 99 test cases with 237 assertions
97+
- **Core models**: Person, Gender, Fact, Name, NameForm, NamePart, Event, EventRole, Relationship, Document, PlaceDescription, PlaceReference, DateInfo, Identifier
98+
- **Agent models**: Agent, Address, OnlineAccount
99+
- **Source models**: SourceDescription, SourceReference, SourceCitation, Coverage, CitationField
100+
- **FamilySearch extensions**: User, Discussion, Comment, DiscussionReference, ChildAndParentsRelationship, ChangeInfo, MatchInfo, Merge, MergeAnalysis, MergeConflict, ArtifactMetadata
101+
- **File format**: GEDCOM X file (.gedx) read/write, XML serialization/deserialization
102102
- See [TESTING.md](TESTING.md) for detailed coverage information and contributing guidelines
103103

104104
For comprehensive testing documentation, see [TESTING.md](TESTING.md).

TESTING.md

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -62,39 +62,32 @@ vendor/bin/phpunit --coverage-clover build/logs/clover.xml
6262

6363
Current test coverage baseline established:
6464

65-
- **Test Files**: 17 test suites
66-
- **Test Cases**: 50+ tests covering core models and extensions
67-
- **Source Files**: 125 PHP files
68-
- **Core Models**: GEDCOM X conceptual model classes
69-
- **Extensions**: FamilySearch platform extensions
65+
- **Test Files**: 28 test suites
66+
- **Test Cases**: 99 tests with 237 assertions
67+
- **Source Files**: 125+ PHP files
68+
- **Core Models**: Complete GEDCOM X conceptual model class coverage
69+
- **Extensions**: Comprehensive FamilySearch platform extension coverage
7070

7171
### Coverage Areas
7272

7373
#### Well-Covered Components (as of v3.2.0)
7474

75-
- GEDCOM X file format (.gedx) reading and writing
76-
- XML serialization and deserialization
77-
- Core conclusion models: Person, Gender, Fact, Name, Event, Relationship, Document, PlaceDescription
78-
- Agent models: Agent, Address
79-
- Source models: SourceDescription, SourceReference, SourceCitation
80-
- FamilySearch extensions: User, Discussion, Comment, DiscussionReference, ChildAndParentsRelationship
75+
- **GEDCOM X file format**: .gedx reading and writing, XML serialization/deserialization
76+
- **Core conclusion models**: Person, Gender, Fact, Name, NameForm, NamePart, Event, EventRole, Relationship, Document, PlaceDescription, PlaceReference, DateInfo, Identifier
77+
- **Agent models**: Agent, Address, OnlineAccount
78+
- **Source models**: SourceDescription, SourceReference, SourceCitation, Coverage, CitationField
79+
- **FamilySearch extensions**: User, Discussion, Comment, DiscussionReference, ChildAndParentsRelationship, ChangeInfo, MatchInfo, Merge, MergeAnalysis, MergeConflict, ArtifactMetadata
8180

8281
#### Areas for Future Expansion
8382

8483
Additional test coverage could be added for:
8584

86-
1. **Remaining GEDCOM X Core Models**
87-
- Subject and Identifier models
88-
- OnlineAccount model
89-
- Coverage and CitationField models
90-
- Standalone DateInfo and PlaceReference tests
85+
1. **Abstract/Base Classes**
86+
- Subject and Conclusion base classes
87+
- HasFacts trait
88+
- DisplayProperties models
9189

92-
2. **Additional FamilySearch Extensions**
93-
- ChangeInfo, MatchInfo models
94-
- Merge, MergeAnalysis, MergeConflict models
95-
- ArtifactMetadata model
96-
97-
3. **Serialization Edge Cases**
90+
2. **Serialization Edge Cases**
9891
- JSON serialization for all models (currently only XML is comprehensively tested)
9992
- Malformed data handling
10093
- Namespace handling for extensions
@@ -133,10 +126,13 @@ tests/
133126

134127
Test fixtures are located in `tests/files/`:
135128

136-
- **person.json**: Sample person data in JSON format
137-
- **record.xml**: Sample GEDCOM X record with extensions
138-
- **sample.gedx**: Complete GEDCOM X archive file
139-
- **cap-relationship-control.xml**: Expected XML output for relationships
129+
- **Core model fixtures**: person.json, gender.json, fact.json, name.json, date-info.json, identifier.json, name-form.json, name-part.json, event.json, event-role.json, relationship.json, document.json, place-description.json, place-reference.json
130+
- **Agent fixtures**: agent.json, address.json, online-account.json
131+
- **Source fixtures**: source-description.json, source-citation.json, coverage.json, citation-field.json
132+
- **FamilySearch extension fixtures**: user.json, discussion.json, comment.json, change-info.json, match-info.json, merge.json
133+
- **XML fixtures**: record.xml, cap-relationship-control.xml
134+
- **Archive files**: sample.gedx
135+
- **Test images**: test-image.jpg (for GEDX file tests)
140136

141137
### Base Test Class
142138

@@ -167,9 +163,9 @@ The SDK is automatically tested on:
167163
- ✅ Return type declarations for interface implementations (ArrayAccess, Countable, IteratorAggregate)
168164
- ✅ Modern PHPUnit assertions (removed deprecated `assertEqualXMLStructure`)
169165

170-
**Known External Deprecations**:
166+
**External Dependencies**:
171167

172-
The `intervention/image` package (used only in tests for artifact generation) shows PHP 8+ deprecation warnings. These are outside our control and do not affect the SDK functionality.
168+
Test fixtures are used instead of runtime image generation, eliminating external dependencies and ensuring consistent test behavior across all PHP versions.
173169

174170
## Continuous Integration
175171

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
"require-dev": {
2121
"phpunit/phpunit": "^9.5",
2222
"fakerphp/faker": "^1.9",
23-
"intervention/image": "^2.7",
2423
"php-coveralls/php-coveralls": "^2.5"
2524
},
2625
"autoload": {

tests/ArtifactBuilder.php

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Gedcomx\Tests;
44

5-
use Intervention\Image\ImageManagerStatic as Image;
6-
75
class ArtifactBuilder extends TestBuilder
86
{
97
private static $tempDir;
@@ -33,40 +31,20 @@ public static function makeTextFile()
3331
}
3432

3533
/**
36-
* Generate randomized images for testing
34+
* Generate test images by copying a fixture
3735
* @return string The generated filename
3836
*/
3937
public static function makeImage()
4038
{
41-
$height = $width = 5;
42-
$scale = 100;
4339
$filename = self::$tempDir . 'test_' . bin2hex(openssl_random_pseudo_bytes(8)) . ".jpg";
40+
$fixtureImage = __DIR__ . '/files/test-image.jpg';
4441

45-
$img = Image::canvas($width, $height, '#000');
46-
for ($x = 0; $x < $width; $x++) {
47-
for ($y = 0; $y < $height; $y++) {
48-
$color = self::randomColor();
49-
$img->pixel($color, $x, $y);
50-
}
42+
if (!file_exists($fixtureImage)) {
43+
throw new \RuntimeException('Test image fixture not found: ' . $fixtureImage);
5144
}
52-
$img->resize($width * $scale, $width * $scale);
53-
$png = $img->encode('jpg');
54-
$png->save($filename);
5545

56-
return $filename;
57-
}
46+
copy($fixtureImage, $filename);
5847

59-
/**
60-
* Generate random rgba color
61-
* @return array
62-
*/
63-
private static function randomColor()
64-
{
65-
return array(
66-
mt_rand(0, 255),
67-
mt_rand(0, 255),
68-
mt_rand(0, 255),
69-
1
70-
);
48+
return $filename;
7149
}
7250
}

tests/files/change-info.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"objectType": "Person",
3+
"operation": "Create",
4+
"reason": "Initial record creation",
5+
"objectModifier": "Name"
6+
}

tests/files/citation-field.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "volume",
3+
"value": "Volume 12"
4+
}

tests/files/coverage.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"recordType": "http://gedcomx.org/Census",
3+
"spatial": {
4+
"original": "New York, United States"
5+
},
6+
"temporal": {
7+
"original": "1900",
8+
"formal": "+1900"
9+
}
10+
}

tests/files/date-info.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"original": "January 1, 1900",
3+
"formal": "+1900-01-01",
4+
"normalized": [
5+
{
6+
"lang": "en-US",
7+
"value": "1 January 1900"
8+
}
9+
]
10+
}

tests/files/event-role.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "http://gedcomx.org/Witness",
3+
"person": {
4+
"resource": "https://familysearch.org/platform/tree/persons/WITNESS-123"
5+
},
6+
"details": "Witnessed the marriage ceremony"
7+
}

0 commit comments

Comments
 (0)