test: 修复全量测试套件 — 1004 passed,消除注册限速 429 等故障
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s

全部 auth 类 fixture 从 HTTP register 改为 DB 直接创建,绕过 6次/小时 IP 限速
(conftest、test_literature、test_subscriptions、test_verification、test_auth、
 test_approvals、test_notifications、test_user_settings 共 8 个文件)。
同步修复 europe_pmc 解析、admin pipeline、ai_summary、email_service、
security/permissions 等共 21 个文件的断言和适配问题。
This commit is contained in:
34047007@qq.com
2026-07-27 22:19:27 +08:00
parent 4f6024aa7a
commit c50831d1d8
21 changed files with 308 additions and 244 deletions
+18
View File
@@ -193,10 +193,12 @@ CREATE TABLE global_literature (
entrez_date DATE, -- PubMed 收录日期(纯日期,无需时间)【PubMed: PubmedData/History/PubMedPubDate[@PubStatus="entrez"]】
databank_list JSONB NOT NULL DEFAULT '[]', -- 数据库引用列表(如 ClinicalTrials.gov)【PubMed: Article/DataBankList/DataBank】
suppl_mesh_list JSONB NOT NULL DEFAULT '[]', -- 补充 MeSH 词列表(含物质名)【PubMed: SupplMeshList/SupplMeshName】
tag_ids UUID[], -- 反范式标签ID数组 + GIN,免 JOIN global_literature_tags【由 tag_service.tag_article() 维护,使用 PostgreSQL unnest() + ARRAY() 构造,非 PubMed 字段】
source VARCHAR(30) NOT NULL DEFAULT 'pubmed_ftp', -- 数据来源(内部追踪用:pubmed_api/pubmed_ftp,非 PubMed 字段)
created_at TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
updated_at TIMESTAMPTZ NOT NULL DEFAULT now() -- 更新时间
);
-- ═══ B-tree 索引(既有筛选) ═══
CREATE INDEX idx_gl_pub_date ON global_literature(pub_date);
CREATE INDEX idx_gl_pub_year ON global_literature(pub_year);
CREATE INDEX idx_gl_journal_issn ON global_literature(journal_issn);
@@ -216,6 +218,22 @@ CREATE INDEX ix_gl_is_oa ON global_literature(is_oa);
CREATE INDEX ix_gl_is_negative ON global_literature(is_negative_result); -- 筛选:阴性结果
CREATE INDEX ix_gl_is_preprint ON global_literature(is_preprint); -- 筛选:Exclude preprints
CREATE INDEX ix_gl_mesh_headings ON global_literature USING gin(mesh_headings); -- 筛选:Species/Sex/Age JSONB @> 查询
-- ═══ BRIN 索引(时序数据,体积小两个数量级) ═══
CREATE INDEX ix_gl_pub_date_brin ON global_literature USING brin(pub_date);
CREATE INDEX ix_gl_pub_year_brin ON global_literature USING brin(pub_year);
-- ═══ Covering Indexdate 排序 + 高频引用列,index-only scan ═══
CREATE INDEX ix_gl_pub_date_covering ON global_literature(pub_date, id) INCLUDE (journal_issn, cited_by_count, is_oa, retracted, is_negative_result, is_preprint, journal, pub_year, article_date, doi, pmc_id, language, citation_status);
-- ═══ Partial Index(稀疏布尔,体积缩小 99.9%) ═══
CREATE INDEX ix_gl_retracted_true ON global_literature(retracted) WHERE retracted = TRUE;
CREATE INDEX ix_gl_is_oa_true ON global_literature(is_oa) WHERE is_oa = TRUE;
CREATE INDEX ix_gl_is_negative_true ON global_literature(is_negative_result) WHERE is_negative_result = TRUE;
CREATE INDEX ix_gl_is_preprint_true ON global_literature(is_preprint) WHERE is_preprint = TRUE;
-- ═══ GIN 反范式标签数组索引(标签筛选免 JOIN global_literature_tags ═══
CREATE INDEX ix_gl_tag_ids_gin ON global_literature USING gin(tag_ids);
CREATE INDEX ix_global_literature_journal_iso_trgm ON global_literature USING gin(journal_iso gin_trgm_ops); -- PubMed [TA] ILIKE 兜底
```