2727from unittest .mock import patch
2828
2929from gramps .cli .clidbman import CLIDbManager
30+ from gramps .gen .const import GRAMPS_LOCALE as glocale
3031from gramps .gen .dbstate import DbState
3132
3233from gramps_webapi .app import create_app
3839)
3940from gramps_webapi .const import ENV_CONFIG_FILE , TEST_AUTH_CONFIG
4041
42+ _ = glocale .translation .gettext
43+
4144
4245def get_headers (client , user : str , password : str ) -> Dict [str , str ]:
4346 """Get the auth headers for a specific user."""
@@ -125,7 +128,12 @@ def test_objects_add_person(self):
125128 "handle" : handle_person ,
126129 "primary_name" : {
127130 "_class" : "Name" ,
128- "surname_list" : [{"_class" : "Surname" , "surname" : "Doe" ,}],
131+ "surname_list" : [
132+ {
133+ "_class" : "Surname" ,
134+ "surname" : "Doe" ,
135+ }
136+ ],
129137 "first_name" : "John" ,
130138 },
131139 "event_ref_list" : [
@@ -141,7 +149,10 @@ def test_objects_add_person(self):
141149 birth = {
142150 "_class" : "Event" ,
143151 "handle" : handle_birth ,
144- "date" : {"_class" : "Date" , "dateval" : [2 , 10 , 1764 , False ],},
152+ "date" : {
153+ "_class" : "Date" ,
154+ "dateval" : [2 , 10 , 1764 , False ],
155+ },
145156 "type" : {"_class" : "EventType" , "string" : "Birth" },
146157 }
147158 objects = [person , birth ]
@@ -167,6 +178,82 @@ def test_objects_add_person(self):
167178 [2 , 10 , 1764 , False ],
168179 )
169180
181+ def test_objects_add_person_seperate (self ):
182+ """Add a person, then a birth event, check birth ref index."""
183+ handle_person = make_handle ()
184+ handle_birth = make_handle ()
185+ person = {
186+ "_class" : "Person" ,
187+ "handle" : handle_person ,
188+ "primary_name" : {
189+ "_class" : "Name" ,
190+ "surname_list" : [
191+ {
192+ "_class" : "Surname" ,
193+ "surname" : "Doe" ,
194+ }
195+ ],
196+ "first_name" : "John" ,
197+ },
198+ # "event_ref_list": [
199+ # {
200+ # "_class": "EventRef",
201+ # "ref": handle_birth,
202+ # "role": {"_class": "EventRoleType", "string": "Primary"},
203+ # },
204+ # ],
205+ # "birth_ref_index": 0,
206+ "gender" : 1 ,
207+ }
208+ birth = {
209+ "_class" : "Event" ,
210+ "handle" : handle_birth ,
211+ "date" : {
212+ "_class" : "Date" ,
213+ "dateval" : [2 , 10 , 1764 , False ],
214+ },
215+ "type" : {"_class" : "EventType" , "string" : _ ("Birth" )},
216+ }
217+ person_birth = {
218+ "_class" : "Person" ,
219+ "handle" : handle_person ,
220+ "primary_name" : {
221+ "_class" : "Name" ,
222+ "surname_list" : [
223+ {
224+ "_class" : "Surname" ,
225+ "surname" : "Doe" ,
226+ }
227+ ],
228+ "first_name" : "John" ,
229+ },
230+ "event_ref_list" : [
231+ {
232+ "_class" : "EventRef" ,
233+ "ref" : handle_birth ,
234+ "role" : {"_class" : "EventRoleType" , "string" : _ ("Primary" )},
235+ },
236+ ],
237+ "gender" : 1 ,
238+ }
239+ headers = get_headers (self .client , "admin" , "123" )
240+ rv = self .client .post ("/api/people/" , json = person , headers = headers )
241+ self .assertEqual (rv .status_code , 201 )
242+ rv = self .client .post ("/api/events/" , json = birth , headers = headers )
243+ self .assertEqual (rv .status_code , 201 )
244+ rv = self .client .get (f"/api/people/{ handle_person } " , headers = headers )
245+ self .assertEqual (rv .status_code , 200 )
246+ person_dict = rv .json
247+ self .assertEqual (person_dict ["birth_ref_index" ], - 1 )
248+ rv = self .client .put (
249+ f"/api/people/{ handle_person } " , json = person_birth , headers = headers
250+ )
251+ self .assertEqual (rv .status_code , 200 )
252+ rv = self .client .get (f"/api/people/{ handle_person } " , headers = headers )
253+ self .assertEqual (rv .status_code , 200 )
254+ person_dict = rv .json
255+ self .assertEqual (person_dict ["birth_ref_index" ], 0 )
256+
170257 def test_objects_add_family (self ):
171258 """Add three people and then create a new family."""
172259 handle_father = make_handle ()
@@ -275,7 +362,12 @@ def test_objects_errors(self):
275362 "handle" : handle_person ,
276363 "primary_name" : {
277364 "_class" : "Name" ,
278- "surname_list" : [{"_class" : "Surname" , "surname" : "Doe" ,}],
365+ "surname_list" : [
366+ {
367+ "_class" : "Surname" ,
368+ "surname" : "Doe" ,
369+ }
370+ ],
279371 "first_name" : "John" ,
280372 },
281373 "event_ref_list" : [
@@ -291,7 +383,10 @@ def test_objects_errors(self):
291383 birth = {
292384 "_class" : "Event" ,
293385 "handle" : handle_birth ,
294- "date" : {"_class" : "Date" , "dateval" : [2 , 10 , 1764 , False ],},
386+ "date" : {
387+ "_class" : "Date" ,
388+ "dateval" : [2 , 10 , 1764 , False ],
389+ },
295390 "type" : {"_class" : "EventType" , "string" : "Birth" },
296391 }
297392 # erroneously use string as date
@@ -314,7 +409,12 @@ def test_people_add_person(self):
314409 "handle" : handle_person ,
315410 "primary_name" : {
316411 "_class" : "Name" ,
317- "surname_list" : [{"_class" : "Surname" , "surname" : "Doe" ,}],
412+ "surname_list" : [
413+ {
414+ "_class" : "Surname" ,
415+ "surname" : "Doe" ,
416+ }
417+ ],
318418 "first_name" : "John" ,
319419 },
320420 "gender" : 1 ,
@@ -432,7 +532,12 @@ def test_search_add_person(self):
432532 "handle" : handle_person ,
433533 "primary_name" : {
434534 "_class" : "Name" ,
435- "surname_list" : [{"_class" : "Surname" , "surname" : "Doe" ,}],
535+ "surname_list" : [
536+ {
537+ "_class" : "Surname" ,
538+ "surname" : "Doe" ,
539+ }
540+ ],
436541 "first_name" : "John" ,
437542 },
438543 "event_ref_list" : [
@@ -448,7 +553,10 @@ def test_search_add_person(self):
448553 birth = {
449554 "_class" : "Event" ,
450555 "handle" : handle_birth ,
451- "date" : {"_class" : "Date" , "dateval" : [2 , 10 , 1764 , False ],},
556+ "date" : {
557+ "_class" : "Date" ,
558+ "dateval" : [2 , 10 , 1764 , False ],
559+ },
452560 "type" : {"_class" : "EventType" , "string" : "Birth" },
453561 }
454562 objects = [person , birth ]
@@ -482,7 +590,11 @@ def test_search_locked(self):
482590 with indexer .index (overwrite = False ).writer () as writer :
483591 for _ in range (10 ):
484592 # write 10 objects while index is locked
485- rv = self .client .post ("/api/notes/" , json = content , headers = headers ,)
593+ rv = self .client .post (
594+ "/api/notes/" ,
595+ json = content ,
596+ headers = headers ,
597+ )
486598 self .assertEqual (rv .status_code , 201 )
487599 sleep (2 ) # give the async writer time to flush
488600 rv = self .client .get (f"/api/search/?query={ label } " , headers = headers )
0 commit comments