diff --git a/tests/Test-10.16.0.1.photoslibrary/database/DataModelVersion.plist b/tests/Test-10.16.0.1.photoslibrary/database/DataModelVersion.plist
new file mode 100644
index 00000000..be9740fe
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/database/DataModelVersion.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ LibrarySchemaVersion
+ 5001
+ MetaSchemaVersion
+ 3
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite
new file mode 100644
index 00000000..b283e77c
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-shm
new file mode 100644
index 00000000..eda9a66a
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-wal
new file mode 100644
index 00000000..be542c0f
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite-wal differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite.lock b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite.lock
new file mode 100644
index 00000000..cfe63351
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/database/Photos.sqlite.lock
@@ -0,0 +1,16 @@
+
+
+
+
+ hostname
+ Rhets-MacBook-Pro.local
+ hostuuid
+ 9575E48B-8D5F-5654-ABAC-4431B1167324
+ pid
+ 400
+ processname
+ photolibraryd
+ uid
+ 501
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/metaSchema.db b/tests/Test-10.16.0.1.photoslibrary/database/metaSchema.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/metaSchema.db differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/photos.db b/tests/Test-10.16.0.1.photoslibrary/database/photos.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/photos.db differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/protection b/tests/Test-10.16.0.1.photoslibrary/database/protection
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/graphDataProgress.plist b/tests/Test-10.16.0.1.photoslibrary/database/search/graphDataProgress.plist
new file mode 100644
index 00000000..c4e5e427
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/search/graphDataProgress.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite b/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite
new file mode 100644
index 00000000..f3c95ffd
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/database/search/psi.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/searchMetadata.plist b/tests/Test-10.16.0.1.photoslibrary/database/search/searchMetadata.plist
new file mode 100644
index 00000000..3eec4180
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/database/search/searchProgress.plist b/tests/Test-10.16.0.1.photoslibrary/database/search/searchProgress.plist
new file mode 100644
index 00000000..ad779080
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/database/search/searchSystemInfo.plist b/tests/Test-10.16.0.1.photoslibrary/database/search/searchSystemInfo.plist
new file mode 100644
index 00000000..f6d69ef7
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/database/search/searchSystemInfo.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ embeddingVersion
+ 1
+ localeIdentifier
+ en_US
+ sceneTaxonomySHA
+ 87914a047c69fbe8013fad2c70fa70c6c03b08b56190fe4054c880e6b9f57cc3
+ searchIndexVersion
+ 10
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/synonymsProcess.plist b/tests/Test-10.16.0.1.photoslibrary/database/search/synonymsProcess.plist
new file mode 100644
index 00000000..f5ebcace
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/search/synonymsProcess.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/database/search/zeroKeywords.data b/tests/Test-10.16.0.1.photoslibrary/database/search/zeroKeywords.data
new file mode 100644
index 00000000..5d03620c
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/database/search/zeroKeywords.data differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/1/1EB2B765-0765-43BA-A90C-0D0580E6172C.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/1/1EB2B765-0765-43BA-A90C-0D0580E6172C.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4.cr2 b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4.cr2 differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/6/6FD38366-3BF2-407D-81FE-7153EB6125B6.jpeg b/tests/Test-10.16.0.1.photoslibrary/originals/6/6FD38366-3BF2-407D-81FE-7153EB6125B6.jpeg
new file mode 100644
index 00000000..88caa537
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/originals/6/6FD38366-3BF2-407D-81FE-7153EB6125B6.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/7/71E3E212-00EB-430D-8A63-5E294B268554.jpeg b/tests/Test-10.16.0.1.photoslibrary/originals/7/71E3E212-00EB-430D-8A63-5E294B268554.jpeg
new file mode 100644
index 00000000..829a2345
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/originals/7/71E3E212-00EB-430D-8A63-5E294B268554.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.heic b/tests/Test-10.16.0.1.photoslibrary/originals/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.heic
new file mode 100644
index 00000000..8f103814
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/originals/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.heic differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/8/8846E3E6-8AC8-4857-8448-E3D025784410.tiff b/tests/Test-10.16.0.1.photoslibrary/originals/8/8846E3E6-8AC8-4857-8448-E3D025784410.tiff
new file mode 100644
index 00000000..69654411
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/originals/8/8846E3E6-8AC8-4857-8448-E3D025784410.tiff differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4.cr2 b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4.cr2 differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068.dng b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068.dng differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/D/DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/D/DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/originals/F/F12384F6-CD17-4151-ACBA-AE0E3688539E.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/originals/F/F12384F6-CD17-4151-ACBA-AE0E3688539E.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/.metadata_never_index b/tests/Test-10.16.0.1.photoslibrary/private/.metadata_never_index
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist
new file mode 100644
index 00000000..651ed0ad
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist
new file mode 100644
index 00000000..f2c35147
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist
@@ -0,0 +1,58 @@
+
+
+
+
+ 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
+ CB051A4C-2CB7-4B90-B59B-08CC4D0C2823/L0/020
+
+ IPXWorkspaceControllerZoomLevelsKey
+
+ kZoomLevelIdentifierPhotosGrid
+ 2
+
+ 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.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db
new file mode 100644
index 00000000..9f719ca2
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm
new file mode 100644
index 00000000..28af3ebf
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite
new file mode 100644
index 00000000..ab2ed09a
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite
new file mode 100644
index 00000000..ef3166c4
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite
new file mode 100644
index 00000000..ec297051
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm
new file mode 100644
index 00000000..6e503f12
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite
new file mode 100644
index 00000000..6fdfa43e
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm
new file mode 100644
index 00000000..73656d14
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal
new file mode 100644
index 00000000..eab46f86
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite
new file mode 100644
index 00000000..46823bb3
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite
new file mode 100644
index 00000000..1c4ebf96
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite
new file mode 100644
index 00000000..547f08de
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm
new file mode 100644
index 00000000..2686fbd4
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist
new file mode 100644
index 00000000..0ffe7e55
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSharingFeatureExtractorRecords.plist b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSharingFeatureExtractorRecords.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..1ef03cbf
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ BackgroundHighlightCollection
+ 2020-06-24T04:02:13Z
+ BackgroundHighlightEnrichment
+ 2020-06-24T04:02:12Z
+ BackgroundJobAssetRevGeocode
+ 2020-06-24T04:02:13Z
+ BackgroundJobSearch
+ 2020-06-24T04:02:13Z
+ BackgroundPeopleSuggestion
+ 2020-06-24T04:02:12Z
+ BackgroundUserBehaviorProcessor
+ 2020-06-24T04:02:13Z
+ PhotoAnalysisGraphLastBackgroundGraphConsistencyUpdateJobDateKey
+ 2020-05-30T02:16:06Z
+ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate
+ 2020-05-29T04:31:37Z
+ PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate
+ 2020-06-24T04:02:13Z
+ SiriPortraitDonation
+ 2020-06-24T04:02:13Z
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-wal b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-wal b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-wal b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb
new file mode 100644
index 00000000..bc594a18
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist
new file mode 100644
index 00000000..3d028a03
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/ftemetrics b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/ftemetrics
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
new file mode 100644
index 00000000..bf8f1e5d
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ revgeoprovider
+ 7618
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/4E294112-DC9D-4B49-9561-1946B53A4E19.cmap b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/4E294112-DC9D-4B49-9561-1946B53A4E19.cmap differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/9A5E0437-04AA-45DC-AAA7-FDC74A91F170.cmap b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/9A5E0437-04AA-45DC-AAA7-FDC74A91F170.cmap differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
new file mode 100644
index 00000000..5feb64f2
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
@@ -0,0 +1,14 @@
+
+
+
+
+ NumberOfFacesProcessedOnLastRun
+ 7
+ ProcessedInQuiescentState
+
+ SuggestedMeIdentifier
+
+ Version
+ 4
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..bdd3d753
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ FaceIDModelLastGenerationKey
+ 2020-05-29T03:44:04Z
+ LastContactClassificationKey
+ 2020-05-29T04:31:40Z
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
new file mode 100644
index 00000000..cb4560b6
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PVClustererBringUpState
+ 50
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
new file mode 100644
index 00000000..c36206de
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ IncrementalPersonProcessingStage
+ 6
+ PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates
+ 15
+ PersonBuilderMergeCandidatesEnabled
+
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin
new file mode 100644
index 00000000..211a83f7
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..be5ca4c7
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/2E578BF2-718A-43E1-81BA-80AC61004DCF.cmap b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/2E578BF2-718A-43E1-81BA-80AC61004DCF.cmap differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data
new file mode 100644
index 00000000..1f14d535
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/C7589FFF-A378-4059-ABDC-19C4316A8B69.cmap b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/C7589FFF-A378-4059-ABDC-19C4316A8B69.cmap differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter
new file mode 100644
index 00000000..4fdc85b4
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/PersonPromoter
@@ -0,0 +1,12 @@
+
+
+
+
+ ProcessedInQuiescentState
+
+ SuggestedMeIdentifier
+
+ Version
+ 3
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist
new file mode 100644
index 00000000..cb4560b6
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/clustererState.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PVClustererBringUpState
+ 50
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist
new file mode 100644
index 00000000..736db69d
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photoanalysisd/vision/faceWorkerState.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ IncrementalPersonProcessingStage
+ 0
+ PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates
+ 15
+ PersonBuilderMergeCandidatesEnabled
+
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
new file mode 100644
index 00000000..2120d8ee
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PLLibraryServicesManager.LocaleIdentifier
+ en_US
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photomodel/appPrivateData.plist b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photomodel/appPrivateData.plist
new file mode 100644
index 00000000..106cedb0
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/private/com.apple.photomodel/appPrivateData.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ LithiumMessageTracer
+
+ LastReportedDate
+ 2019-08-04T13:32:55Z
+
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/.metadata_never_index b/tests/Test-10.16.0.1.photoslibrary/resources/.metadata_never_index
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_100_o.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_100_o.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_1_105_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_1_105_c.jpeg
new file mode 100644
index 00000000..4b8730c6
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/71E3E212-00EB-430D-8A63-5E294B268554_1_105_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/71E3E212-00EB-430D-8A63-5E294B268554_1_105_c.jpeg
new file mode 100644
index 00000000..ccbb2fd0
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/71E3E212-00EB-430D-8A63-5E294B268554_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_105_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_105_c.jpeg
new file mode 100644
index 00000000..ed80532d
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/8/8846E3E6-8AC8-4857-8448-E3D025784410_1_105_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/8/8846E3E6-8AC8-4857-8448-E3D025784410_1_105_c.jpeg
new file mode 100644
index 00000000..539b4e59
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/8/8846E3E6-8AC8-4857-8448-E3D025784410_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_100_o.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_100_o.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/D/D79B8D77-BFFC-460B-9312-034F2877D35B_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/D/D79B8D77-BFFC-460B-9312-034F2877D35B_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_1_105_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_1_105_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/1/1EB2B765-0765-43BA-A90C-0D0580E6172C_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/3/3DD2C897-F19E-4CA6-8C22-B027D5A71907_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/4/4D521201-92AC-43E5-8F7C-59BC41C37A96_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_4_5005_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_4_5005_c.jpeg
new file mode 100644
index 00000000..03d0ff79
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/6/6FD38366-3BF2-407D-81FE-7153EB6125B6_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/71E3E212-00EB-430D-8A63-5E294B268554_4_5005_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/71E3E212-00EB-430D-8A63-5E294B268554_4_5005_c.jpeg
new file mode 100644
index 00000000..c48aa6ea
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/71E3E212-00EB-430D-8A63-5E294B268554_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_4_5005_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_4_5005_c.jpeg
new file mode 100644
index 00000000..8b5467f6
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/8/8846E3E6-8AC8-4857-8448-E3D025784410_4_5005_c.jpeg b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/8/8846E3E6-8AC8-4857-8448-E3D025784410_4_5005_c.jpeg
new file mode 100644
index 00000000..a2680855
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/8/8846E3E6-8AC8-4857-8448-E3D025784410_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/8/8E1D7BC9-9321-44F9-8CFB-4083F6B9232A_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/A/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/A/A92D9C26-3A50-4197-9388-CB5F7DB9FA91_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/D/D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/D/D79B8D77-BFFC-460B-9312-034F2877D35B_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/D/D79B8D77-BFFC-460B-9312-034F2877D35B_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/D/DC99FBDD-7A52-4100-A5BB-344131646C30_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/D/DC99FBDD-7A52-4100-A5BB-344131646C30_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/masters/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_4_5005_c.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/derivatives/masters/F/F12384F6-CD17-4151-ACBA-AE0E3688539E_4_5005_c.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb
new file mode 100644
index 00000000..7ac044fd
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb
new file mode 100644
index 00000000..d13bd530
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb
new file mode 100644
index 00000000..d3210033
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
new file mode 100644
index 00000000..8c122be1
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
@@ -0,0 +1,10 @@
+
+
+
+
+ PLThumbnailManagerThumbnailFormatKey
+ 5005
+ PLThumbnailManagerVersionKey
+ 28
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-change.plj
new file mode 100644
index 00000000..c34ef490
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-snapshot.plj
new file mode 100644
index 00000000..242008b2
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Album.plist
new file mode 100644
index 00000000..523b84b5
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/Asset-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset-change.plj
new file mode 100644
index 00000000..e77f0bf4
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset-snapshot.plj
new file mode 100644
index 00000000..5d4b6fe5
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset.plist
new file mode 100644
index 00000000..05ab2fca
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Asset.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-05-29T15:20:05Z
+ coalescePayloadVersion
+ 10
+ currentPayloadVersion
+ 25
+ snapshotDate
+ 2019-11-11T04:16:28Z
+ snapshotPayloadVersion
+ 10
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/DeferredRebuildFace.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DeferredRebuildFace.plist
new file mode 100644
index 00000000..3a4b9140
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/DetectedFace-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace-change.plj
new file mode 100644
index 00000000..c86a4796
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace-snapshot.plj
new file mode 100644
index 00000000..1a00fa8d
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/DetectedFace.plist
new file mode 100644
index 00000000..a7b3527b
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/FetchingAlbum.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FetchingAlbum.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj
new file mode 100644
index 00000000..71155590
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/FileSystemVolume.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FileSystemVolume.plist
new file mode 100644
index 00000000..ac1db136
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/journals/FileSystemVolume.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-05-29T15:20:05Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-change.plj
new file mode 100644
index 00000000..91117fd5
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-snapshot.plj
new file mode 100644
index 00000000..2e6a4601
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder.plist
new file mode 100644
index 00000000..ac1db136
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Folder.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-05-29T15:20:05Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/HistoryToken.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/HistoryToken.plist
new file mode 100644
index 00000000..34f948a3
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/HistoryToken.plist differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-change.plj
new file mode 100644
index 00000000..20fe3a9c
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-snapshot.plj
new file mode 100644
index 00000000..b70f6df4
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession.plist
new file mode 100644
index 00000000..ac1db136
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ImportSession.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ coalesceDate
+ 2020-05-29T15:20:05Z
+ coalescePayloadVersion
+ 1
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-10-27T15:02:55Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-change.plj
new file mode 100644
index 00000000..bc1570ab
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-snapshot.plj
new file mode 100644
index 00000000..f512308e
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Keyword.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/Memory-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Memory-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Memory.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Memory.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/MigrationHistory-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory-change.plj
new file mode 100644
index 00000000..67ac88f8
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory-snapshot.plj
new file mode 100644
index 00000000..d5eda50a
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory.plist
new file mode 100644
index 00000000..4ec37c7f
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/journals/MigrationHistory.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2020-10-02T13:39:59Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-change.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-change.plj
new file mode 100644
index 00000000..bb5e8461
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-change.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-snapshot.plj
new file mode 100644
index 00000000..8e7d5719
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person-snapshot.plj differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/Person.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/journals/ProjectAlbum.plist b/tests/Test-10.16.0.1.photoslibrary/resources/journals/ProjectAlbum.plist
new file mode 100644
index 00000000..3ece9a2c
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.plist b/tests/Test-10.16.0.1.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.plist
new file mode 100644
index 00000000..b69a9147
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_201_a.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/6/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_1_201_a.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.plist b/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.plist
new file mode 100644
index 00000000..080450e0
--- /dev/null
+++ b/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266.plist
@@ -0,0 +1,68 @@
+
+
+
+
+ adjustmentBaseVersion
+ 0
+ adjustmentData
+
+ bVfbkqM6sv0Xv1ZHl8BgQ0fMAyCJm8EgbsZT84ABczVggwvsHfvfj1zdfXZPxPCGMrVy
+ KSVlLv21+sxvY9V3enfuVz/+Wp3uVZvZ98spv61+rFgg8WuBS1ffVskwhD9d6fiaAd+Z
+ 7wwDqGFMy/ySkPyz+mlkvq2GNpnO/e1CPffeYfX3t9Uln5IsmZJXiEsyTvktqrKpXP1Y
+ A5ajE6ohb6su/ycCnfedo+g/nbW8Kspp9YMDa/bbqr9VeTcl089wFP0VK5n+fzJlkGT1
+ fZwu1G1c/fj3X//DI++SU5tnqx/T7Z7TVeTTVHXF+CLYn8/0d9enSbv7GRd8+zWo0f/2
+ NTZ+DVbdcJ9++3xnhA0QNzzgOLAFPMMKv2ehZejH+y3/A0huk7Rx+qr7E12+vaC6fPyJ
+ Pr7WOE5V+sVqAOwrCABbgVsz6y3LcyJgxA3Y0vzx4MsmCmAtsgy/ETbsluMBZZDcpz5M
+ 2vsr+HdW4Dfgj48m8/QnEYq+ZsTthmdopnlRYJkt/2019V3SkqQr8l9BOH6z2fKABZQF
+ y1KPgeW/TGueFTmG2W44mgBBYNfUJAovEy/+90eZfeXRSga62xgPZgaGkxc2biTxB8I0
+ diTbEcbxYCnmYODiFMmXO2bislb8rTGhqgFhqUcGbhlHD9U2SphsiiIxSVuGPaxb+PG+
+ 4Bm2gRM2WWzg1AmJNKPlqEeojNXQRpFsHFAYx5Gi6kbS2vHyWeC1VJyC2xxkYsi0xzFk
+ meOJGZaDFp5z+QKh19jhzEe4jYMQ4ogwmRaC8uDhjOK2FLfxo+amO8n8+fEebDewHZ2j
+ TKbgcgwSHF7DT+42emczOi9p2/IcfqAjmUUKFCeh3KTI53wNZQcvLA0KePTa1ozAlPqY
+ sQ5VWJAzspVCbO2OeOeQ9KE6hM2j+Hg3QZCSsgGB0+912TiTN8psBhasrUSTxdjDvwEH
+ M2qm0xdgwxc+i524ACqMXOYTko/3ULPYQsFjyBkKs3gFPkn+XOoelvUgXMhhH/UkJJXp
+ mbIeN78YNnTvmIUCMucvwJLmyg3sqDU2tmoFGZEZW5QOi7zvUOX6qLRc2MQHIqcBDovQ
+ ezhnw0yrYzBUXwTBiyDFC37htbiBUWzLBXMPHY7siWkgSSCI6B7q3CBjeCGOAzdc7JBO
+ i0CZHfClaD/em/XHu/cp/sMwYPLfiMHBsjOZn5xrQTdrfhPNeL72uAVRZ59GzK/pMSqv
+ r2PZ9lFEyM2Y5iGCb2fvLm0OaOi+cgh+5ZDBrdP13dHLAj3S41zuSvXSZ2X51mtdXFte
+ dNTYJvqUpZ338W6bFOCkNkV4kxOTJKW1aZ5HPxP3DPp4z/034rJY84Md5xWzUMLHTPYy
+ ilA0ltvFbfTn+CQ+TW2j3x152KA+pEtbcoxnB87CHj5dl5Q7jNLZuy+mqA3uKV3mO37M
+ jutyZxgB7ym9JXCeHSQHD7jEg+MzexdLgvcMkW331yZ4LBgDFxYUr0TUTxtQJHlxOdUG
+ a/VuFbD60zolhXiDxeyqBUcg6W04Aw97em5XjbgHohLAydqteWuGV4KWwEsJvuBdGi6y
+ 66pn22lbuQ6i4Hb0jp0eDeFJDqewk+zUBTvoWUdTQTdd6WvLlwSrZtIc87zWNedHtXWt
+ oXdguZyQMjs6ibbavgkECWjQTZ08tEVtn0UpbhfUSXtVmjVIwMV6zGvzGd+sqpktCG65
+ qljxYf48yxvFMMOKlUOEJ4nM0sd7AY+9rbkgg8Xo8AV7fp1qhfCMMehONjNrSCRb9UbB
+ blzg1vrH+64e73slEw53uy6aSFL1ueiq50Vr9eNQdp5/vvYf7xRahFJjmWTXmWfLFmaW
+ oC72MlmnOQKeLs0u3eOt50/mHgVPh1Wloy7xtZooIWdlVWW8mWIr31xx0gLr6JOnAN+Q
+ jWTXw/p8uMq7G9y4gUqaQlOszJDnC127bT5aZAbFQBRLgBy+lPi6P4qkruh9VY/BLOLO
+ gYngXuXa3luFu5C5U2sri8l8pliB6kk3o5auttcwBrTyXQFMTObWfIwP+BAcXAh20LeX
+ Sr1bu0GoOkXJDNM6tjIakSx4TrmuNS9tdlXwaUC93j3Q03zOTwJtbAU0nCw9UakfVDJf
+ DJB6iCARwdSrGdVJjDBqlmqv9XPeL8VA82TDAlzgQ69tj9taPlgcT3jT/aB0/WHvhBLn
+ zYyMXHDQFetueNyQlKFttDOXEfFi4rQ5PmxGPQLPqcxSZWILzcIRyVZqePpF8/vSqayP
+ dwsKo6OMYOcXte3OJ2WJd5gUF80rxv3jmRmWlCfK1tG5oLt6xNHWXFDKtgLZYG/M4hUt
+ Y6xX1kWvgtLwKJHn/HBhCCnhaa/on7BMLZ24PpSlzvENbsc19efj+GnZ49RWd2xcxuJa
+ Dp+oLk7t0hZGB4a6QoNepbWpBDdjPYp+zdh2EDzdamJhq3v0Qtr4IFnKLGQYjOemTmiP
+ 0Irq4oXF7pYeCNn46FY46TKtsTqXdcmusTlerCqbadkIulm4o53k0mazV9PRlhcK2qAg
+ kbiANrrQWcRZM9EFyHmGGekUyu2gXqSkJnKtGU2YLg9P74BfldkDtRbZyb5n7NN46woR
+ cnsyFkDDcrB3iH7EXHAs5ERSw7lYPAfipIlKJWrxMY6yMmwgp9sHV6zgZcrWM09bZm+H
+ 7sc72YkpLW8nHePGUSgwPeKBKh9lNeTO41LecZpOdQVjTZ+TqswR4l33RMIWrXUvcBkP
+ 4cJJJDaFnEQeEt/gfh668rHTVFCeCjGGRWErLnDUsC8Lb7/FPHcoypuM++BwKWORXm7a
+ yI0SdZxjyWaJ8mZPce7wQWVCKW+wMF6B4pW7o8t8vD92H+/atdgrrwIVjMNU3R8GbVtT
+ aZT40PvJYvQQAJLLtNTzVkBk9IYUQAs6LYSkCXEhunTX3aR8sJDlXLfELBRHt5Y4ndal
+ vVNppqm7QTILVxTFdKOFGXWBE8wMjw7BbSS4RFhyEtIktNjQs/F2QhoXNMRg1FFK7654
+ hjLwkvkthS7ttsSQ1clNn5Wp6VzsBwSdUdgcGnkRUO/6HbHv8NDbhst9onC0YxLVSHC9
+ +LEL/Bwbd5ctoOTatfsWwQc9QgXQtbYhqOoI3sQZnd8gQ3J2rmiqB+TQhunBdeGcC1DA
+ df8vKv/blwiX/pSw6w3L/SlhN99Wc1lN+S8Jy7wk7B8S+PUaYX6K439k8S+Z/G1VUglq
+ 5o+XWQCbNbd5+bBUxLP85u/fqlzpu+lGnyF/CHWvTLJ+fql06lVl9JlRnauvF5N3SW6T
+ 33f56u///P1/
+
+ adjustmentEditorBundleID
+ com.apple.Photos
+ adjustmentFormatIdentifier
+ com.apple.photo
+ adjustmentFormatVersion
+ 1.5
+ adjustmentTimestamp
+ 2020-10-04T06:00:14Z
+
+
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_201_a.heic b/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_201_a.heic
new file mode 100644
index 00000000..c7b00d6c
Binary files /dev/null and b/tests/Test-10.16.0.1.photoslibrary/resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_201_a.heic differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30.plist b/tests/Test-10.16.0.1.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30.plist
new file mode 100644
index 00000000..b298f6be
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_201_a.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/D/DC99FBDD-7A52-4100-A5BB-344131646C30_1_201_a.jpeg differ
diff --git a/tests/Test-10.16.0.1.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.plist b/tests/Test-10.16.0.1.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.plist
new file mode 100644
index 00000000..4117c731
--- /dev/null
+++ b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg b/tests/Test-10.16.0.1.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.16.0.1.photoslibrary/resources/renders/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_1_201_a.jpeg differ
diff --git a/tests/test_bigsur_10_16_0_1.py b/tests/test_bigsur_10_16_0_1.py
new file mode 100644
index 00000000..fb7b5605
--- /dev/null
+++ b/tests/test_bigsur_10_16_0_1.py
@@ -0,0 +1,1192 @@
+import pytest
+
+from collections import namedtuple
+
+from osxphotos._constants import _UNKNOWN_PERSON
+
+
+PHOTOS_DB = "tests/Test-10.16.0.1.photoslibrary/database/photos.db"
+PHOTOS_DB_PATH = "/Test-10.16.0.1.photoslibrary/database/photos.db"
+PHOTOS_LIBRARY_PATH = "/Test-10.16.0.1.photoslibrary"
+
+PHOTOS_DB_LEN = 16
+PHOTOS_NOT_IN_TRASH_LEN = 14
+PHOTOS_IN_TRASH_LEN = 2
+
+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", # there are 2 albums named "Test Album" for testing duplicate album names
+ "AlbumInFolder",
+ "Raw",
+ "I have a deleted twin", # there's an empty album with same name that has been deleted
+ "EmptyAlbum",
+ "2018-10 - Sponsion, Museum, Frühstück, Römermuseum",
+ "2019-10/11 Paris Clermont",
+]
+KEYWORDS_DICT = {
+ "Kids": 4,
+ "wedding": 3,
+ "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": 2, _UNKNOWN_PERSON: 1}
+ALBUM_DICT = {
+ "Pumpkin Farm": 3,
+ "Test Album": 2,
+ "AlbumInFolder": 2,
+ "Raw": 4,
+ "I have a deleted twin": 1,
+ "EmptyAlbum": 0,
+ "2018-10 - Sponsion, Museum, Frühstück, Römermuseum": 1,
+ "2019-10/11 Paris Clermont": 1,
+} # 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"
+ "export_tif": "8846E3E6-8AC8-4857-8448-E3D025784410",
+ "in_album": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
+ "date_invalid": "8846E3E6-8AC8-4857-8448-E3D025784410",
+ "intrash": "71E3E212-00EB-430D-8A63-5E294B268554",
+ "not_intrash": "DC99FBDD-7A52-4100-A5BB-344131646C30",
+ "intrash_person_keywords": "6FD38366-3BF2-407D-81FE-7153EB6125B6",
+}
+
+UUID_PUMPKIN_FARM = [
+ "F12384F6-CD17-4151-ACBA-AE0E3688539E",
+ "D79B8D77-BFFC-460B-9312-034F2877D35B",
+ "1EB2B765-0765-43BA-A90C-0D0580E6172C",
+]
+
+ALBUM_SORT_ORDER = [
+ "1EB2B765-0765-43BA-A90C-0D0580E6172C",
+ "F12384F6-CD17-4151-ACBA-AE0E3688539E",
+ "D79B8D77-BFFC-460B-9312-034F2877D35B",
+]
+ALBUM_KEY_PHOTO = "D79B8D77-BFFC-460B-9312-034F2877D35B"
+
+UTI_DICT = {
+ "8846E3E6-8AC8-4857-8448-E3D025784410": "public.tiff",
+ "7783E8E6-9CAC-40F3-BE22-81FB7051C266": "public.heic",
+ "1EB2B765-0765-43BA-A90C-0D0580E6172C": "public.jpeg",
+ "4D521201-92AC-43E5-8F7C-59BC41C37A96": "public.jpeg",
+}
+
+UTI_ORIGINAL_DICT = {
+ "8846E3E6-8AC8-4857-8448-E3D025784410": "public.tiff",
+ "7783E8E6-9CAC-40F3-BE22-81FB7051C266": "public.heic",
+ "1EB2B765-0765-43BA-A90C-0D0580E6172C": "public.jpeg",
+ "4D521201-92AC-43E5-8F7C-59BC41C37A96": "public.jpeg",
+}
+
+RawInfo = namedtuple(
+ "RawInfo",
+ [
+ "comment",
+ "original_filename",
+ "has_raw",
+ "israw",
+ "raw_original",
+ "uti",
+ "uti_original",
+ "uti_raw",
+ ],
+)
+RAW_DICT = {
+ "D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068": RawInfo(
+ "raw image, no jpeg pair",
+ "DSC03584.dng",
+ False,
+ True,
+ False,
+ "com.adobe.raw-image",
+ "com.adobe.raw-image",
+ None,
+ ),
+ "A92D9C26-3A50-4197-9388-CB5F7DB9FA91": RawInfo(
+ "raw+jpeg, jpeg original",
+ "IMG_1994.JPG",
+ True,
+ False,
+ False,
+ "public.jpeg",
+ "public.jpeg",
+ "com.canon.cr2-raw-image",
+ ),
+ "4D521201-92AC-43E5-8F7C-59BC41C37A96": RawInfo(
+ "raw+jpeg, raw original",
+ "IMG_1997.JPG",
+ True,
+ False,
+ True,
+ "public.jpeg",
+ "public.jpeg",
+ "com.canon.cr2-raw-image",
+ ),
+ "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51": RawInfo(
+ "jpeg, no raw",
+ "wedding.jpg",
+ False,
+ False,
+ False,
+ "public.jpeg",
+ "public.jpeg",
+ None,
+ ),
+}
+
+# HEIC image that's been edited in Big Sur, resulting edit is .HEIC
+UUID_HEIC_EDITED = "7783E8E6-9CAC-40F3-BE22-81FB7051C266"
+PATH_HEIC_EDITED = (
+ "resources/renders/7/7783E8E6-9CAC-40F3-BE22-81FB7051C266_1_201_a.heic"
+)
+
+
+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) == PHOTOS_DB_LEN
+
+
+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_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"] == 3
+ 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"] == 2
+ 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_album_sort_order():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ album = [a for a in photosdb.album_info if a.title == "Pumpkin Farm"][0]
+ photos = album.photos
+
+ uuids = [p.uuid for p in photos]
+ assert uuids == ALBUM_SORT_ORDER
+
+
+def test_album_empty_album():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ album = [a for a in photosdb.album_info if a.title == "EmptyAlbum"][0]
+ photos = album.photos
+ assert photos == []
+
+
+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 sorted(p.albums) == ["Pumpkin Farm", "Test Album"]
+ assert p.persons == ["Katie"]
+ assert p.path.endswith(
+ "tests/Test-10.16.0.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg"
+ )
+ assert p.ismissing == False
+
+
+def test_attributes_2():
+ """ Test attributes including height, width, etc """
+ import datetime
+ 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.keywords == ["wedding"]
+ assert p.original_filename == "wedding.jpg"
+ assert p.filename == "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg"
+ assert p.date == datetime.datetime(
+ 2019,
+ 4,
+ 15,
+ 14,
+ 40,
+ 24,
+ 86000,
+ datetime.timezone(datetime.timedelta(seconds=-14400)),
+ )
+ assert p.description == "Bride Wedding day"
+ assert p.title is None
+ assert sorted(p.albums) == ["AlbumInFolder", "I have a deleted twin"]
+ assert p.persons == ["Maria"]
+ assert p.path.endswith(
+ "tests/Test-10.16.0.1.photoslibrary/originals/E/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.jpeg"
+ )
+ assert not p.ismissing
+ assert p.hasadjustments
+ assert p.height == 1325
+ assert p.width == 1526
+ assert p.original_height == 1367
+ assert p.original_width == 2048
+ assert p.orientation == 1
+ assert p.original_orientation == 1
+ assert p.original_filesize == 460483
+
+
+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 is 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_edited_jpeg():
+ # 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_edited_heic():
+ # test a valid edited path for .heic image
+ import pathlib
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photo = photosdb.get_photo(UUID_HEIC_EDITED)
+ assert photo.path_edited.endswith(PATH_HEIC_EDITED)
+ assert pathlib.Path(photo.path_edited).is_file()
+
+
+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) == PHOTOS_NOT_IN_TRASH_LEN
+
+
+def test_photos_intrash_1():
+ """ test PhotosDB.photos(intrash=True) """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(intrash=True)
+ assert len(photos) == PHOTOS_IN_TRASH_LEN
+
+
+def test_photos_intrash_2():
+ """ test PhotosDB.photos(intrash=True) """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(intrash=True)
+ for p in photos:
+ assert p.intrash
+
+
+def test_photos_intrash_3():
+ """ test PhotosDB.photos(intrash=False) """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(intrash=False)
+ for p in photos:
+ assert not p.intrash
+
+
+def test_photoinfo_intrash_1():
+ """ Test PhotoInfo.intrash """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(uuid=[UUID_DICT["intrash"]], intrash=True)[0]
+ assert p.intrash
+
+
+def test_photoinfo_intrash_2():
+ """ Test PhotoInfo.intrash and intrash=default"""
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(uuid=[UUID_DICT["intrash"]])
+ assert not p
+
+
+def test_photoinfo_intrash_3():
+ """ Test PhotoInfo.intrash and photo has keyword and person """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(uuid=[UUID_DICT["intrash_person_keywords"]], intrash=True)[0]
+ assert p.intrash
+ assert "Maria" in p.persons
+ assert "wedding" in p.keywords
+
+
+def test_photoinfo_intrash_4():
+ """ Test PhotoInfo.intrash and photo has keyword and person """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(persons=["Maria"], intrash=True)[0]
+ assert p.intrash
+ assert "Maria" in p.persons
+ assert "wedding" in p.keywords
+
+
+def test_photoinfo_intrash_5():
+ """ Test PhotoInfo.intrash and photo has keyword and person """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(keywords=["wedding"], intrash=True)[0]
+ assert p.intrash
+ assert "Maria" in p.persons
+ assert "wedding" in p.keywords
+
+
+def test_photoinfo_not_intrash():
+ """ Test PhotoInfo.intrash """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ p = photosdb.photos(uuid=[UUID_DICT["not_intrash"]])[0]
+ assert not p.intrash
+
+
+def test_keyword_2():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(keywords=["wedding"])
+ assert len(photos) == 2 # won't show the one in the trash
+
+
+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_album_folder_name():
+ """Test query with album name same as a folder name """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+
+ photos = photosdb.photos(albums=["Pumpkin Farm"])
+ assert sorted(p.uuid for p in photos) == sorted(UUID_PUMPKIN_FARM)
+
+
+def test_multi_person():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(PHOTOS_DB)
+ photos = photosdb.photos(persons=["Katie", "Suzy"])
+
+ assert len(photos) == 3
+
+
+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_get_db_connection():
+ """ Test PhotosDB.get_db_connection """
+ import osxphotos
+ import sqlite3
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ conn, cursor = photosdb.get_db_connection()
+
+ assert isinstance(conn, sqlite3.Connection)
+ assert isinstance(cursor, sqlite3.Cursor)
+
+ results = conn.execute("SELECT ZUUID FROM ZASSET WHERE ZFAVORITE = 1;").fetchall()
+ assert len(results) == 1
+ assert results[0][0] == "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51" # uuid
+
+ conn.close()
+
+
+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_export_14(caplog):
+ # test export with user provided filename with different (but valid) extension than source
+ 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_tif"]])
+
+ timestamp = time.time()
+ filename = f"osxphotos-export-2-test-{timestamp}.tif"
+ 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)
+
+ assert "Invalid destination suffix" not in caplog.text
+
+
+def test_eq():
+ """ Test equality of two PhotoInfo objects """
+ import osxphotos
+
+ photosdb1 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photosdb2 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos1 = photosdb1.photos(uuid=[UUID_DICT["export"]])
+ photos2 = photosdb2.photos(uuid=[UUID_DICT["export"]])
+ assert photos1[0] == photos2[0]
+
+
+def test_eq_2():
+ """ Test equality of two PhotoInfo objects when one has memoized property """
+ import osxphotos
+
+ photosdb1 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photosdb2 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos1 = photosdb1.photos(uuid=[UUID_DICT["in_album"]])
+ photos2 = photosdb2.photos(uuid=[UUID_DICT["in_album"]])
+
+ # memoize a value
+ albums = photos1[0].albums
+ assert albums
+
+ 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) == 7
+
+ photos = photosdb.photos(to_date=dt.datetime(2018, 10, 28))
+ assert len(photos) == 7
+
+ photos = photosdb.photos(
+ from_date=dt.datetime(2018, 9, 28), to_date=dt.datetime(2018, 9, 29)
+ )
+ assert len(photos) == 4
+
+
+def test_date_invalid():
+ """ Test date is invalid """
+ from datetime import datetime, timedelta, timezone
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ # UUID_DICT["date_invalid"] has an invalid date that's
+ # been manually adjusted in the database
+ photos = photosdb.photos(uuid=[UUID_DICT["date_invalid"]])
+ assert len(photos) == 1
+ p = photos[0]
+ delta = timedelta(seconds=p.tzoffset)
+ tz = timezone(delta)
+ assert p.date == datetime(1970, 1, 1).astimezone(tz=tz)
+
+
+def test_date_modified_invalid():
+ """ Test date modified is invalid """
+ from datetime import datetime, timedelta, timezone
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ # UUID_DICT["date_invalid"] has an invalid modified date that's
+ # been manually adjusted in the database
+ photos = photosdb.photos(uuid=[UUID_DICT["date_invalid"]])
+ assert len(photos) == 1
+ p = photos[0]
+ assert p.date_modified is None
+
+
+def test_uti():
+ """ test uti """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+
+ for uuid, uti in UTI_DICT.items():
+ photo = photosdb.get_photo(uuid)
+ assert photo.uti == uti
+ assert photo.uti_original == UTI_ORIGINAL_DICT[uuid]
+
+
+def test_raw():
+ """ Test various raw properties """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+
+ for uuid, rawinfo in RAW_DICT.items():
+ photo = photosdb.get_photo(uuid)
+ assert photo.original_filename == rawinfo.original_filename
+ assert photo.has_raw == rawinfo.has_raw
+ assert photo.israw == rawinfo.israw
+ assert photo.uti == rawinfo.uti
+ assert photo.uti_original == rawinfo.uti_original
+ assert photo.uti_raw == rawinfo.uti_raw