diff --git a/tests/Test-10.15.5.photoslibrary/database/DataModelVersion.plist b/tests/Test-10.15.5.photoslibrary/database/DataModelVersion.plist
new file mode 100644
index 00000000..be9740fe
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/database/DataModelVersion.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ LibrarySchemaVersion
+ 5001
+ MetaSchemaVersion
+ 3
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite
new file mode 100644
index 00000000..80d4b5be
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-shm b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-shm
new file mode 100644
index 00000000..15ae3d34
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-wal b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-wal
new file mode 100644
index 00000000..411e8368
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock
new file mode 100644
index 00000000..fc27a08d
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock
@@ -0,0 +1,16 @@
+
+
+
+
+ hostname
+ Rhets-MacBook-Pro.local
+ hostuuid
+ 9575E48B-8D5F-5654-ABAC-4431B1167324
+ pid
+ 4021
+ processname
+ photolibraryd
+ uid
+ 501
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/database/metaSchema.db b/tests/Test-10.15.5.photoslibrary/database/metaSchema.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/metaSchema.db differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/photos.db b/tests/Test-10.15.5.photoslibrary/database/photos.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/photos.db differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/protection b/tests/Test-10.15.5.photoslibrary/database/protection
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/graphDataProgress.plist b/tests/Test-10.15.5.photoslibrary/database/search/graphDataProgress.plist
new file mode 100644
index 00000000..c4e5e427
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/search/graphDataProgress.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite
new file mode 100644
index 00000000..bb310c82
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite-shm b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite-wal b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/searchMetadata.plist b/tests/Test-10.15.5.photoslibrary/database/search/searchMetadata.plist
new file mode 100644
index 00000000..3eec4180
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/database/search/searchMetadata.plist
@@ -0,0 +1,188 @@
+
+
+
+
+ BlacklistedMeaningsByMeaning
+
+ MePersonUUID
+ 39488755-78C0-40B2-B378-EDA280E1823C
+ SceneWhitelist
+
+ Graduation
+ Aquarium
+ Food
+ Ice Skating
+ Mountain
+ Cliff
+ Basketball
+ Tennis
+ Jewelry
+ Cheese
+ Softball
+ Football
+ Circus
+ Jet Ski
+ Playground
+ Carousel
+ Paint Ball
+ Windsurfing
+ Sailboat
+ Sunbathing
+ Dam
+ Fireplace
+ Flower
+ Scuba
+ Hiking
+ Cetacean
+ Pier
+ Bowling
+ Snowboarding
+ Zoo
+ Snowmobile
+ Theater
+ Boat
+ Casino
+ Car
+ Diving
+ Cycling
+ Musical Instrument
+ Board Game
+ Castle
+ Sunset Sunrise
+ Martial Arts
+ Motocross
+ Submarine
+ Cat
+ Snow
+ Kiteboarding
+ Squash
+ Geyser
+ Music
+ Archery
+ Desert
+ Blackjack
+ Fireworks
+ Sportscar
+ Feline
+ Soccer
+ Museum
+ Baby
+ Fencing
+ Railroad
+ Nascar
+ Sky Surfing
+ Bird
+ Games
+ Baseball
+ Dressage
+ Snorkeling
+ Pyramid
+ Kite
+ Rowboat
+ Golf
+ Watersports
+ Lightning
+ Canyon
+ Auditorium
+ Night Sky
+ Karaoke
+ Skiing
+ Parade
+ Forest
+ Hot Air Balloon
+ Dragon Parade
+ Easter Egg
+ Monument
+ Jungle
+ Thanksgiving
+ Jockey Horse
+ Stadium
+ Airplane
+ Ballet
+ Yoga
+ Coral Reef
+ Skating
+ Wrestling
+ Bicycle
+ Tattoo
+ Amusement Park
+ Canoe
+ Cheerleading
+ Ping Pong
+ Fishing
+ Magic
+ Reptile
+ Winter Sport
+ Waterfall
+ Train
+ Bonsai
+ Surfing
+ Dog
+ Cake
+ Sledding
+ Sandcastle
+ Glacier
+ Lighthouse
+ Equestrian
+ Rafting
+ Shore
+ Hockey
+ Santa Claus
+ Formula One Car
+ Sport
+ Vehicle
+ Boxing
+ Rollerskating
+ Underwater
+ Orchestra
+ Carnival
+ Rocket
+ Skateboarding
+ Helicopter
+ Performance
+ Oktoberfest
+ Water Polo
+ Skate Park
+ Animal
+ Nightclub
+ String Instrument
+ Dinosaur
+ Gymnastics
+ Cricket
+ Volcano
+ Lake
+ Aurora
+ Dancing
+ Concert
+ Rock Climbing
+ Hang Glider
+ Rodeo
+ Fish
+ Art
+ Motorcycle
+ Volleyball
+ Wake Boarding
+ Badminton
+ Motor Sport
+ Sumo
+ Parasailing
+ Skydiving
+ Kickboxing
+ Pinata
+ Foosball
+ Go Kart
+ Poker
+ Kayak
+ Swimming
+ Atv
+ Beach
+ Dartboard
+ Athletics
+ Camping
+ Tornado
+ Billiards
+ Rugby
+ Airshow
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/searchProgress.plist b/tests/Test-10.15.5.photoslibrary/database/search/searchProgress.plist
new file mode 100644
index 00000000..ad779080
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/database/search/searchProgress.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ insertAlbum
+
+ insertAsset
+
+ insertHighlight
+
+ insertMemory
+
+ insertMoment
+
+ removeAlbum
+
+ removeAsset
+
+ removeHighlight
+
+ removeMemory
+
+ removeMoment
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/searchSystemInfo.plist b/tests/Test-10.15.5.photoslibrary/database/search/searchSystemInfo.plist
new file mode 100644
index 00000000..f6d69ef7
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/database/search/searchSystemInfo.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ embeddingVersion
+ 1
+ localeIdentifier
+ en_US
+ sceneTaxonomySHA
+ 87914a047c69fbe8013fad2c70fa70c6c03b08b56190fe4054c880e6b9f57cc3
+ searchIndexVersion
+ 10
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/synonymsProcess.plist b/tests/Test-10.15.5.photoslibrary/database/search/synonymsProcess.plist
new file mode 100644
index 00000000..5a655aa8
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/search/synonymsProcess.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/database/search/zeroKeywords.data b/tests/Test-10.15.5.photoslibrary/database/search/zeroKeywords.data
new file mode 100644
index 00000000..849f1031
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/database/search/zeroKeywords.data differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/1/1EB2B765-0765-43BA-A90C-0D0580E6172C.jpeg b/tests/Test-10.15.5.photoslibrary/originals/1/1EB2B765-0765-43BA-A90C-0D0580E6172C.jpeg
new file mode 100644
index 00000000..136dfe8d
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/1/1EB2B765-0765-43BA-A90C-0D0580E6172C.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907.jpeg b/tests/Test-10.15.5.photoslibrary/originals/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907.jpeg
new file mode 100644
index 00000000..ca03f665
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96.jpeg b/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96.jpeg
new file mode 100755
index 00000000..143e9532
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4.cr2 b/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4.cr2
new file mode 100755
index 00000000..f2adc62f
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4.cr2 differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.jpeg b/tests/Test-10.15.5.photoslibrary/originals/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.jpeg
new file mode 100644
index 00000000..31eb2ab3
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91.jpeg b/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91.jpeg
new file mode 100755
index 00000000..c1872812
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4.cr2 b/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4.cr2
new file mode 100755
index 00000000..6cd12fb4
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4.cr2 differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068.dng b/tests/Test-10.15.5.photoslibrary/originals/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068.dng
new file mode 100755
index 00000000..1f96242c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068.dng differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg b/tests/Test-10.15.5.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg
new file mode 100644
index 00000000..f23a024a
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/D/DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg b/tests/Test-10.15.5.photoslibrary/originals/D/DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg
new file mode 100644
index 00000000..e5a6b0bd
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/D/DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg b/tests/Test-10.15.5.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg
new file mode 100644
index 00000000..ad8137e3
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/originals/F/F12384F6-CD17-4151-ACBA-AE0E3688539E.jpeg b/tests/Test-10.15.5.photoslibrary/originals/F/F12384F6-CD17-4151-ACBA-AE0E3688539E.jpeg
new file mode 100644
index 00000000..b1615930
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/originals/F/F12384F6-CD17-4151-ACBA-AE0E3688539E.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/.metadata_never_index b/tests/Test-10.15.5.photoslibrary/private/.metadata_never_index
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist
new file mode 100644
index 00000000..651ed0ad
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ MigrationService
+
+ State
+ 4
+
+ MigrationService.LastCompletedTask
+ 12
+ MigrationService.ValidationCounts
+
+ MigrationDetectedFaceprint
+ 6
+ MigrationManagedAsset
+ 0
+ MigrationSceneClassification
+ 44
+ MigrationUnmanagedAdjustment
+ 0
+ RDVersion.cloudLocalState.CPLIsNotPushed
+ 7
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos/appPrivateData.plist
new file mode 100644
index 00000000..ecd65d9f
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.Photos/appPrivateData.plist
@@ -0,0 +1,52 @@
+
+
+
+
+ CollapsedSidebarSectionIdentifiers
+
+ ExpandedSidebarItemIdentifiers
+
+ 92D68107-B6C7-453B-96D2-97B0F26D5B8B/L0/020
+ 88A5F8B8-5B9A-43C7-BB85-3952B81580EB/L0/020
+ 29EF7A97-7E76-4D5F-A5E0-CC0A93E8524C/L0/020
+ 2C2AF115-BD1D-4434-A747-D1C8BD8E2045/L0/020
+
+ Photos
+
+ CollapsedSidebarSectionIdentifiers
+
+ ExpandedSidebarItemIdentifiers
+
+ TopLevelAlbums
+ TopLevelSlideshows
+
+ IPXWorkspaceControllerZoomLevelsKey
+
+ kZoomLevelIdentifierAlbums
+ 7
+ kZoomLevelIdentifierVersions
+ 7
+
+ lastAddToDestination
+
+ key
+ 1
+ lastKnownDisplayName
+ September 28, 2018
+ type
+ album
+ uuid
+ DFFKmHt3Tk+AGzZLe2Xq+g
+
+ lastKnownItemCounts
+
+ other
+ 0
+ photos
+ 7
+ videos
+ 0
+
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db b/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db
new file mode 100644
index 00000000..69a98fb3
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm
new file mode 100644
index 00000000..771f125e
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite
new file mode 100644
index 00000000..1ae4db41
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm
new file mode 100644
index 00000000..705fc294
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal
new file mode 100644
index 00000000..85634ddd
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite
new file mode 100644
index 00000000..6972b2d9
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm
new file mode 100644
index 00000000..fd3df647
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal
new file mode 100644
index 00000000..4155460c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite
new file mode 100644
index 00000000..76d99e2a
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm
new file mode 100644
index 00000000..c1cd3636
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal
new file mode 100644
index 00000000..df95de56
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite
new file mode 100644
index 00000000..fdc12c59
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm
new file mode 100644
index 00000000..2d607254
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal
new file mode 100644
index 00000000..48b49a83
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm
new file mode 100644
index 00000000..f3af43ab
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal
new file mode 100644
index 00000000..53eb322e
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite
new file mode 100644
index 00000000..7d4f30bc
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm
new file mode 100644
index 00000000..fa02d9fc
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal
new file mode 100644
index 00000000..4c2fa9fe
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite
new file mode 100644
index 00000000..76d2bc2f
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm
new file mode 100644
index 00000000..2c1afa02
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal
new file mode 100644
index 00000000..61cf3815
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm
new file mode 100644
index 00000000..9e32a028
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal
new file mode 100644
index 00000000..56de43cf
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist
new file mode 100644
index 00000000..530f3547
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSharingFeatureExtractorRecords.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSharingFeatureExtractorRecords.plist
new file mode 100644
index 00000000..0de953ba
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSharingFeatureExtractorRecords.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..18007d38
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ BackgroundHighlightCollection
+ 2020-04-19T15:27:34Z
+ BackgroundHighlightEnrichment
+ 2020-04-19T15:27:34Z
+ BackgroundJobAssetRevGeocode
+ 2020-04-19T15:27:35Z
+ BackgroundJobSearch
+ 2020-04-19T15:27:35Z
+ BackgroundPeopleSuggestion
+ 2020-04-19T15:27:34Z
+ BackgroundUserBehaviorProcessor
+ 2020-04-19T15:27:35Z
+ PhotoAnalysisGraphLastBackgroundGraphConsistencyUpdateJobDateKey
+ 2020-04-11T20:10:27Z
+ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate
+ 2020-04-11T20:00:24Z
+ PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate
+ 2020-04-19T15:27:35Z
+ SiriPortraitDonation
+ 2020-04-19T15:27:35Z
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb
new file mode 100644
index 00000000..9e703017
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist
new file mode 100644
index 00000000..e9ba1db9
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/ftemetrics b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/ftemetrics
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
new file mode 100644
index 00000000..bf8f1e5d
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ revgeoprovider
+ 7618
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/4E294112-DC9D-4B49-9561-1946B53A4E19.cmap b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/4E294112-DC9D-4B49-9561-1946B53A4E19.cmap
new file mode 100644
index 00000000..cca93d7c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/4E294112-DC9D-4B49-9561-1946B53A4E19.cmap differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/9A5E0437-04AA-45DC-AAA7-FDC74A91F170.cmap b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/9A5E0437-04AA-45DC-AAA7-FDC74A91F170.cmap
new file mode 100644
index 00000000..40018f76
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/9A5E0437-04AA-45DC-AAA7-FDC74A91F170.cmap differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data
new file mode 100644
index 00000000..f16b4a76
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
new file mode 100644
index 00000000..5feb64f2
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
@@ -0,0 +1,14 @@
+
+
+
+
+ NumberOfFacesProcessedOnLastRun
+ 7
+ ProcessedInQuiescentState
+
+ SuggestedMeIdentifier
+
+ Version
+ 4
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..db8788e1
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ FaceIDModelLastGenerationKey
+ 2020-04-11T20:00:25Z
+ LastContactClassificationKey
+ 2020-04-11T20:00:26Z
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
new file mode 100644
index 00000000..cb4560b6
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PVClustererBringUpState
+ 50
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
new file mode 100644
index 00000000..736db69d
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ IncrementalPersonProcessingStage
+ 0
+ PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates
+ 15
+ PersonBuilderMergeCandidatesEnabled
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin
new file mode 100644
index 00000000..13f7d447
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..be5ca4c7
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate
+ 2019-08-07T02:26:15Z
+ PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate
+ 2019-08-17T14:26:34Z
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb
new file mode 100644
index 00000000..96fee1ce
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb
new file mode 100644
index 00000000..4d8a5dfb
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb
new file mode 100644
index 00000000..96fee1ce
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb
new file mode 100644
index 00000000..147ce400
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/2E578BF2-718A-43E1-81BA-80AC61004DCF.cmap b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/2E578BF2-718A-43E1-81BA-80AC61004DCF.cmap
new file mode 100644
index 00000000..4aaf1638
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/2E578BF2-718A-43E1-81BA-80AC61004DCF.cmap differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data
new file mode 100644
index 00000000..1f14d535
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/C7589FFF-A378-4059-ABDC-19C4316A8B69.cmap b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/C7589FFF-A378-4059-ABDC-19C4316A8B69.cmap
new file mode 100644
index 00000000..1d6b6446
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/C7589FFF-A378-4059-ABDC-19C4316A8B69.cmap differ
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter
new file mode 100644
index 00000000..4fdc85b4
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter
@@ -0,0 +1,12 @@
+
+
+
+
+ ProcessedInQuiescentState
+
+ SuggestedMeIdentifier
+
+ Version
+ 3
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist
new file mode 100644
index 00000000..cb4560b6
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PVClustererBringUpState
+ 50
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist
new file mode 100644
index 00000000..736db69d
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ IncrementalPersonProcessingStage
+ 0
+ PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates
+ 15
+ PersonBuilderMergeCandidatesEnabled
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
new file mode 100644
index 00000000..2120d8ee
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PLLibraryServicesManager.LocaleIdentifier
+ en_US
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photomodel/appPrivateData.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photomodel/appPrivateData.plist
new file mode 100644
index 00000000..106cedb0
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/private/com.apple.photomodel/appPrivateData.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ LithiumMessageTracer
+
+ LastReportedDate
+ 2019-08-04T13:32:55Z
+
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/.metadata_never_index b/tests/Test-10.15.5.photoslibrary/resources/.metadata_never_index
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_1_105_c.jpeg
new file mode 100644
index 00000000..8a612cdc
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_1_105_c.jpeg
new file mode 100644
index 00000000..c19de1d4
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_100_o.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_100_o.jpeg
new file mode 100644
index 00000000..d5ece67d
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_100_o.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_105_c.jpeg
new file mode 100644
index 00000000..bb5e38af
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_105_c.jpeg
new file mode 100644
index 00000000..c36ba3a5
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_1_105_c.jpeg
new file mode 100644
index 00000000..312b01d2
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_1_105_c.jpeg
new file mode 100644
index 00000000..f8943c5c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_1_105_c.jpeg
new file mode 100644
index 00000000..82af4102
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_100_o.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_100_o.jpeg
new file mode 100644
index 00000000..03d2c6ce
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_100_o.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_105_c.jpeg
new file mode 100644
index 00000000..82a19c3a
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D79B8D77-BFFC-460B-9312-034F2877D35B_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D79B8D77-BFFC-460B-9312-034F2877D35B_1_105_c.jpeg
new file mode 100644
index 00000000..4f0c1479
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/D79B8D77-BFFC-460B-9312-034F2877D35B_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_105_c.jpeg
new file mode 100644
index 00000000..5a00c324
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_105_c.jpeg
new file mode 100644
index 00000000..db88ba04
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_1_105_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_1_105_c.jpeg
new file mode 100644
index 00000000..6881aa31
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_1_105_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_4_5005_c.jpeg
new file mode 100644
index 00000000..839cdcbd
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_4_5005_c.jpeg
new file mode 100644
index 00000000..e68f1ee6
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4_5005_c.jpeg
new file mode 100644
index 00000000..a4a8a5ed
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_4_5005_c.jpeg
new file mode 100644
index 00000000..4e1d70f6
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_4_5005_c.jpeg
new file mode 100644
index 00000000..c0d826ff
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_4_5005_c.jpeg
new file mode 100644
index 00000000..b3e0f930
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4_5005_c.jpeg
new file mode 100644
index 00000000..c41dcce5
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_4_5005_c.jpeg
new file mode 100644
index 00000000..f4939048
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D79B8D77-BFFC-460B-9312-034F2877D35B_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D79B8D77-BFFC-460B-9312-034F2877D35B_4_5005_c.jpeg
new file mode 100644
index 00000000..3cdee08c
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/D79B8D77-BFFC-460B-9312-034F2877D35B_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/DC99FBDD-7A52-4100-A5BB-344131646C30_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/DC99FBDD-7A52-4100-A5BB-344131646C30_4_5005_c.jpeg
new file mode 100644
index 00000000..6e9e2b12
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/D/DC99FBDD-7A52-4100-A5BB-344131646C30_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_4_5005_c.jpeg
new file mode 100644
index 00000000..f510f714
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_4_5005_c.jpeg b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_4_5005_c.jpeg
new file mode 100644
index 00000000..95c0ea85
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/masters/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_4_5005_c.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/3305.ithmb b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/3305.ithmb
new file mode 100644
index 00000000..71616af1
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/3305.ithmb differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4031.ithmb b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4031.ithmb
new file mode 100644
index 00000000..47b6132e
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4031.ithmb differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4132.ithmb b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4132.ithmb
new file mode 100644
index 00000000..2f291986
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/4132.ithmb differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
new file mode 100644
index 00000000..8c122be1
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
@@ -0,0 +1,10 @@
+
+
+
+
+ PLThumbnailManagerThumbnailFormatKey
+ 5005
+ PLThumbnailManagerVersionKey
+ 28
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Album-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Album-change.plj
new file mode 100644
index 00000000..25511ade
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Album-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Album-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Album-snapshot.plj
new file mode 100644
index 00000000..242008b2
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Album-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Album.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Album.plist
new file mode 100644
index 00000000..523b84b5
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Album.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-04-11T19:26:12Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-change.plj
new file mode 100644
index 00000000..f44e886f
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-snapshot.plj
new file mode 100644
index 00000000..2eec5562
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Asset.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset.plist
new file mode 100644
index 00000000..881220b0
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Asset.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 10
+ snapshotDate
+ 2019-11-11T04:16:28Z
+ snapshotPayloadVersion
+ 10
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/DeferredRebuildFace.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/DeferredRebuildFace.plist
new file mode 100644
index 00000000..3a4b9140
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/DeferredRebuildFace.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:57Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace-snapshot.plj
new file mode 100644
index 00000000..1a00fa8d
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace.plist
new file mode 100644
index 00000000..a7b3527b
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/DetectedFace.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2019-10-27T15:36:05Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/FetchingAlbum.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/FetchingAlbum.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/FetchingAlbum.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-change.plj
new file mode 100644
index 00000000..441e1515
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj
new file mode 100644
index 00000000..96b2eed4
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/FileSystemVolume.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj
new file mode 100644
index 00000000..baaac7b0
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-snapshot.plj
new file mode 100644
index 00000000..d1520b31
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Folder.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder.plist
new file mode 100644
index 00000000..523b84b5
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-04-11T19:26:12Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/HistoryToken.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/HistoryToken.plist
new file mode 100644
index 00000000..152c5743
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/HistoryToken.plist differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-change.plj
new file mode 100644
index 00000000..452c7b95
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-snapshot.plj
new file mode 100644
index 00000000..e9748af2
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/ImportSession.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-change.plj
new file mode 100644
index 00000000..bc1570ab
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-snapshot.plj
new file mode 100644
index 00000000..f512308e
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Keyword.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Memory-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Memory-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Memory.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Memory.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Memory.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Person-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Person-change.plj
new file mode 100644
index 00000000..c45f6708
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Person-change.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Person-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Person-snapshot.plj
new file mode 100644
index 00000000..8e7d5719
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/journals/Person-snapshot.plj differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Person.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/Person.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/Person.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/ProjectAlbum.plist b/tests/Test-10.15.5.photoslibrary/resources/journals/ProjectAlbum.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/journals/ProjectAlbum.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.plist b/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.plist
new file mode 100644
index 00000000..b69a9147
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ adjustmentBaseVersion
+ 0
+ adjustmentData
+
+ bZBNS8NAEIb/y5xDaGxTSa62Yi8VFFQQD5PspJmS3Q27k15C/ruTBBTB68zzfsyMcKMQ
+ 2buTazyUI1QDd+Y82IoClJAVj8UeEsC+f1u5eZhnaVakWb7RTaxbsvhCN163WQJ9h9L4
+ YBV9fv2AKQFLggYF5wCLUSi8s5EWyrvN7l4F3FPHjn4jVJfu1H2Fn4gvraj3dp8n4AOT
+ E5Q1Tt3nLJQfsTZAcx2iWMUilJ/jPwQ5rDoyUEoYSK8gEXaXOBekpqH6L7xMzmhJq20P
+ h4DqxvWD9918HRsN4oaXjx0XFqav6Rs=
+
+ adjustmentEditorBundleID
+ com.apple.Photos
+ adjustmentFormatIdentifier
+ com.apple.photo
+ adjustmentFormatVersion
+ 1.4
+ adjustmentTimestamp
+ 2020-05-29T03:39:38Z
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_201_a.jpeg b/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_201_a.jpeg
new file mode 100644
index 00000000..c2b53111
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_201_a.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30.plist b/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30.plist
new file mode 100644
index 00000000..b298f6be
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ adjustmentBaseVersion
+ 0
+ adjustmentData
+
+ shkyAAAAAAACAAAA
+
+ adjustmentEditorBundleID
+ com.apple.Photos
+ adjustmentFormatIdentifier
+ com.apple.Photos.externalEdit
+ adjustmentFormatVersion
+ 1
+ adjustmentTimestamp
+ 2019-12-01T15:27:48Z
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_201_a.jpeg b/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_201_a.jpeg
new file mode 100644
index 00000000..7bcb36b9
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_201_a.jpeg differ
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.plist b/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.plist
new file mode 100644
index 00000000..4117c731
--- /dev/null
+++ b/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.plist
@@ -0,0 +1,25 @@
+
+
+
+
+ adjustmentBaseVersion
+ 0
+ adjustmentData
+
+ bVFNT4RADP0vPSNh+FgWbsbE6MVNNFET42F2KVADAxnKqiH8dwvIukZP0+l77XtvZoAj
+ 2o4ac2vyBtIB9j1V2V1f79FCCmp7rQIfHNBt+7gQpRuEkXJjV/meIN2hxFrf45EWVDnQ
+ VprzxtZC3T08w+hAjawzzXpSqHXHaJ8o4xJS3wu3MkAtVmTwR0Lm3FC2L+QbpKJk2R1s
+ YgcaS2hY8yIn2yctzadhcaCzt77jWmgdpC/DPww0el9hBinbHiUFMpMpuslgeVLzI0HY
+ 6umO5tIUFUJ64TlwaMzcN/ydQ3rvS6Uif+PAx85SQWYGPtdanQ+umTwJQJk4pZzmN7+y
+ TTu9eM/zh6znHx/eb5VVPk5E5hRBJdGZgcQbx/F1/AI=
+
+ adjustmentEditorBundleID
+ com.apple.photos
+ adjustmentFormatIdentifier
+ com.apple.photo
+ adjustmentFormatVersion
+ 1.4
+ adjustmentRenderTypes
+ 0
+
+
diff --git a/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg b/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg
new file mode 100644
index 00000000..88caa537
Binary files /dev/null and b/tests/Test-10.15.5.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg differ
diff --git a/tests/test_catalina_10_15_5.py b/tests/test_catalina_10_15_5.py
new file mode 100644
index 00000000..96716dd8
--- /dev/null
+++ b/tests/test_catalina_10_15_5.py
@@ -0,0 +1,792 @@
+import pytest
+
+from osxphotos._constants import _UNKNOWN_PERSON
+
+
+PHOTOS_DB = "tests/Test-10.15.5.photoslibrary/database/photos.db"
+PHOTOS_DB_PATH = "/Test-10.15.5.photoslibrary/database/photos.db"
+PHOTOS_LIBRARY_PATH = "/Test-10.15.5.photoslibrary"
+
+KEYWORDS = [
+ "Kids",
+ "wedding",
+ "flowers",
+ "England",
+ "London",
+ "London 2018",
+ "St. James's Park",
+ "UK",
+ "United Kingdom",
+]
+# Photos 5 includes blank person for detected face
+PERSONS = ["Katie", "Suzy", "Maria", _UNKNOWN_PERSON]
+ALBUMS = [
+ "Pumpkin Farm",
+ "Test Album",
+ "AlbumInFolder",
+ "Raw"
+] # Note: there are 2 albums named "Test Album" for testing duplicate album names
+KEYWORDS_DICT = {
+ "Kids": 4,
+ "wedding": 2,
+ "flowers": 1,
+ "England": 1,
+ "London": 1,
+ "London 2018": 1,
+ "St. James's Park": 1,
+ "UK": 1,
+ "United Kingdom": 1,
+}
+PERSONS_DICT = {"Katie": 3, "Suzy": 2, "Maria": 1, _UNKNOWN_PERSON: 1}
+ALBUM_DICT = {
+ "Pumpkin Farm": 3,
+ "Test Album": 2,
+ "AlbumInFolder": 2,
+ "Raw": 4,
+} # Note: there are 2 albums named "Test Album" for testing duplicate album names
+
+UUID_DICT = {
+ "missing": "A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C",
+ "favorite": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
+ "not_favorite": "A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C",
+ "hidden": "A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C",
+ "not_hidden": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
+ "has_adjustments": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
+ "no_adjustments": "D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068",
+ "location": "DC99FBDD-7A52-4100-A5BB-344131646C30",
+ "no_location": "6191423D-8DB8-4D4C-92BE-9BBBA308AAC4",
+ "external_edit": "DC99FBDD-7A52-4100-A5BB-344131646C30",
+ "no_external_edit": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
+ "export": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
+}
+
+
+def test_init1():
+ # test named argument
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ assert isinstance(photosdb, osxphotos.PhotosDB)
+
+
+def test_init2():
+ # test positional argument
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(PHOTOS_DB)
+ assert isinstance(photosdb, osxphotos.PhotosDB)
+
+
+def test_init3():
+ # test positional and named argument (raises exception)
+ import osxphotos
+
+ with pytest.raises(Exception):
+ assert osxphotos.PhotosDB(PHOTOS_DB, dbfile=PHOTOS_DB)
+
+
+def test_init4():
+ # test invalid db
+ import os
+ import tempfile
+ import osxphotos
+
+ (bad_db, bad_db_name) = tempfile.mkstemp(suffix=".db", prefix="osxphotos-")
+ os.close(bad_db)
+
+ with pytest.raises(Exception):
+ assert osxphotos.PhotosDB(bad_db_name)
+
+ with pytest.raises(Exception):
+ assert osxphotos.PhotosDB(dbfile=bad_db_name)
+
+ try:
+ os.remove(bad_db_name)
+ except:
+ pass
+
+
+def test_init5(mocker):
+ # test failed get_last_library_path
+ import osxphotos
+
+ def bad_library():
+ return None
+
+ # get_last_library actually in utils but need to patch it in photosdb because it's imported into photosdb
+ # because of the layout of photosdb/ need to patch it this way...don't really understand why, but it works
+ mocker.patch("osxphotos.photosdb.photosdb.get_last_library_path", new=bad_library)
+
+ with pytest.raises(Exception):
+ assert osxphotos.PhotosDB()
+
+
+def test_db_len():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ # assert photosdb.db_version in osxphotos._TESTED_DB_VERSIONS
+ assert len(photosdb) == 12
+
+
+def test_db_version():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ # assert photosdb.db_version in osxphotos._TESTED_DB_VERSIONS
+ assert photosdb.db_version == "6000"
+
+
+def test_os_version():
+ import osxphotos
+
+ (_, major, _) = osxphotos.utils._get_os_version()
+ assert major in osxphotos._constants._TESTED_OS_VERSIONS
+
+
+def test_persons():
+ import osxphotos
+ import collections
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ assert "Katie" in photosdb.persons
+ assert collections.Counter(PERSONS) == collections.Counter(photosdb.persons)
+
+
+def test_keywords():
+ import osxphotos
+ import collections
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ assert "wedding" in photosdb.keywords
+ assert collections.Counter(KEYWORDS) == collections.Counter(photosdb.keywords)
+
+
+def test_album_names():
+ import osxphotos
+ import collections
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ assert "Pumpkin Farm" in photosdb.albums
+ assert collections.Counter(ALBUMS) == collections.Counter(photosdb.albums)
+
+
+def test_keywords_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ keywords = photosdb.keywords_as_dict
+ assert keywords["wedding"] == 2
+ assert keywords == KEYWORDS_DICT
+
+
+def test_persons_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ persons = photosdb.persons_as_dict
+ assert persons["Maria"] == 1
+ assert persons == PERSONS_DICT
+
+
+def test_albums_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums = photosdb.albums_as_dict
+ assert albums["Pumpkin Farm"] == 3
+ assert albums == ALBUM_DICT
+
+
+def test_attributes():
+ import datetime
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=["D79B8D77-BFFC-460B-9312-034F2877D35B"])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.keywords == ["Kids"]
+ assert p.original_filename == "Pumkins2.jpg"
+ assert p.filename == "D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg"
+ assert p.date == datetime.datetime(
+ 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400))
+ )
+ assert p.description == "Girl holding pumpkin"
+ assert p.title == "I found one!"
+ assert p.albums == ["Pumpkin Farm", "Test Album"]
+ assert p.persons == ["Katie"]
+ assert p.path.endswith(
+ "tests/Test-10.15.5.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg"
+ )
+ assert p.ismissing == False
+
+
+def test_missing():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["missing"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.path == None
+ assert p.ismissing == True
+
+
+def test_favorite():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["favorite"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.favorite == True
+
+
+def test_not_favorite():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["not_favorite"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.favorite == False
+
+
+def test_hidden():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["hidden"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.hidden == True
+
+
+def test_not_hidden():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["not_hidden"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.hidden == False
+
+
+def test_location_1():
+ # test photo with lat/lon info
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["location"]])
+ assert len(photos) == 1
+ p = photos[0]
+ lat, lon = p.location
+ assert lat == pytest.approx(51.50357167)
+ assert lon == pytest.approx(-0.1318055)
+
+
+def test_location_2():
+ # test photo with no location info
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["no_location"]])
+ assert len(photos) == 1
+ p = photos[0]
+ lat, lon = p.location
+ assert lat is None
+ assert lon is None
+
+
+def test_hasadjustments1():
+ # test hasadjustments == True
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["has_adjustments"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.hasadjustments == True
+
+
+def test_hasadjustments2():
+ # test hasadjustments == False
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["no_adjustments"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.hasadjustments == False
+
+
+def test_external_edit1():
+ # test image has been edited in external editor
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["external_edit"]])
+ assert len(photos) == 1
+ p = photos[0]
+
+ assert p.external_edit == True
+
+
+def test_external_edit2():
+ # test image has not been edited in external editor
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["no_external_edit"]])
+ assert len(photos) == 1
+ p = photos[0]
+
+ assert p.external_edit == False
+
+
+def test_path_edited1():
+ # test a valid edited path
+ import os.path
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=["E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51"])
+ assert len(photos) == 1
+ p = photos[0]
+ path = p.path_edited
+ assert path.endswith(
+ "resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg"
+ )
+ assert os.path.exists(path)
+
+
+def test_path_edited2():
+ # test an invalid edited path
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["no_adjustments"]])
+ assert len(photos) == 1
+ p = photos[0]
+ path = p.path_edited
+ assert path is None
+
+
+def test_count():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos()
+ assert len(photos) == 12
+
+
+def test_keyword_2():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(keywords=["wedding"])
+ assert len(photos) == 2
+
+
+def test_keyword_not_in_album():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+
+ # find all photos with keyword "Kids" not in the album "Pumpkin Farm"
+ photos1 = photosdb.photos(albums=["Pumpkin Farm"])
+ photos2 = photosdb.photos(keywords=["Kids"])
+ photos3 = [p for p in photos2 if p not in photos1]
+ assert len(photos3) == 1
+ assert photos3[0].uuid == "A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C"
+
+
+def test_get_db_path():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ db_path = photosdb.db_path
+ assert db_path.endswith(PHOTOS_DB_PATH)
+
+
+def test_get_library_path():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ lib_path = photosdb.library_path
+ assert lib_path.endswith(PHOTOS_LIBRARY_PATH)
+
+
+def test_export_1():
+ # test basic export
+ # get an unedited image and export it using default filename
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ filename = photos[0].filename
+ expected_dest = os.path.join(dest, filename)
+ got_dest = photos[0].export(dest)[0]
+
+ assert got_dest == expected_dest
+ assert os.path.isfile(got_dest)
+
+
+def test_export_2():
+ # test export with user provided filename
+ import os
+ import os.path
+ import tempfile
+ import time
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-2-test-{timestamp}.jpg"
+ expected_dest = os.path.join(dest, filename)
+ got_dest = photos[0].export(dest, filename)[0]
+
+ assert got_dest == expected_dest
+ assert os.path.isfile(got_dest)
+
+
+def test_export_3():
+ # test file already exists and test increment=True (default)
+ import os
+ import os.path
+ import pathlib
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ filename = photos[0].filename
+ filename2 = pathlib.Path(filename)
+ filename2 = f"{filename2.stem} (1){filename2.suffix}"
+ expected_dest_2 = os.path.join(dest, filename2)
+
+ got_dest = photos[0].export(dest)[0]
+ got_dest_2 = photos[0].export(dest)[0]
+
+ assert got_dest_2 == expected_dest_2
+ assert os.path.isfile(got_dest_2)
+
+
+def test_export_4():
+ # test user supplied file already exists and test increment=True (default)
+ import os
+ import os.path
+ import pathlib
+ import tempfile
+ import time
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-2-test-{timestamp}.jpg"
+ filename2 = f"osxphotos-export-2-test-{timestamp} (1).jpg"
+ expected_dest_2 = os.path.join(dest, filename2)
+
+ got_dest = photos[0].export(dest, filename)[0]
+ got_dest_2 = photos[0].export(dest, filename)[0]
+
+ assert got_dest_2 == expected_dest_2
+ assert os.path.isfile(got_dest_2)
+
+
+def test_export_5():
+ # test file already exists and test increment=True (default)
+ # and overwrite = True
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ filename = photos[0].filename
+ expected_dest = os.path.join(dest, filename)
+
+ got_dest = photos[0].export(dest)[0]
+ got_dest_2 = photos[0].export(dest, overwrite=True)[0]
+
+ assert got_dest_2 == got_dest
+ assert got_dest_2 == expected_dest
+ assert os.path.isfile(got_dest_2)
+
+
+def test_export_6():
+ # test user supplied file already exists and test increment=True (default)
+ # and overwrite = True
+ import os
+ import os.path
+ import pathlib
+ import tempfile
+ import time
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-test-{timestamp}.jpg"
+ expected_dest = os.path.join(dest, filename)
+
+ got_dest = photos[0].export(dest, filename)[0]
+ got_dest_2 = photos[0].export(dest, filename, overwrite=True)[0]
+
+ assert got_dest_2 == got_dest
+ assert got_dest_2 == expected_dest
+ assert os.path.isfile(got_dest_2)
+
+
+def test_export_7():
+ # test file already exists and test increment=False (not default), overwrite=False (default)
+ # should raise exception
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ filename = photos[0].filename
+
+ got_dest = photos[0].export(dest)[0]
+ with pytest.raises(Exception) as e:
+ # try to export again with increment = False
+ assert photos[0].export(dest, increment=False)
+ assert e.type == type(FileExistsError())
+
+
+def test_export_8():
+ # try to export missing file
+ # should raise exception
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["missing"]])
+
+ filename = photos[0].filename
+
+ with pytest.raises(Exception) as e:
+ assert photos[0].export(dest)[0]
+ assert e.type == type(FileNotFoundError())
+
+
+def test_export_9():
+ # try to export edited file that's not edited
+ # should raise exception
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photos = photosdb.photos(uuid=[UUID_DICT["no_adjustments"]])
+
+ filename = photos[0].filename
+
+ with pytest.raises(Exception) as e:
+ assert photos[0].export(dest, edited=True)
+ assert e.type == ValueError
+
+
+def test_export_10():
+ # try to export edited file that's not edited and name provided
+ # should raise exception
+ import os
+ import os.path
+ import tempfile
+ import time
+
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photos = photosdb.photos(uuid=[UUID_DICT["no_adjustments"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-test-{timestamp}.jpg"
+
+ with pytest.raises(Exception) as e:
+ assert photos[0].export(dest, filename, edited=True)
+ assert e.type == ValueError
+
+
+def test_export_11():
+ # export edited file with name provided
+ import os
+ import os.path
+ import tempfile
+ import time
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["has_adjustments"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-test-{timestamp}.jpg"
+ expected_dest = os.path.join(dest, filename)
+
+ got_dest = photos[0].export(dest, filename, edited=True)[0]
+ assert got_dest == expected_dest
+
+
+def test_export_12():
+ # export edited file with default name
+ import os
+ import os.path
+ import pathlib
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["has_adjustments"]])
+
+ edited_name = pathlib.Path(photos[0].path_edited).name
+ edited_suffix = pathlib.Path(edited_name).suffix
+ filename = pathlib.Path(photos[0].filename).stem + "_edited" + edited_suffix
+ expected_dest = os.path.join(dest, filename)
+
+ got_dest = photos[0].export(dest, edited=True)[0]
+ assert got_dest == expected_dest
+
+
+def test_export_13():
+ # export to invalid destination
+ # should raise exception
+ import os
+ import os.path
+ import tempfile
+
+ import osxphotos
+
+ tempdir = tempfile.TemporaryDirectory(prefix="osxphotos_")
+ dest = tempdir.name
+
+ # create a folder that doesn't exist
+ i = 0
+ while os.path.isdir(dest):
+ dest = os.path.join(dest, str(i))
+ i += 1
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["export"]])
+
+ filename = photos[0].filename
+
+ with pytest.raises(Exception) as e:
+ assert photos[0].export(dest)
+ assert e.type == type(FileNotFoundError())
+
+
+def test_eq():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos1 = photosdb.photos(uuid=[UUID_DICT["export"]])
+ photos2 = photosdb.photos(uuid=[UUID_DICT["export"]])
+ assert photos1[0] == photos2[0]
+
+
+def test_not_eq():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos1 = photosdb.photos(uuid=[UUID_DICT["export"]])
+ photos2 = photosdb.photos(uuid=[UUID_DICT["missing"]])
+ assert photos1[0] != photos2[0]
+
+
+def test_photosdb_repr():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photosdb2 = eval(repr(photosdb))
+
+ ignore_keys = ["_tmp_db", "_tempdir", "_tempdir_name"]
+ assert {k: v for k, v in photosdb.__dict__.items() if k not in ignore_keys} == {
+ k: v for k, v in photosdb2.__dict__.items() if k not in ignore_keys
+ }
+
+
+def test_photosinfo_repr():
+ import osxphotos
+ import datetime
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["favorite"]])
+ photo = photos[0]
+ photo2 = eval(repr(photo))
+
+ assert {k: str(v).encode("utf-8") for k, v in photo.__dict__.items()} == {
+ k: str(v).encode("utf-8") for k, v in photo2.__dict__.items()
+ }
+
+
+def test_from_to_date():
+ import osxphotos
+ import datetime as dt
+
+ photosdb = osxphotos.PhotosDB(PHOTOS_DB)
+
+ photos = photosdb.photos(from_date=dt.datetime(2018, 10, 28))
+ assert len(photos) ==6
+
+ photos = photosdb.photos(to_date=dt.datetime(2018, 10, 28))
+ assert len(photos) == 6
+
+ photos = photosdb.photos(
+ from_date=dt.datetime(2018, 9, 28), to_date=dt.datetime(2018, 9, 29)
+ )
+ assert len(photos) == 4