diff --git a/README.md b/README.md
index ce118990..af46f932 100644
--- a/README.md
+++ b/README.md
@@ -14,15 +14,17 @@
- [Open the default Photos library](#open-the-default-photos-library)
- [Open System Photos library](#open-system-photos-library)
- [Open a specific Photos library](#open-a-specific-photos-library)
- - [```keywords```](#keywords)
- - [```albums```](#albums)
- - [```persons```](#persons)
- - [```keywords_as_dict```](#keywords_as_dict)
- - [```persons_as_dict```](#persons_as_dict)
- - [```albums_as_dict```](#albums_as_dict)
- - [```library_path```](#library_path)
- - [```db_path```](#db_path)
- - [```db_version```](#db_version)
+ - [`keywords`](#keywords)
+ - [`albums`](#albums)
+ - [`albums_shared`](#albums_shared)
+ - [`persons`](#persons)
+ - [`keywords_as_dict`](#keywords_as_dict)
+ - [`persons_as_dict`](#persons_as_dict)
+ - [`albums_as_dict`](#albums_as_dict)
+ - [`albums_shared_as_dict`](#albums_shared_as_dict)
+ - [`library_path`](#library_path)
+ - [`db_path`](#db_path)
+ - [`db_version`](#db_version)
- [`photos(keywords=[], uuid=[], persons=[], albums=[])`](#photoskeywords-uuid-persons-albums)
+ [PhotoInfo](#photoinfo)
- [`uuid`](#uuid)
@@ -31,9 +33,9 @@
- [`date`](#date)
- [`description`](#description)
- [`title`](#title)
- - [`keywords`](#keywords)
- - [`albums`](#albums)
- - [`persons`](#persons)
+ - [`keywords`](#keywords-1)
+ - [`albums`](#albums-1)
+ - [`persons`](#persons-1)
- [`path`](#path)
- [`path_edited`](#path_edited)
- [`ismissing`](#ismissing)
@@ -42,6 +44,7 @@
- [`favorite`](#favorite)
- [`hidden`](#hidden)
- [`location`](#location)
+ - [`shared`](#shared)
- [`json()`](#json)
- [`export(dest, *filename, edited=False, overwrite=False, increment=True, sidecar=False)`](#exportdest-filename-editedfalse-overwritefalse-incrementtrue-sidecarfalse)
+ [Utility Functions](#utility-functions)
@@ -56,7 +59,6 @@
* [Implementation Notes](#implementation-notes)
* [Dependencies](#dependencies)
* [Acknowledgements](#acknowledgements)
-
## What is osxphotos?
@@ -283,7 +285,7 @@ Pass the fully qualified path to the Photos library or the actual database file
Returns a PhotosDB object.
-#### ```keywords```
+#### `keywords`
```python
# assumes photosdb is a PhotosDB object (see above)
keywords = photosdb.keywords
@@ -291,7 +293,7 @@ keywords = photosdb.keywords
Returns a list of the keywords found in the Photos library
-#### ```albums```
+#### `albums`
```python
# assumes photosdb is a PhotosDB object (see above)
albums = photosdb.albums
@@ -301,7 +303,13 @@ Returns a list of the albums found in the Photos library.
**Note**: In Photos 5.0 (MacOS 10.15/Catalina), It is possible to have more than one album with the same name in Photos. Albums with duplicate names are treated as a single album and the photos in each are combined. For example, if you have two albums named "Wedding" and each has 2 photos, osxphotos will treat this as a single album named "Wedding" with 4 photos in it.
-#### ```persons```
+#### `albums_shared`
+
+Returns list of shared albums found in photos database (e.g. albums shared via iCloud photo sharing)
+
+**Note**: *Only valid for Photos 5 / MacOS 10.15*; on Photos <= 4, prints warning and returns empty list.
+
+#### `persons`
```python
# assumes photosdb is a PhotosDB object (see above)
persons = photosdb.persons
@@ -309,7 +317,7 @@ persons = photosdb.persons
Returns a list of the persons (faces) found in the Photos library
-#### ```keywords_as_dict```
+#### `keywords_as_dict`
```python
# assumes photosdb is a PhotosDB object (see above)
keyword_dict = photosdb.keywords_as_dict
@@ -317,7 +325,7 @@ keyword_dict = photosdb.keywords_as_dict
Returns a dictionary of keywords found in the Photos library where key is the keyword and value is the count of how many times that keyword appears in the library (ie. how many photos are tagged with the keyword). Resulting dictionary is in reverse sorted order (e.g. keyword with the highest count is first).
-#### ```persons_as_dict```
+#### `persons_as_dict`
```python
# assumes photosdb is a PhotosDB object (see above)
persons_dict = photosdb.persons_as_dict
@@ -325,7 +333,7 @@ persons_dict = photosdb.persons_as_dict
Returns a dictionary of persons (faces) found in the Photos library where key is the person name and value is the count of how many times that person appears in the library (ie. how many photos are tagged with the person). Resulting dictionary is in reverse sorted order (e.g. person who appears in the most photos is listed first).
-#### ```albums_as_dict```
+#### `albums_as_dict`
```python
# assumes photosdb is a PhotosDB object (see above)
albums_dict = photosdb.albums_as_dict
@@ -335,7 +343,17 @@ Returns a dictionary of albums found in the Photos library where key is the albu
**Note**: In Photos 5.0 (MacOS 10.15/Catalina), It is possible to have more than one album with the same name in Photos. Albums with duplicate names are treated as a single album and the photos in each are combined. For example, if you have two albums named "Wedding" and each has 2 photos, osxphotos will treat this as a single album named "Wedding" with 4 photos in it.
-#### ```library_path```
+#### `albums_shared_as_dict`
+```python
+# assumes photosdb is a PhotosDB object (see above)
+albums_shared_dict = photosdb.albums_shared_as_dict
+```
+
+Returns a dictionary of shared albums (e.g. shared via iCloud photo sharing) found in the Photos library where key is the album name and value is the count of how many photos are in the album. Resulting dictionary is in reverse sorted order (e.g. album with the most photos is listed first).
+
+**Note**: *Photos 5 / MacOS 10.15 only*. On earlier versions of Photos, prints warning and returns empty dictionary.
+
+#### `library_path`
```python
# assumes photosdb is a PhotosDB object (see above)
photosdb.library_path
@@ -343,7 +361,7 @@ photosdb.library_path
Returns the path to the Photos library as a string
-#### ```db_path```
+#### `db_path`
```python
# assumes photosdb is a PhotosDB object (see above)
photosdb.db_path
@@ -351,7 +369,7 @@ photosdb.db_path
Returns the path to the Photos database PhotosDB was initialized with
-#### ```db_version```
+#### `db_version`
```python
# assumes photosdb is a PhotosDB object (see above)
photosdb.db_version
@@ -481,6 +499,11 @@ Returns `True` if the picture has been marked as hidden, otherwise `False`
#### `location`
Returns latitude and longitude as a tuple of floats (latitude, longitude). If location is not set, latitude and longitude are returned as `None`
+#### `shared`
+Returns True if photo is in a shared album, otherwise False.
+
+**Note**: *Only valid on Photos 5 / MacOS 10.15*; on Photos <= 4, returns None instead of True/False.
+
#### `json()`
Returns a JSON representation of all photo info
diff --git a/osxphotos/_version.py b/osxphotos/_version.py
index 36238e16..bf2c0143 100644
--- a/osxphotos/_version.py
+++ b/osxphotos/_version.py
@@ -1,3 +1,3 @@
""" version info """
-__version__ = "0.17.08"
+__version__ = "0.18.00"
diff --git a/osxphotos/photosdb.py b/osxphotos/photosdb.py
index 5f8e332d..40b679e8 100644
--- a/osxphotos/photosdb.py
+++ b/osxphotos/photosdb.py
@@ -200,7 +200,39 @@ class PhotosDB:
def albums_as_dict(self):
""" return albums as dict of albums, count in reverse sorted order (descending) """
albums = {}
- for k in self._dbalbums_album.keys():
+ album_keys = [
+ k
+ for k in self._dbalbums_album.keys()
+ if self._dbalbum_details[k]["cloudownerhashedpersonid"] is None
+ ]
+ for k in album_keys:
+ title = self._dbalbum_details[k]["title"]
+ if title in albums:
+ albums[title] += len(self._dbalbums_album[k])
+ else:
+ albums[title] = len(self._dbalbums_album[k])
+ albums = dict(sorted(albums.items(), key=lambda kv: kv[1], reverse=True))
+ return albums
+
+ @property
+ def albums_shared_as_dict(self):
+ """ returns shared albums as dict of albums, count in reverse sorted order (descending)
+ valid only on Photos 5; on Photos <= 4, prints warning and returns empty dict """
+
+ # if _dbalbum_details[key]["cloudownerhashedpersonid"] is not None, then it's a shared album
+ if self._db_version < _PHOTOS_5_VERSION:
+ logging.warning(
+ f"albums_shared not implemented for Photos versions < {_PHOTOS_5_VERSION}"
+ )
+ return {}
+
+ albums = {}
+ album_keys = [
+ k
+ for k in self._dbalbums_album.keys()
+ if self._dbalbum_details[k]["cloudownerhashedpersonid"] is not None
+ ]
+ for k in album_keys:
title = self._dbalbum_details[k]["title"]
if title in albums:
albums[title] += len(self._dbalbums_album[k])
@@ -224,10 +256,43 @@ class PhotosDB:
@property
def albums(self):
""" return list of albums found in photos database """
+
# Could be more than one album with same name
# Right now, they are treated as same album and photos are combined from albums with same name
+
albums = set()
- for album in self._dbalbums_album.keys():
+ album_keys = [
+ k
+ for k in self._dbalbums_album.keys()
+ if self._dbalbum_details[k]["cloudownerhashedpersonid"] is None
+ ]
+ for album in album_keys:
+ albums.add(self._dbalbum_details[album]["title"])
+ return list(albums)
+
+ @property
+ def albums_shared(self):
+ """ return list of shared albums found in photos database
+ only valid for Photos 5; on Photos <= 4, prints warning and returns empty list """
+
+ # Could be more than one album with same name
+ # Right now, they are treated as same album and photos are combined from albums with same name
+
+ # if _dbalbum_details[key]["cloudownerhashedpersonid"] is not None, then it's a shared album
+
+ if self._db_version < _PHOTOS_5_VERSION:
+ logging.warning(
+ f"albums_shared not implemented for Photos versions < {_PHOTOS_5_VERSION}"
+ )
+ return []
+
+ albums = set()
+ album_keys = [
+ k
+ for k in self._dbalbums_album.keys()
+ if self._dbalbum_details[k]["cloudownerhashedpersonid"] is not None
+ ]
+ for album in album_keys:
albums.add(self._dbalbum_details[album]["title"])
return list(albums)
@@ -854,7 +919,7 @@ class PhotosDB:
# 13 "ZGENERICASSET.ZLATITUDE, "
# 14 "ZGENERICASSET.ZLONGITUDE, "
# 15 "ZGENERICASSET.ZHASADJUSTMENTS "
- # 16 "ZCLOUDOWNERHASHEDPERSONID "
+ # 16 "ZCLOUDOWNERHASHEDPERSONID " -- If not null, indicates a shared photo
i = 0
for row in c:
@@ -862,11 +927,6 @@ class PhotosDB:
uuid = row[0]
logging.debug(f"i = {i:d}, uuid = '{uuid}")
- # TODO: temporary fix for shared cloud photos
- # if row[16] is not None:
- # logging.debug(f"skipping shared cloud photo {uuid}, ZCLOUDOWNERHASHEDPERSONID: {row[16]}")
- # continue
-
self._dbphotos[uuid] = {}
self._dbphotos[uuid]["_uuid"] = uuid # stored here for easier debugging
self._dbphotos[uuid]["modelID"] = None
@@ -900,7 +960,7 @@ class PhotosDB:
self._dbphotos[uuid]["longitude"] = row[14]
self._dbphotos[uuid]["hasAdjustments"] = row[15]
-
+
self._dbphotos[uuid]["cloudOwnerHashedPersonID"] = row[16]
self._dbphotos[uuid]["shared"] = True if row[16] is not None else False
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/DataModelVersion.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/DataModelVersion.plist
new file mode 100644
index 00000000..be9740fe
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/database/DataModelVersion.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ LibrarySchemaVersion
+ 5001
+ MetaSchemaVersion
+ 3
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/Photos.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/database/Photos.sqlite
new file mode 100644
index 00000000..364af67c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/Photos.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/metaSchema.db b/tests/Test-Shared-10.15.1.photoslibrary/database/metaSchema.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/metaSchema.db differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/photos.db b/tests/Test-Shared-10.15.1.photoslibrary/database/photos.db
new file mode 100644
index 00000000..2d75bd40
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/photos.db differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/protection b/tests/Test-Shared-10.15.1.photoslibrary/database/protection
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/graphDataProgress.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/search/graphDataProgress.plist
new file mode 100644
index 00000000..c4e5e427
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/graphDataProgress.plist differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-shm b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-shm
new file mode 100644
index 00000000..e76cba04
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-wal
new file mode 100644
index 00000000..ba98074e
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/psi.sqlite-wal differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchMetadata.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchMetadata.plist
new file mode 100644
index 00000000..89aa2a1d
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchMetadata.plist
@@ -0,0 +1,186 @@
+
+
+
+
+ BlacklistedMeaningsByMeaning
+
+ 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-Shared-10.15.1.photoslibrary/database/search/searchProgress.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchProgress.plist
new file mode 100644
index 00000000..ad779080
--- /dev/null
+++ b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/database/search/searchSystemInfo.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchSystemInfo.plist
new file mode 100644
index 00000000..f6d69ef7
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/database/search/searchSystemInfo.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ embeddingVersion
+ 1
+ localeIdentifier
+ en_US
+ sceneTaxonomySHA
+ 87914a047c69fbe8013fad2c70fa70c6c03b08b56190fe4054c880e6b9f57cc3
+ searchIndexVersion
+ 10
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/synonymsProcess.plist b/tests/Test-Shared-10.15.1.photoslibrary/database/search/synonymsProcess.plist
new file mode 100644
index 00000000..79cdd085
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/synonymsProcess.plist differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/database/search/zeroKeywords.data b/tests/Test-Shared-10.15.1.photoslibrary/database/search/zeroKeywords.data
new file mode 100644
index 00000000..cb4f7e5e
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/database/search/zeroKeywords.data differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/originals/3/37210110-E940-4227-92D3-45C40F68EB0A.jpeg b/tests/Test-Shared-10.15.1.photoslibrary/originals/3/37210110-E940-4227-92D3-45C40F68EB0A.jpeg
new file mode 100644
index 00000000..ecaea3fa
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/originals/3/37210110-E940-4227-92D3-45C40F68EB0A.jpeg differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist
new file mode 100644
index 00000000..52cadb6b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.Photos/appPrivateData.plist
@@ -0,0 +1,38 @@
+
+
+
+
+ CollapsedSidebarSectionIdentifiers
+
+ ExpandedSidebarItemIdentifiers
+
+ PXSharedAlbumsVirtualCollection
+ 13A08E24-F8C0-458F-9D29-BDDCAE13BB00/L0/020
+
+ lastAddToDestination
+
+ YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
+ AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGuCwwZGhshJy40NTY6PkFVJG51
+ bGzWDQ4PEBESExQVFhcYXxAwSVBYTmF2aWdhdGlvbkRlc3RpbmF0aW9uQXV4aWxpYXJ5
+ U3RvcmVBcmNoaXZlS2V5XxAzSVBYTmF2aWdhdGlvbkRlc3RpbmF0aW9uUGFyZW50RGVz
+ dGluYXRpb25BcmNoaXZlS2V5XxBCSVBYTmF2aWdhdGlvbkRlc3RpbmF0aW9uUmVxdWly
+ ZWREZXN0aW5hdGlvbkF1eGlsaWFyeUtleXNBcmNoaXZlS2V5XxAnSVBYTmF2aWdhdGlv
+ bkRlc3RpbmF0aW9uVGl0bGVBcmNoaXZlS2V5XxAsSVBYTmF2aWdhdGlvbkRlc3RpbmF0
+ aW9uSWRlbnRpZmllckFyY2hpdmVLZXlWJGNsYXNzgASAAIALgAOAAoANXxAWY29tLmFw
+ cGxlLnBob3Rvcy5hbGJ1bVtQaG90byBTaG9vdNMcHRIeHyBfEDFVWEF1eGlsaWFyeU5h
+ dmlnYXRpb25TdG9yZU5hbWVzcGFjZURpY3RBcmNoaXZlS2V5XxAuVVhBdXhpbGlhcnlO
+ YXZpZ2F0aW9uU3RvcmVHbG9iYWxEaWN0QXJjaGl2ZUtleYAFgAeACtMiIxIkJSZXTlMu
+ a2V5c1pOUy5vYmplY3RzoKCABtIoKSorWiRjbGFzc25hbWVYJGNsYXNzZXNfEBNOU011
+ dGFibGVEaWN0aW9uYXJ5oyosLVxOU0RpY3Rpb25hcnlYTlNPYmplY3TTIiMSLzEmoTCA
+ CKEygAmABl8QHklQWFBob3Rvc09iamVjdExvY2FsSWRlbnRpZmllcl8QKzIwRjlGNzEy
+ LTQwMTMtNDFBOC1BMUYzLURERUIyRUYwRUI1NC9MMC8wNDDSKCk3OF8QG1VYRGVzdGlu
+ YXRpb25BdXhpbGlhcnlTdG9yZaI5LV8QG1VYRGVzdGluYXRpb25BdXhpbGlhcnlTdG9y
+ ZdIjEjs9oTCACIAM0igpP0BVTlNTZXSiPy3SKClCQ18QGElQWE5hdmlnYXRpb25EZXN0
+ aW5hdGlvbqJELV8QGElQWE5hdmlnYXRpb25EZXN0aW5hdGlvbgAIABEAGgAkACkAMgA3
+ AEkATABRAFMAYgBoAHUAqADeASMBTQF8AYMBhQGHAYkBiwGNAY8BqAG0AbsB7wIgAiIC
+ JAImAi0CNQJAAkECQgJEAkkCVAJdAnMCdwKEAo0ClAKWApgCmgKcAp4CvwLtAvIDEAMT
+ AzEDNgM4AzoDPANBA0cDSgNPA2oDbQAAAAAAAAIBAAAAAAAAAEUAAAAAAAAAAAAAAAAA
+ AAOI
+
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite
new file mode 100644
index 00000000..be8e07be
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite
new file mode 100644
index 00000000..97c1cefd
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite
new file mode 100644
index 00000000..f8797010
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm
new file mode 100644
index 00000000..fe9ac284
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite
new file mode 100644
index 00000000..8dcc1ff0
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite
new file mode 100644
index 00000000..6b413365
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm
new file mode 100644
index 00000000..f7d535bd
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal
new file mode 100644
index 00000000..6da6a679
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-wal differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite
new file mode 100644
index 00000000..a40d80b4
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite
new file mode 100644
index 00000000..b0964d3e
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm
new file mode 100644
index 00000000..e531ccdb
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal
new file mode 100644
index 00000000..2060f925
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..5dd5ecb4
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ BackgroundHighlightCollection
+ 2019-12-27T03:55:20Z
+ BackgroundHighlightEnrichment
+ 2019-12-27T03:55:20Z
+ BackgroundJobAssetRevGeocode
+ 2019-12-27T03:55:20Z
+ BackgroundJobSearch
+ 2019-12-27T03:55:20Z
+ BackgroundPeopleSuggestion
+ 2019-12-27T03:55:20Z
+ BackgroundUserBehaviorProcessor
+ 2019-12-27T03:55:21Z
+ PhotoAnalysisGraphLastBackgroundGraphConsistencyUpdateJobDateKey
+ 2019-12-27T03:55:23Z
+ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate
+ 2019-12-27T03:55:20Z
+ PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate
+ 2019-12-27T03:55:21Z
+ SiriPortraitDonation
+ 2019-12-27T03:55:21Z
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/construction-photosgraph.kgdb-wal b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/liveupdate-photosgraph.kgdb-wal b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph-tmp.kgdb-wal b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb
new file mode 100644
index 00000000..b82db64c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm b/tests/Test-Shared-10.15.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-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb-wal
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist
new file mode 100644
index 00000000..ee16a0ac
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
new file mode 100644
index 00000000..bf8f1e5d
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/revgeoprovider.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ revgeoprovider
+ 7618
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data
new file mode 100644
index 00000000..13f5d7fa
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/AlgoFaceClusterCache.data differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
new file mode 100644
index 00000000..798c98a5
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PersonPromoter
@@ -0,0 +1,12 @@
+
+
+
+
+ NumberOfFacesProcessedOnLastRun
+ 0
+ ProcessedInQuiescentState
+
+ Version
+ 4
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
new file mode 100644
index 00000000..151884ac
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ LastContactClassificationKey
+ 2019-12-27T03:55:22Z
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
new file mode 100644
index 00000000..cb4560b6
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/clustererState.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PVClustererBringUpState
+ 50
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
new file mode 100644
index 00000000..9fce1421
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ IncrementalPersonProcessingStage
+ 6
+ PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates
+ 15
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
new file mode 100644
index 00000000..2120d8ee
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ PLLibraryServicesManager.LocaleIdentifier
+ en_US
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/caches/CreateDatabase_20191226-195434-08:00 b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/caches/CreateDatabase_20191226-195434-08:00
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/caches/clientservertransaction/B390DA73-2903-4980-9BDE-0DC88EA1BC7C b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/caches/clientservertransaction/B390DA73-2903-4980-9BDE-0DC88EA1BC7C
new file mode 100644
index 00000000..5142c798
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/private/com.apple.photolibraryd/caches/clientservertransaction/B390DA73-2903-4980-9BDE-0DC88EA1BC7C differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/caches/sharedAssetsPrefetchCount.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/caches/sharedAssetsPrefetchCount.plist
new file mode 100644
index 00000000..b7fcbea2
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/caches/sharedAssetsPrefetchCount.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ date
+ 2019-12-27T04:12:36Z
+ derivativesCount
+ 2
+ thumbnailsCount
+ 0
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/35243F7D-88C4-4408-B516-C74406E90C15.JPG b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/35243F7D-88C4-4408-B516-C74406E90C15.JPG
new file mode 100644
index 00000000..72c33379
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/35243F7D-88C4-4408-B516-C74406E90C15.JPG differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/9D671650-B2FD-4760-84CA-FD25AF622C63.JPG b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/9D671650-B2FD-4760-84CA-FD25AF622C63.JPG
new file mode 100644
index 00000000..0335ac8f
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/9D671650-B2FD-4760-84CA-FD25AF622C63.JPG differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/Info.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/Info.plist
new file mode 100644
index 00000000..dfe38fc7
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/17058154511/9F9A2608-AFE0-4232-A0DC-5ABA7317B978/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ cloudOwnerEmail
+ rhettbull@mac.com
+ cloudOwnerFirstName
+ Rhet
+ cloudOwnerHashedPersonID
+ 01cac7cde8a8767251a2cdd183b8ed490fc6e87825f4a495389e824a41a01ba7
+ cloudOwnerLastName
+ Turnbull
+ cloudPublicURLEnabled
+ 0
+ cloudRelationshipState
+ 2
+ cloudSubscriptionDate
+ 2019-12-27T04:16:49Z
+ title
+ osxphotos
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedEmails.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedEmails.plist
new file mode 100644
index 00000000..103e9cdd
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedEmails.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ rhettbull@mac.com
+ 2
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedPersonInfos.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedPersonInfos.plist
new file mode 100644
index 00000000..53b07de4
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/cloudSharedPersonInfos.plist
@@ -0,0 +1,35 @@
+
+
+
+
+ 01cac7cde8a8767251a2cdd183b8ed490fc6e87825f4a495389e824a41a01ba7
+
+ email
+ rhettbull@mac.com
+ firstName
+ Rhet
+ fullName
+ Rhet Turnbull
+ lastName
+ Turnbull
+
+ 20d4816ae2cf97606e685eaa167b6aa863ddd258bc33ff84ebb40140cab74622
+
+ email
+ rturnbull2@gmail.com
+ firstName
+ Wallace
+ fullName
+ Wallace Rutherford
+ lastName
+ Rutherford
+
+ 2221EED2-5C25-4BAF-95C0-9B4F08BC1F98
+
+ emails
+
+ rturnbull2@gmail.com
+
+
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/personID b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/personID
new file mode 100644
index 00000000..a91b827b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/personID
@@ -0,0 +1 @@
+17058154511
\ No newline at end of file
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/serverconfiguration b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/serverconfiguration
new file mode 100644
index 00000000..e9cd740d
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/data/serverconfiguration
@@ -0,0 +1,107 @@
+
+
+
+
+ com.apple.sharedstreams.config.configVersion
+ 1.8
+ com.apple.sharedstreams.config.defaultRetryAfterInSeconds
+
+ com.apple.sharedstreams.config.dimensions.invites
+ 308:399:547:308:399:547:152:197:270:152:197:270:100:130:178:100:130:178
+ com.apple.sharedstreams.config.dimensions.preview
+ 1536:2048:5400
+ com.apple.sharedstreams.config.dimensions.thumbnail
+ 256:332:455
+ com.apple.sharedstreams.config.dimensions.videoposterframe
+ 1280:720
+ com.apple.sharedstreams.config.maxActiveTimeAfterGlobalResetSync
+ 600
+ com.apple.sharedstreams.config.maxActiveTimeAfterLossOfForeground
+ 120
+ com.apple.sharedstreams.config.maxActiveTimeAfterPush
+ 60
+ com.apple.sharedstreams.config.maxMMCSTokenValidity
+ 1200
+ com.apple.sharedstreams.config.maxNumDerivativesToDownloadPerPush
+ 15
+ com.apple.sharedstreams.config.maxNumDerivativesToPrefetchPerDay
+ 50
+ com.apple.sharedstreams.config.maxNumInvites.daily
+ 200
+ com.apple.sharedstreams.config.maxNumPhotosToSendInShareAction
+ 1
+ com.apple.sharedstreams.config.maxNumPhotosToShare.daily
+ 10000
+ com.apple.sharedstreams.config.maxNumPhotosToShare.hourly
+ 1000
+ com.apple.sharedstreams.config.maxNumRetriesOnFailure.content
+ 5
+ com.apple.sharedstreams.config.maxNumRetriesOnFailure.network
+ 10
+ com.apple.sharedstreams.config.maxNumRetriesOnFailure.server
+ 5
+ com.apple.sharedstreams.config.maxUploadAssetBatchSize
+ 5
+ com.apple.sharedstreams.config.maxVideoDurationInSeconds
+ 900
+ com.apple.sharedstreams.config.maxnum.charactersPerComment
+ 1024
+ com.apple.sharedstreams.config.maxnum.commentsPerPhoto
+ 200
+ com.apple.sharedstreams.config.maxnum.ownedAlbums
+ 200
+ com.apple.sharedstreams.config.maxnum.photosPerAlbum
+ 5000
+ com.apple.sharedstreams.config.maxnum.subscribedAlbums
+ 200
+ com.apple.sharedstreams.config.maxnum.subscribersPerAlbum
+ 100
+ com.apple.sharedstreams.config.maxpixels.preview
+ 3145728
+ com.apple.sharedstreams.config.maxpixels.thumbnail
+ 172800
+ com.apple.sharedstreams.config.prevVersion
+ 1.7
+ com.apple.sharedstreams.config.switch.3G
+ 1
+ com.apple.sharedstreams.config.switch.comments
+ 1
+ com.apple.sharedstreams.config.videoderivatives
+
+
+ bitRate
+ 0.84
+ cellular
+ 1
+ powerRequired
+ 0
+ videoType
+ PosterFrame
+
+
+ bitRate
+ 2.8
+ cellular
+ 1
+ powerRequired
+ 1
+ videoType
+ 720p
+
+
+ bitRate
+ 0.84
+ cellular
+ 1
+ powerRequired
+ 0
+ videoType
+ 360p
+
+
+ mme.basephotos.config.defaultRetryAfterInSeconds
+ 60
+ mme.sharedstreams.client.downloadMMCSBatchSize
+ 6
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/3/35243F7D-88C4-4408-B516-C74406E90C15_4_5005_c.jpeg b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/3/35243F7D-88C4-4408-B516-C74406E90C15_4_5005_c.jpeg
new file mode 100644
index 00000000..6bfc8b6c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/3/35243F7D-88C4-4408-B516-C74406E90C15_4_5005_c.jpeg differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/9/9D671650-B2FD-4760-84CA-FD25AF622C63_4_5005_c.jpeg b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/9/9D671650-B2FD-4760-84CA-FD25AF622C63_4_5005_c.jpeg
new file mode 100644
index 00000000..72492f39
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cloudsharing/resources/derivatives/masters/9/9D671650-B2FD-4760-84CA-FD25AF622C63_4_5005_c.jpeg differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/DownloadCounts.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/DownloadCounts.plist
new file mode 100644
index 00000000..b888e18d
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/DownloadCounts.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ CountKeyImages
+ 1
+ CountKeyVideos
+ 0
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cloudphotos-1.0.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cloudphotos-1.0.plist
new file mode 100644
index 00000000..64edd68b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cloudphotos-1.0.plist
@@ -0,0 +1,82 @@
+
+
+
+
+ configuration
+
+ client.request.throttle
+
+ forget-after
+ 3600
+ give-up-after
+ 1800
+ start-after
+ 2
+ wait-at-least
+ 2
+ wait-at-most
+ 60
+
+ max.days.inRecentlyDeleted
+ 30
+ max.num.photosToImport.daily
+ 50000
+ max.num.photosToImport.hourly
+ 5000
+ max.num.recordsToUploadPerBatch
+ 200
+ max.num.resourcesToDownloadPerPush
+ 30
+ max.num.resourcesToUploadPerBatch
+ 8
+ photo.derivatives
+
+
+ pixels
+ 172800
+ type
+ thumbnail
+
+
+ pixels
+ 3145728
+ type
+ preview
+
+
+ pixels
+ 8388608
+ type
+ fullSize
+
+
+ refresh.interval.seconds
+ 7200
+ video.derivatives
+
+
+ pixels
+ 921600
+ type
+ PosterFrame
+
+
+ pixels
+ 230400
+ type
+ PosterFrameThumbnail
+
+
+ type
+ 720p
+
+
+ type
+ 360p
+
+
+
+ lastUpdate
+ 2019-12-27T04:12:27Z
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_download_finished_marker b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_download_finished_marker
new file mode 100644
index 00000000..69d3f508
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_download_finished_marker
@@ -0,0 +1 @@
+2019-12-26 20.15.43.474
\ No newline at end of file
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_enabled_marker b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_enabled_marker
new file mode 100644
index 00000000..e3b8bff4
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/cpl_enabled_marker
@@ -0,0 +1 @@
+2019-12-26 20.12.30.797
\ No newline at end of file
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/initialsync_marker b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/initialsync_marker
new file mode 100644
index 00000000..77eff276
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/initialsync_marker
@@ -0,0 +1 @@
+2019-12-26 20.15.43.424
\ No newline at end of file
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/mobileCPL.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/mobileCPL.plist
new file mode 100644
index 00000000..8f08fcb1
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/mobileCPL.plist
@@ -0,0 +1,23 @@
+
+
+
+
+ cloudVersion
+ 16B1936C-248E-480A-BD75-6406D987F9C6
+ localVersionToken
+
+ YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
+ AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGnCwwRGRobIVUkbnVsbNINDg8Q
+ ViRjbGFzc18QIk5TUGVyc2lzdGVudEhpc3RvcnlUb2tlbkRpY3Rpb25hcnmABoAC0xIT
+ DRQWGFdOUy5rZXlzWk5TLm9iamVjdHOhFYADoReABIAFXxAkODcyRUIyNjItMEE3Mi00
+ NkRGLThCQUUtRUI0MDMxQTMwNkRBEDvSHB0eH1okY2xhc3NuYW1lWCRjbGFzc2VzXE5T
+ RGljdGlvbmFyeaIeIFhOU09iamVjdNIcHSIjXxAZX05TUGVyc2lzdGVudEhpc3RvcnlU
+ b2tlbqMkJSBfEBlfTlNQZXJzaXN0ZW50SGlzdG9yeVRva2VuXxAYTlNQZXJzaXN0ZW50
+ SGlzdG9yeVRva2VuAAgAEQAaACQAKQAyADcASQBMAFEAUwBbAGEAZgBtAJIAlACWAJ0A
+ pQCwALIAtAC2ALgAugDhAOMA6ADzAPwBCQEMARUBGgE2AToBVgAAAAAAAAIBAAAAAAAA
+ ACYAAAAAAAAAAAAAAAAAAAFx
+
+ storeUUID
+ 872EB262-0A72-46DF-8BAE-EB4031A306DA
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb
new file mode 100644
index 00000000..4ab71e6c
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-shm b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-shm
new file mode 100644
index 00000000..bc00aaa9
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-shm differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-wal b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-wal
new file mode 100644
index 00000000..bad4ee76
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/storage/store.cloudphotodb-wal differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/syncstatus.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/syncstatus.plist
new file mode 100644
index 00000000..e124d870
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/cpl/cloudsync.noindex/syncstatus.plist
@@ -0,0 +1,37 @@
+
+
+
+
+ accountFlags
+
+ CAEQABgB
+
+ cloudAssetCountPerType
+
+ public.image
+ 1
+ public.movie
+ 0
+
+ cloudAssetCountPerTypeLastCheckDate
+ 2019-12-27T04:14:42Z
+ constrainedNetwork
+
+ hasBatteryBudgetKey
+
+ hasCellularBudgetKey
+
+ hasChangesToProcess
+
+ hasValidSystemBudgetKey
+
+ iCloudLibraryExists
+
+ initialSyncDate
+ 2019-12-27T04:15:43Z
+ lastCompletePrefetchDate
+ 2019-12-27T04:15:43Z
+ lastSyncDate
+ 2019-12-27T04:16:48Z
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/3/37210110-E940-4227-92D3-45C40F68EB0A_1_105_c.jpeg b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/3/37210110-E940-4227-92D3-45C40F68EB0A_1_105_c.jpeg
new file mode 100644
index 00000000..22551bc9
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/3/37210110-E940-4227-92D3-45C40F68EB0A_1_105_c.jpeg differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/masters/3/37210110-E940-4227-92D3-45C40F68EB0A_4_5005_c.jpeg b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/masters/3/37210110-E940-4227-92D3-45C40F68EB0A_4_5005_c.jpeg
new file mode 100644
index 00000000..aa8aa8cb
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/masters/3/37210110-E940-4227-92D3-45C40F68EB0A_4_5005_c.jpeg differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb
new file mode 100644
index 00000000..bb173c19
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/3305.ithmb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb
new file mode 100644
index 00000000..fc5f9945
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4031.ithmb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb
new file mode 100644
index 00000000..b244a6f1
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/4132.ithmb differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
new file mode 100644
index 00000000..8c122be1
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration
@@ -0,0 +1,10 @@
+
+
+
+
+ PLThumbnailManagerThumbnailFormatKey
+ 5005
+ PLThumbnailManagerVersionKey
+ 28
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album-change.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album-change.plj
new file mode 100644
index 00000000..34a7e04d
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album-change.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Album.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset-change.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset-change.plj
new file mode 100644
index 00000000..12096764
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset-change.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset.plist
new file mode 100644
index 00000000..77906f87
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Asset.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 10
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 10
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DeferredRebuildFace.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DeferredRebuildFace.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DeferredRebuildFace.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DetectedFace-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DetectedFace-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DetectedFace.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DetectedFace.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/DetectedFace.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FetchingAlbum.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FetchingAlbum.plist
new file mode 100644
index 00000000..f2153f26
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FetchingAlbum.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 2
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 2
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FileSystemVolume.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FileSystemVolume.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/FileSystemVolume.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-change.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-change.plj
new file mode 100644
index 00000000..007637ab
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-change.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-snapshot.plj
new file mode 100644
index 00000000..2c8c0eb6
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder-snapshot.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Folder.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/HistoryToken.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/HistoryToken.plist
new file mode 100644
index 00000000..53243313
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/HistoryToken.plist differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession-change.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession-change.plj
new file mode 100644
index 00000000..111738f6
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession-change.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ImportSession.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword-change.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword-change.plj
new file mode 100644
index 00000000..504d202e
Binary files /dev/null and b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword-change.plj differ
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Keyword.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Memory-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Memory-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Memory.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Memory.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Memory.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Person-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Person-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Person.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Person.plist
new file mode 100644
index 00000000..14c9281b
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/Person.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:36Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ProjectAlbum.plist b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ProjectAlbum.plist
new file mode 100644
index 00000000..86586082
--- /dev/null
+++ b/tests/Test-Shared-10.15.1.photoslibrary/resources/journals/ProjectAlbum.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ currentPayloadVersion
+ 1
+ snapshotDate
+ 2019-12-27T03:54:35Z
+ snapshotPayloadVersion
+ 1
+
+
diff --git a/tests/test_shared_catalina_10_15_1.py b/tests/test_shared_catalina_10_15_1.py
new file mode 100644
index 00000000..0e1ba9de
--- /dev/null
+++ b/tests/test_shared_catalina_10_15_1.py
@@ -0,0 +1,107 @@
+import pytest
+
+
+# TODO: put some of this code into a pre-function
+
+PHOTOS_DB = "./tests/Test-Shared-10.15.1.photoslibrary/database/photos.db"
+PHOTOS_DB_PATH = "/Test-Shared-10.15.1.photoslibrary/database/Photos.sqlite"
+PHOTOS_LIBRARY_PATH = "/Test-Shared-10.15.1.photoslibrary"
+
+KEYWORDS = ["portrait"]
+# Photos 5 includes blank person for detected face
+PERSONS = []
+ALBUMS = ["Photo Shoot"]
+ALBUMS_SHARED = ["osxphotos"]
+
+UUID_DICT = {
+ "missing": "9D671650-B2FD-4760-84CA-FD25AF622C63",
+ "notmissing": "35243F7D-88C4-4408-B516-C74406E90C15",
+}
+
+UUID_SHARED = [
+ "9D671650-B2FD-4760-84CA-FD25AF622C63",
+ "35243F7D-88C4-4408-B516-C74406E90C15",
+]
+
+UUID_NOT_SHARED = ["37210110-E940-4227-92D3-45C40F68EB0A"]
+
+
+def test_albums():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums = photosdb.albums
+
+ assert len(albums) == 1
+ assert albums[0] == ALBUMS[0]
+
+
+def test_albums_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_shared = photosdb.albums_shared
+
+ assert len(albums_shared) == 1
+ assert albums_shared[0] == ALBUMS_SHARED[0]
+
+
+def test_albums_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_as_dict = photosdb.albums_as_dict
+
+ assert len(albums_as_dict) == 1
+ assert albums_as_dict[ALBUMS[0]] == 1
+
+
+def test_albums_shared_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_shared_as_dict = photosdb.albums_shared_as_dict
+
+ assert len(albums_shared_as_dict) == 1
+ assert albums_shared_as_dict[ALBUMS_SHARED[0]] == 2
+
+
+def test_missing_share():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = [p for p in photosdb.photos() if p.ismissing]
+
+ assert len(photos) == 1
+ assert photos[0].uuid == UUID_DICT["missing"]
+
+
+def test_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = [p for p in photosdb.photos() if p.shared]
+ assert len(photos) == len(UUID_SHARED)
+ for p in photos:
+ assert p.uuid in UUID_SHARED
+
+
+def test_not_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = [p for p in photosdb.photos() if not p.shared]
+ assert len(photos) == 1
+ for p in photos:
+ assert p.uuid in UUID_NOT_SHARED
+
+
+def test_query_shared_album():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(albums=[ALBUMS_SHARED[0]])
+
+ assert len(photos) == len(UUID_SHARED)
+ for p in photos:
+ assert p.uuid in UUID_SHARED
diff --git a/tests/test_shared_mojave_10_14_6.py b/tests/test_shared_mojave_10_14_6.py
new file mode 100644
index 00000000..645ae864
--- /dev/null
+++ b/tests/test_shared_mojave_10_14_6.py
@@ -0,0 +1,68 @@
+import pytest
+
+
+# TODO: put some of this code into a pre-function
+
+PHOTOS_DB = "./tests/Test-10.14.6.photoslibrary/database/photos.db"
+PHOTOS_DB_PATH = "/Test-10.14.6.photoslibrary/database/Photos.sqlite"
+PHOTOS_LIBRARY_PATH = "/Test-10.14.6.photoslibrary"
+
+ALBUMS = ["Pumpkin Farm", "Test Album", "Test Album (1)"]
+ALBUM_DICT = {"Pumpkin Farm": 3, "Test Album": 1, "Test Album (1)": 1}
+
+
+def test_albums():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums = photosdb.albums
+
+ assert len(albums) == len(ALBUMS)
+ for album in albums:
+ assert album in ALBUMS
+
+
+def test_albums_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_shared = photosdb.albums_shared
+
+ assert len(albums_shared) == 0
+
+
+def test_albums_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_as_dict = photosdb.albums_as_dict
+
+ for album in albums_as_dict:
+ assert album in ALBUM_DICT
+ assert albums_as_dict[album] == ALBUM_DICT[album]
+
+
+def test_albums_shared_as_dict():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ albums_shared_as_dict = photosdb.albums_shared_as_dict
+
+ assert albums_shared_as_dict == {}
+
+
+def test_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = [p for p in photosdb.photos() if p.shared]
+ assert len(photos) == 0
+
+
+def test_not_shared():
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = [p for p in photosdb.photos() if not p.shared]
+ assert len(photos) == 7
+