@@ -53,6 +53,28 @@ def _get_scix_id(rec):
5353 return getattr (rec , "scix_id" , None )
5454
5555
56+ def _get_publication_year (rec ):
57+ """
58+ Works whether rec is a dict (bulk mappings) or an ORM object.
59+ """
60+ if rec is None :
61+ return None
62+ if isinstance (rec , dict ):
63+ return rec .get ("publication_year" )
64+ return getattr (rec , "publication_year" , None )
65+
66+
67+ def _get_refereed_status (rec ):
68+ """
69+ Works whether rec is a dict (bulk mappings) or an ORM object.
70+ """
71+ if rec is None :
72+ return None
73+ if isinstance (rec , dict ):
74+ return rec .get ("refereed_status" )
75+ return getattr (rec , "refereed_status" , None )
76+
77+
5678def _make_session_scope_cm (session ):
5779 """
5880 Return a context manager mock that behaves like app.session_scope()
@@ -717,6 +739,8 @@ def test_populate_tables_post_resolved_with_classic(self):
717739 'score' : 1.0 ,
718740 'external_identifier' : ['doi:10.1234/abc' , 'arxiv:2301.00001' ],
719741 'scix_id' : 'scix:ABCD-1234-ref1' ,
742+ 'publication_year' : 2023 ,
743+ 'refereed_status' : 1 ,
720744 },
721745 {
722746 'id' : 'H1I2' ,
@@ -725,6 +749,8 @@ def test_populate_tables_post_resolved_with_classic(self):
725749 'score' : 0.8 ,
726750 'external_identifier' : ['ascl:2301.001' , 'doi:10.9999/xyz' ],
727751 'scix_id' : 'scix:ABCD-1234-ref2' ,
752+ 'publication_year' : 2021 ,
753+ 'refereed_status' : 0 ,
728754 }
729755 ]
730756
@@ -756,6 +782,10 @@ def test_populate_tables_post_resolved_with_classic(self):
756782
757783 self .assertEqual (_get_scix_id (resolved_records [0 ]), 'scix:ABCD-1234-ref1' )
758784 self .assertEqual (_get_scix_id (resolved_records [1 ]), 'scix:ABCD-1234-ref2' )
785+ self .assertEqual (_get_publication_year (resolved_records [0 ]), 2023 )
786+ self .assertEqual (_get_publication_year (resolved_records [1 ]), 2021 )
787+ self .assertEqual (_get_refereed_status (resolved_records [0 ]), 1 )
788+ self .assertEqual (_get_refereed_status (resolved_records [1 ]), 0 )
759789
760790 @patch ("adsrefpipe.app.ProcessedHistory" )
761791 @patch ("adsrefpipe.app.ResolvedReference" )
@@ -1058,13 +1088,17 @@ def test_resolved_reference_toJSON_includes_scix_id(self):
10581088 reference_raw = "Some ref raw" ,
10591089 external_identifier = ["doi:10.1234/xyz" ],
10601090 scix_id = "scix:ABCD-1234-0004" ,
1091+ publication_year = 2020 ,
1092+ refereed_status = 1 ,
10611093 )
10621094 got = rr .toJSON ()
10631095 self .assertEqual (got ["history_id" ], 123 )
10641096 self .assertEqual (got ["item_num" ], 1 )
10651097 self .assertEqual (got ["bibcode" ], "2020A&A...000A...1X" )
10661098 self .assertEqual (got ["external_identifier" ], ["doi:10.1234/xyz" ])
10671099 self .assertEqual (got ["scix_id" ], "scix:ABCD-1234-0004" )
1100+ self .assertEqual (got ["publication_year" ], 2020 )
1101+ self .assertEqual (got ["refereed_status" ], 1 )
10681102
10691103 def test_resolved_reference_toJSON_omits_scix_id_when_none (self ):
10701104 """Test ResolvedReference.toJSON omits scix_id when not set"""
@@ -1077,9 +1111,13 @@ def test_resolved_reference_toJSON_omits_scix_id_when_none(self):
10771111 reference_raw = "Some ref raw" ,
10781112 external_identifier = ["doi:10.1234/xyz" ],
10791113 scix_id = None ,
1114+ publication_year = None ,
1115+ refereed_status = 0 ,
10801116 )
10811117 got = rr .toJSON ()
10821118 self .assertTrue ("scix_id" not in got )
1119+ self .assertTrue ("publication_year" not in got )
1120+ self .assertEqual (got ["refereed_status" ], 0 )
10831121
10841122
10851123class TestDatabaseNoStubdata (unittest .TestCase ):
@@ -1126,6 +1164,31 @@ def test_app(self):
11261164 assert self .app ._config .get ('SQLALCHEMY_URL' ) == 'postgresql://mock/mock'
11271165 assert self .app .conf .get ('SQLALCHEMY_URL' ) == 'postgresql://mock/mock'
11281166
1167+ def test_update_resolved_reference_records_includes_new_columns (self ):
1168+ """Verify bulk update payload includes publication_year and refereed_status."""
1169+ rr = ResolvedReference (
1170+ history_id = 1 ,
1171+ item_num = 2 ,
1172+ reference_str = "Some reference" ,
1173+ bibcode = "2023A&A...657A...1X" ,
1174+ score = 1.0 ,
1175+ reference_raw = "Some reference" ,
1176+ external_identifier = ["doi:10.1234/example" ],
1177+ scix_id = "scix:ABCD-1234-9999" ,
1178+ publication_year = 2023 ,
1179+ refereed_status = 1 ,
1180+ )
1181+
1182+ result = self .app .update_resolved_reference_records (self .mock_session , [rr ])
1183+ self .assertTrue (result )
1184+
1185+ self .mock_session .bulk_update_mappings .assert_called_once ()
1186+ called_model , called_mappings = self .mock_session .bulk_update_mappings .call_args [0 ]
1187+ self .assertIs (called_model , ResolvedReference )
1188+ self .assertEqual (len (called_mappings ), 1 )
1189+ self .assertEqual (called_mappings [0 ]["publication_year" ], 2023 )
1190+ self .assertEqual (called_mappings [0 ]["refereed_status" ], 1 )
1191+
11291192 def test_query_reference_tbl_when_empty (self ):
11301193 """ verify reference_source table being empty """
11311194 self .app .diagnostic_query = MagicMock (return_value = [])
@@ -1164,6 +1227,8 @@ def test_populate_tables(self):
11641227 "id" : "H1I1" ,
11651228 "external_identifier" : ["arxiv:1009.5514" , "doi:10.1234/abc" ],
11661229 "scix_id" : "scix:ABCD-1234-0005" ,
1230+ "publication_year" : 2011 ,
1231+ "refereed_status" : 1 ,
11671232 },
11681233 {
11691234 "score" : "1.0" ,
@@ -1173,6 +1238,8 @@ def test_populate_tables(self):
11731238 "id" : "H1I2" ,
11741239 "external_identifier" : ["arxiv:1709.02923" , "ascl:2301.001" ],
11751240 "scix_id" : "scix:ABCD-1234-0006" ,
1241+ "publication_year" : 2017 ,
1242+ "refereed_status" : 0 ,
11761243 }
11771244 ]
11781245
@@ -1221,6 +1288,10 @@ def test_populate_tables(self):
12211288 self .assertEqual (got [1 ]["external_identifier" ], ["arxiv:1709.02923" , "ascl:2301.001" ])
12221289 self .assertEqual (got [0 ]["scix_id" ], "scix:ABCD-1234-0005" )
12231290 self .assertEqual (got [1 ]["scix_id" ], "scix:ABCD-1234-0006" )
1291+ self .assertEqual (got [0 ]["publication_year" ], 2011 )
1292+ self .assertEqual (got [1 ]["publication_year" ], 2017 )
1293+ self .assertEqual (got [0 ]["refereed_status" ], 1 )
1294+ self .assertEqual (got [1 ]["refereed_status" ], 0 )
12241295
12251296 def test_get_parser_error (self ):
12261297 """ test get_parser when it errors for unrecognized source filename """
@@ -1242,4 +1313,3 @@ def _fake_get_parser(path):
12421313
12431314if __name__ == '__main__' :
12441315 unittest .main ()
1245-
0 commit comments