Files
danyang-match/tests/e2e/sql/seed_e2e_service_station.sql
T

40 lines
1.9 KiB
SQL
Raw Normal View History

-- ============================================================
-- E2E 服务预约前置数据 seed(幂等,本机与 CI 通用)
--
-- 为什么需要(两个缺一不可的原因):
-- 1. 全新库里 `service_locations` 是**空表** —— 没有任何迁移种站点,
-- 本机那两个站(含旧脚本留下的「E2E 预约测试站」)都是手工产物。
-- 没有站点就没有 serviceLocationId,预约根本创建不了。
-- 2. 运营确认/完成/取消受**数据范围**约束,不是「有权限就行」:
-- `ServiceAppointmentService.assertOperatorScope` 走
-- `canAccessByOperator`,条件为
-- sa.assigned_operator_id = :operatorId
-- OR EXISTS(service_location_operators 中该站点关联了 :operatorId)
-- —— super_admin 也**不豁免**(实测 e2e_admin 确认预约返回 403)。
-- 因此必须显式建立「站点 → 运营」关联。
--
-- 关联的运营是 seed_e2e_operators.sql 建的 `e2e_station`(service_station_operator),
-- 它同时持有 service_location.view 与 service_appointment.confirm / .complete。
--
-- 幂等:全部 ON CONFLICT DO NOTHING,可重复执行。
-- 固定 UUID:测试按常量引用(见 service_appointment_test.py 的 E2E_STATION_ID)。
-- ============================================================
INSERT INTO service_locations (id, name, short_name, address, status)
VALUES (
'e2e00000-0000-0000-0000-0000000000b1',
'E2E 预约测试服务站',
'E2E 服务站',
'E2E 测试地址(仅预约用例使用)',
'active'
)
ON CONFLICT (id) DO NOTHING;
INSERT INTO service_location_operators (service_location_id, operator_id, created_by)
VALUES (
'e2e00000-0000-0000-0000-0000000000b1',
'e2e00000-0000-0000-0000-000000000004', -- e2e_station
'e2e00000-0000-0000-0000-000000000001' -- e2e_admin(created_by 仅审计)
)
ON CONFLICT (service_location_id, operator_id) DO NOTHING;