基于 skill-template 脚手架开发,包含: - payroll_config(费率配置,可编辑)+ payslip_snapshots(解析历史,只读)2 张业务表 - 全国默认 + 北上广 4 套费率(社保/公积金/个税起征点/7 级税率表) - 5 个业务 Action:calculate-payslip-simple / calculate-payslip-full / explain-term / view-config / edit-config - 个税累计预扣法计算,支持多月历史累加 - 20 个薪资名词库(社保/公积金/个税/全勤/加班费等) - 完整市场文档(README/TUTORIAL/DEMO/CHANGELOG) - 296 测试全部通过
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""init_db:幂等创建元数据表与本技能业务表。"""
|
||
from __future__ import annotations
|
||
|
||
import unittest
|
||
|
||
from _support import IsolatedDataRoot
|
||
|
||
|
||
class TestDbSmoke(unittest.TestCase):
|
||
def test_init_db_idempotent_metadata_only(self) -> None:
|
||
with IsolatedDataRoot():
|
||
from db.connection import get_conn, init_db
|
||
from db.display_metadata import METADATA_TABLES, iter_user_tables
|
||
|
||
init_db()
|
||
init_db()
|
||
|
||
conn = get_conn()
|
||
try:
|
||
cur = conn.cursor()
|
||
cur.execute(
|
||
"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'"
|
||
)
|
||
tables = {str(row[0]) for row in cur.fetchall()}
|
||
self.assertIn("_jiangchang_tables", tables)
|
||
self.assertIn("_jiangchang_columns", tables)
|
||
self.assertNotIn("task_logs", tables)
|
||
# 本技能建 2 张业务表
|
||
self.assertEqual(
|
||
list(iter_user_tables(cur)),
|
||
["payroll_config", "payslip_snapshots"],
|
||
)
|
||
leftover = tables - METADATA_TABLES - {"payroll_config", "payslip_snapshots"}
|
||
self.assertEqual(leftover, set())
|
||
finally:
|
||
conn.close()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|