/
alsoalgo
/
CTF
Обзор
Документация
Войти
/
alsoalgo
/
CTF
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/test_data_validator.py
132 строки
5 KB
alsoalgo
some improvements
14 дек 2025, 22:23
14 дек 2025, 22:23
37d2ec0
Код
Авторство
О чём код?
""" Тесты для DataValidator """ import pytest import pandas as pd from src.components.data_validator import DataValidator class TestDataValidator: """Тесты для класса DataValidator""" def setup_method(self): """Настройка перед каждым тестом""" self.validator = DataValidator() def test_validate_dataframe_valid(self): """Тест валидации корректного DataFrame""" df = pd.DataFrame({ 'Field': ['Supplier', 'Off-taker', 'Product', 'Amount, USD', 'Currency'], 'Value': ['Test Supplier', 'Test Buyer', 'Test Product', '1000.00', 'USD'] }) result = self.validator.validate_dataframe(df) assert result['valid'] is True assert len(result['errors']) == 0 def test_validate_dataframe_missing_fields(self): """Тест валидации DataFrame с отсутствующими полями""" df = pd.DataFrame({ 'Field': ['Supplier'], 'Value': ['Test Supplier'] }) result = self.validator.validate_dataframe(df) assert result['valid'] is False assert len(result['errors']) > 0 assert any('required' in error.lower() for error in result['errors']) def test_validate_dataframe_invalid_amount(self): """Тест валидации с некорректной суммой""" df = pd.DataFrame({ 'Field': ['Supplier', 'Off-taker', 'Product', 'Amount, USD', 'Currency'], 'Value': ['Test Supplier', 'Test Buyer', 'Test Product', 'invalid', 'USD'] }) result = self.validator.validate_dataframe(df) # Может быть валидным, но с предупреждениями или ошибками формата assert 'errors' in result or 'warnings' in result def test_validate_dataframe_empty(self): """Тест валидации пустого DataFrame""" df = pd.DataFrame() result = self.validator.validate_dataframe(df) assert result['valid'] is False assert len(result['errors']) > 0 def test_validate_documents_all_present(self): """Тест проверки наличия всех обязательных документов""" document_types = ['contract', 'invoice'] result = self.validator.validate_documents(document_types) assert result['all_required_present'] is True assert len(result['missing_required']) == 0 def test_validate_documents_missing(self): """Тест проверки при отсутствии документов""" document_types = ['invoice'] # Нет contract result = self.validator.validate_documents(document_types) assert result['all_required_present'] is False assert 'contract' in result['missing_required'] def test_validate_document_consistency(self): """Тест проверки согласованности документов""" invoice_df = pd.DataFrame({ 'Supplier': ['Supplier A'], 'Off-taker': ['Buyer B'], 'Total Amount': ['1000.00'] }) contract_df = pd.DataFrame({ 'Supplier': ['Supplier A'], 'Off-taker': ['Buyer B'], 'Total Value': ['1000.00'] }) documents_data = { 'invoice': invoice_df, 'contract': contract_df } result = self.validator.validate_document_consistency(documents_data) assert 'consistent' in result assert 'inconsistencies' in result def test_validate_document_consistency_inconsistent(self): """Тест проверки при несоответствии данных""" invoice_df = pd.DataFrame({ 'Supplier': ['Supplier A'], 'Total Amount': ['1000.00'] }) contract_df = pd.DataFrame({ 'Supplier': ['Supplier B'], # Другой поставщик 'Total Value': ['2000.00'] # Другая сумма }) documents_data = { 'invoice': invoice_df, 'contract': contract_df } result = self.validator.validate_document_consistency(documents_data) # Может быть несоответствие assert 'inconsistencies' in result def test_is_valid_date(self): """Тест проверки валидности даты""" assert self.validator._is_valid_date('2024-01-15') is True assert self.validator._is_valid_date('15.01.2024') is True assert self.validator._is_valid_date('invalid date') is False assert self.validator._is_valid_date('') is False