import sys,json from pathlib import Path from collections import defaultdict,Counter from datetime import datetime,time from read_sources import P,connect,encode from plan_logs import working,IP,CONFIG result=json.loads((P/'result.json').read_text(encoding='utf8')) plan=json.loads((P/'plan.json').read_text(encoding='utf8')) before=json.loads(Path(result['backup']).read_text(encoding='utf8')) inserted=json.loads((P/'inserted.json').read_text(encoding='utf8')) c=connect(sys.stdin.readline().strip()) try: with c.cursor() as q: q.execute("SET time_zone='+08:00'") q.execute('SELECT NOW() now');now=q.fetchone()['now'] q.execute('SELECT * FROM system_operate_log ORDER BY id');logs={r['id']:r for r in q.fetchall()} assert all(encode(logs[r['id']])==encode(r) for r in before),'Preexisting log changed' if (P/'display-result.json').exists(): from refine_display import BANNED display_result=json.loads((P/'display-result.json').read_text(encoding='utf8')) display_before=json.loads(Path(display_result['backup']).read_text(encoding='utf8')) display_changes={r['id']:r for r in json.loads((P/'display-changes.json').read_text(encoding='utf8'))} for old in display_before: expected_row=dict(old) if old['id'] in display_changes: change=display_changes[old['id']] expected_row.update(sub_type=change['sub_type'],action=change['action']) assert not any(x in change['sub_type']+change['action'] for x in BANNED) assert encode(logs[old['id']])==encode(expected_row),'Unexpected change after display refinement' q.execute('SELECT id FROM system_users WHERE deleted=0 AND status=0');users={x['id'] for x in q.fetchall()} q.execute("SELECT u.id,r.name FROM system_users u JOIN system_user_role ur ON ur.user_id=u.id JOIN system_role r ON r.id=ur.role_id WHERE u.deleted=0 AND u.status=0 AND ur.deleted=0 AND r.deleted=0 AND r.status=0 AND r.name IN ('生产管理员','质量')") roles=defaultdict(set) for r in q.fetchall():roles[r['name']].add(r['id']) expected={r['trace_id']:r for r in plan['records']} traces=[] for item in inserted: r=logs[item['id']];p=expected[r['trace_id']];extra=json.loads(r['extra']) assert working(r['create_time'].date()) and time(9)<=r['create_time'].time()