import unittest from import_display_metadata import build_rows, update_sql class MetadataTests(unittest.TestCase): def test_missing_inventory_uses_only_local_filename_not_server_path(self): rows = build_rows({'results': [{'url': 'https://example.invalid/a', 'source_ids': ['99'], 'local_path': '/private/files/说明.pdf'}]}, {'items': []}) self.assertEqual(rows[0]['title'], '说明.pdf') self.assertEqual(rows[0]['directory'], '') self.assertNotIn('/private', str(rows)) def test_matches_only_manifest_source_ids_and_uses_real_category(self): manifest = {'results': [{'url': 'https://example.invalid/a', 'source_ids': ['1'], 'local_path': '/private/files/a.pdf'}]} inventory = {'items': [{'id': '1', 'fileName': '机器人手册', 'potalCategory': {'category': '用户手册'}}, {'id': '2', 'fileName': '未授权文档'}]} rows = build_rows(manifest, inventory) self.assertEqual(len(rows), 1) self.assertEqual(rows[0]['title'], '机器人手册') self.assertEqual(rows[0]['directory'], '用户手册') self.assertNotIn('/private', str(rows)) self.assertNotIn('https://', str(rows)) def test_ambiguous_categories_are_not_invented(self): rows = build_rows({'results': [{'url': 'https://example.invalid/a', 'source_ids': ['1','2']}]}, {'items': [ {'id': '1', 'fileName': 'A', 'potalCategory': {'category': '甲'}}, {'id': '2', 'fileName': 'A', 'potalCategory': {'category': '乙'}}]}) self.assertEqual(rows[0]['directory'], '') def test_sql_is_scoped_and_never_touches_publications_or_visibility(self): sql = update_sql([{'hash': 'a'*64, 'title': "a'b", 'directory': '公开'}]) self.assertIn("source_type = 'pp'", sql) self.assertIn("i.title = ''", sql) self.assertIn('ROLLBACK', sql) self.assertNotIn('UPDATE test_publications', sql) self.assertNotIn('SET visibility', sql) self.assertNotIn('DELETE', sql) if __name__ == '__main__': unittest.main()