OCR_Vehicle_01 / tests /test_processor.py
Esketch's picture
Remove dead code and fix issues from code review
66b38fd
Raw
History Blame Contribute Delete
3.19 kB
# -*- coding: utf-8 -*-
import unittest
from unittest.mock import patch, MagicMock
from src.processor import process_single_file, process_batch, results_to_rows
class TestProcessSingleFile(unittest.TestCase):
@patch('src.processor.get_ocr_engine')
@patch('src.processor._preprocessor')
def test_returns_dict_with_all_fields(self, mock_preprocessor, mock_get_engine):
mock_preprocessor.load_image.return_value = ['/tmp/fake_image.jpg']
mock_engine = MagicMock()
mock_engine.detect_text.return_value = {
'text': '자동차등록증\n차대번호 : KL1T1234567890123',
'lines': [('자동차등록증', 0.95), ('차대번호 : KL1T1234567890123', 0.92)],
'avg_confidence': 0.93,
}
mock_get_engine.return_value = mock_engine
result = process_single_file('/tmp/fake.jpg', 'fake.jpg')
self.assertEqual(result['status'], 'success')
self.assertIn('data', result)
self.assertIn('vin', result['data'])
@patch('src.processor.get_ocr_engine')
@patch('src.processor._preprocessor')
def test_returns_error_on_non_registration(self, mock_preprocessor, mock_get_engine):
mock_preprocessor.load_image.return_value = ['/tmp/fake_image.jpg']
mock_engine = MagicMock()
mock_engine.detect_text.return_value = {
'text': 'This is a random document with no registration keywords',
'lines': [('This is a random document', 0.9)],
'avg_confidence': 0.9,
}
mock_get_engine.return_value = mock_engine
result = process_single_file('/tmp/fake.jpg', 'fake.jpg')
self.assertEqual(result['status'], 'skipped')
class TestProcessBatch(unittest.TestCase):
@patch('src.processor.process_single_file')
def test_batch_returns_list(self, mock_process):
mock_process.return_value = {'status': 'success', 'data': {}, 'filename': 'a.jpg'}
files = [('/tmp/a.jpg', 'a.jpg'), ('/tmp/b.jpg', 'b.jpg')]
results = process_batch(files)
self.assertEqual(len(results), 2)
class TestResultsToRows(unittest.TestCase):
def test_converts_success_results(self):
results = [
{'status': 'success', 'filename': 'a.jpg', 'data': {
'vehicle_no': '경북70자6310', 'owner_name': '홍길동', 'vin': 'KM8J12345678901234',
'model_name': 'UNIVERSE', 'model_year': '2020', 'registration_date': '2020-01-15',
'vehicle_type': '승용차', 'length_mm': '12000', 'width_mm': '2500',
'height_mm': '3400', 'total_weight_kg': '18000', 'passenger_capacity': '45',
'fuel_type': 'Diesel',
}},
{'status': 'skipped', 'filename': 'b.jpg', 'data': {}, 'message': 'Not a registration'},
]
rows = results_to_rows(results)
self.assertEqual(len(rows), 1) # Only success rows
self.assertEqual(rows[0][0], '경북70자6310')
self.assertEqual(len(rows[0]), 13) # 13 columns
def test_empty_results(self):
rows = results_to_rows([])
self.assertEqual(rows, [])
if __name__ == '__main__':
unittest.main()