QA验收 #8
open三方客户联系人信息查询 API 与 Apifox 同步
0%
Description
新增只读三方接口,按联系人 ID 或手机号(二选一)查询联系人 ID、姓名、公司 ID、公司名称、职位。独立 client:read Scope,HMAC 鉴权,手机号精确匹配主/备用号码,重复匹配报歧义,排除已删除联系人/公司。覆盖参数、权限、查询边界、白名单和回归测试,记录逐条 QA 结果。用户要求同步 Apifox 并直接上线;提交授权依项目约束待候选准备完成后确认,生产上线意图已明确。
RA Updated by Redmine Admin 26 days ago
开发聚焦测试证据 - 2026-10-16(非正式QA验收)¶
分支 feature/client-contact-query;SQLite内存库,出站网络封锁;49项Pass。正式QA线程拒收协调派单,当前Blocked;不把此记录视为QA已完成。
| 编号/测试 | 预期 | 实际 | 状态 |
|---|---|---|---|
| api.application_auth.tests.ApplicationAuthTests.test_canonical_query_sorts_keys_and_preserves_duplicates | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_canonical_query_uses_rfc3986_space_encoding | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_disallowed_ip_is_forbidden | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_expired_timestamp_is_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_invalid_forwarded_ip_is_not_persisted | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_missing_scope_is_forbidden | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_reused_nonce_is_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_valid_signature_authenticates_application | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationAuthTests.test_wrong_signature_is_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationManagementTests.test_create_returns_secret_once_and_list_never_returns_it | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationManagementTests.test_non_admin_cannot_manage_applications | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests.ApplicationManagementTests.test_rotate_secret_invalidates_previous_secret | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_default_only_active_and_whitelisted_fields | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_disabled_application_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_email_is_exact_and_case_insensitive | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_existing_scopes_do_not_grant_user_directory | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_explicit_inactive_and_inactive_hidden_by_default | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_filters_combine_with_and | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_id_filter | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_invalid_query_returns_http_400 | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_name_matches_chinese_and_english | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_no_credentials_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_pagination_order_total_and_empty_page | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_read_only_route | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_replay_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_schema_preserves_envelope_parameters_and_security | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_scope_is_available_to_application_management | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_trailing_slash_optional_without_redirect | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_users.InternalUsersTests.test_wrong_signature_rejected | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_deleted_contact_and_company_are_hidden | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_deleted_duplicate_does_not_cause_ambiguity | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_disabled_app_and_disallowed_ip | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_id_lookup_whitelist | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_invalid_missing_combined_unknown_and_repeated_queries | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_missing_contact_is_404 | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_missing_credentials_bad_signature_and_replay | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_multiple_contacts_are_ambiguous_including_cross_field | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_no_company_is_hidden | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_no_write_methods_or_redirect | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_null_ordinary_fields_are_retained | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_other_scopes_do_not_grant_contact_read | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_primary_and_backup_phone_exact | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_query_only_loads_projection_fields | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_resolve_route_is_unchanged | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_same_record_matching_both_phones_is_unique | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_schema_contract | 测试断言全部满足 | all assertions passed | Pass |
| api.application_auth.tests_internal_clients.InternalClientsTests.test_scope_available_without_automatic_grant | 测试断言全部满足 | all assertions passed | Pass |
| api.meetings.tests.MeetingApiTests.test_resolve_contact_and_ambiguity | 测试断言全部满足 | all assertions passed | Pass |
| api.meetings.tests.MeetingApiTests.test_resolve_contact_requires_new_auth_after_number_replacement | 测试断言全部满足 | all assertions passed | Pass |
证据:outputs/client-contact-query-20261016/backend-recorded-tests.log、backend-test-cases.json。首轮62项中的2失败/12错误日志保留;本功能装置及边界修复后聚焦49项通过,既有专家JSON查询不兼容SQLite,未声明完整PostgreSQL回归通过。尚未提交/发布/导入Apifox;AOCI既有治理漂移阻塞。
RA Updated by Redmine Admin 26 days ago
用户已明确授权本次仅提交6个功能/文档文件及3个版本文件、立即发布后端生产v1.20.3,并明确回复“本次豁免独立 QA,按现有验证发布”。本轮开发49项Pass和运维只读独立审核为实际证据;正式QA未执行,按用户决定Skipped,不宣称QA验收完成。前端及preview不发布,既有.aoci/config.json保留,应用Scope不自动增权。生产与Apifox结果另行追加。
RA Updated by Redmine Admin 26 days ago
交付结果:后端正式v1.20.3已发布,main/tag指向4d952e3ccf3ce9b2fd6c34f19925fa23c2e98e1f。CNB https://cnb.cool/mindsetech/NDB/backend/-/build/logs/cnb-933-1k51orne7 success;版本镜像、production alias、生产部署触发成功,测试阶段skipped。生产公开version HTTP200=1.20.3,新接口匿名401,实时schema五字段/参数/权限/错误状态一致。Apifox原8928025/main新增1接口+3模型,总指南已同步,公开页面读回验证:https://s.apifox.cn/bb842d4f-b365-47eb-a864-3cb75d422f82/525388094e0 。49项开发聚焦Pass;独立QA按用户明确豁免未执行,真实PostgreSQL集成及线上签名客户读取未验证,不自动授予client:read。仅原.aoci/config.json保留,frontend/preview不变。证据outputs/client-contact-query-20261016/release-result.md、apifox-result.md。