tech-bid-manageV1.2_20260424/tests/test_bill_analysis.py
2026-04-24 18:53:49 +08:00

53 lines
1.8 KiB
Python

"""工程量清单本地分析单元测试。"""
import unittest
from utils.bill_analysis import (
analyze_boq_pages,
filter_bill_pages,
parse_bill_text,
)
class TestParseBillText(unittest.TestCase):
def test_code_name_unit_qty(self):
text = '010101001001 挖土方 m3 100.5 土壤类别:三类土'
r = parse_bill_text(text)
self.assertIn('categories', r)
self.assertTrue(r['categories'])
cat = r['categories'][0]
self.assertEqual(cat['name'], '未分类')
self.assertEqual(len(cat['items']), 1)
it = cat['items'][0]
self.assertEqual(it['code'], '010101001001')
self.assertIn('挖土', it['name'])
self.assertEqual(it['unit'], 'm3')
self.assertEqual(it['quantity'], '100.5')
def test_hierarchical_line_prefix(self):
text = '1.1 010101001001 基础开挖 m3 50'
r = parse_bill_text(text)
it = r['categories'][0]['items'][0]
self.assertEqual(it['code'], '010101001001')
class TestFilterBillPages(unittest.TestCase):
def test_two_pages_gap_fill(self):
p0 = '目录 前言'
p1 = '分部分项工程量清单\n项目编码 项目名称 工程量\n010101001001 项 m3 1'
p2 = '续表无表头\n010101002001 土 m2 2'
p3 = '规费 税金 社会保险费 住房公积金 其他说明'
pages, meta = filter_bill_pages([p0, p1, p2, p3])
self.assertEqual(meta['total_pages'], 4)
self.assertGreaterEqual(len(pages), 2)
merged = '\n'.join(pages)
self.assertIn('010101001001', merged)
self.assertIn('010101002001', merged)
def test_analyze_scanned_empty(self):
r = analyze_boq_pages(['', ' ', ''])
self.assertTrue(r.get('scanned'))
if __name__ == '__main__':
unittest.main()