JhHardwareWRS_BackPoint/tests/test_product_delete.py
2026-06-24 15:19:14 +08:00

127 lines
3.7 KiB
Python

from datetime import date, datetime
from sqlalchemy import create_engine, select
from sqlalchemy.orm import sessionmaker
from app.database import Base
from app.models import (
AttendancePoint,
DeviceQRCode,
Personnel,
Product,
ProductionReport,
ProductionReportItem,
ReportStatus,
Role,
SessionStatus,
WorkSession,
WorkSessionDevice,
)
from app.routers.products import delete_product
def _db_session():
engine = create_engine("sqlite+pysqlite:///:memory:", future=True)
Base.metadata.create_all(engine)
SessionLocal = sessionmaker(bind=engine, future=True)
return SessionLocal()
def test_delete_product_removes_qrcode_but_keeps_history():
db = _db_session()
try:
point = "测试考勤点"
user = Personnel(phone="13900000000", name="管理员")
user.role = Role.manager
db.add_all([
AttendancePoint(name=point, radius_meters=500, is_active=True),
user,
Product(
attendance_point_name=point,
project_no="测试",
product_name="测试",
device_no="",
process_name="1",
stamping_method="普通",
operator_count=1,
standard_beat=1,
standard_workload=0,
),
DeviceQRCode(
attendance_point_name=point,
device_no="测试",
process_name="1",
qr_scene="mold=old",
created_by=user.phone,
),
])
db.flush()
session = WorkSession(
id=1,
attendance_point_name=point,
employee_phone=user.phone,
start_at=datetime(2026, 6, 23, 8, 0),
status=SessionStatus.submitted,
)
db.add(session)
db.flush()
report = ProductionReport(
id=1,
attendance_point_name=point,
session_id=session.id,
employee_phone=user.phone,
report_date=date(2026, 6, 23),
start_at=datetime(2026, 6, 23, 8, 0),
end_at=datetime(2026, 6, 23, 9, 0),
status=ReportStatus.pending,
)
db.add(report)
db.flush()
history_device = WorkSessionDevice(
id=1,
session_id=session.id,
attendance_point_name=point,
device_no="测试",
process_name="1",
scanned_at=datetime(2026, 6, 23, 8, 0),
sort_order=0,
)
history_item = ProductionReportItem(
id=1,
report_id=report.id,
attendance_point_name=point,
device_no="28#",
project_no="测试",
product_name="测试",
process_name="1",
standard_beat=1,
)
db.add_all([history_device, history_item])
db.commit()
delete_product(
attendance_point_name=point,
project_no="测试",
product_name="测试",
process_name="1",
user=user,
db=db,
)
assert db.get(Product, {
"attendance_point_name": point,
"project_no": "测试",
"product_name": "测试",
"device_no": "",
"process_name": "1",
}) is None
assert db.get(DeviceQRCode, {
"attendance_point_name": point,
"device_no": "测试",
"process_name": "1",
}) is None
assert db.scalar(select(ProductionReportItem).where(ProductionReportItem.id == history_item.id)) is not None
assert db.scalar(select(WorkSessionDevice).where(WorkSessionDevice.id == history_device.id)) is not None
finally:
db.close()