Spaces:
Sleeping
Sleeping
| """ | |
| Testes para sistema de metadados. | |
| """ | |
| import pytest | |
| from datetime import datetime | |
| from src.metadata import DocumentMetadata, MetadataManager | |
| class TestDocumentMetadata: | |
| """Testes para classe DocumentMetadata.""" | |
| def test_create_metadata(self): | |
| """Testa criacao de metadata.""" | |
| metadata = DocumentMetadata( | |
| document_type="PDF", | |
| tags=["tech", "ai"], | |
| author="John Doe" | |
| ) | |
| assert metadata.document_type == "PDF" | |
| assert metadata.tags == ["tech", "ai"] | |
| assert metadata.author == "John Doe" | |
| def test_to_dict(self): | |
| """Testa conversao para dicionario.""" | |
| metadata = DocumentMetadata( | |
| document_type="PDF", | |
| upload_date=datetime(2026, 1, 23, 10, 30), | |
| tags=["tech"] | |
| ) | |
| data = metadata.to_dict() | |
| assert data['document_type'] == "PDF" | |
| assert data['upload_date'] == "2026-01-23T10:30:00" | |
| assert data['tags'] == ["tech"] | |
| assert 'author' not in data # None nao deve aparecer | |
| def test_from_dict(self): | |
| """Testa criacao a partir de dicionario.""" | |
| data = { | |
| 'document_type': 'TXT', | |
| 'upload_date': '2026-01-23T10:30:00', | |
| 'tags': ['doc', 'test'] | |
| } | |
| metadata = DocumentMetadata.from_dict(data) | |
| assert metadata.document_type == 'TXT' | |
| assert metadata.upload_date == datetime(2026, 1, 23, 10, 30) | |
| assert metadata.tags == ['doc', 'test'] | |
| def test_to_json(self): | |
| """Testa conversao para JSON.""" | |
| metadata = DocumentMetadata( | |
| document_type="PDF", | |
| tags=["tech"] | |
| ) | |
| json_str = metadata.to_json() | |
| assert '"document_type": "PDF"' in json_str | |
| assert '"tags": ["tech"]' in json_str | |
| def test_from_json(self): | |
| """Testa criacao a partir de JSON.""" | |
| json_str = '{"document_type": "PDF", "tags": ["tech"], "author": "Test"}' | |
| metadata = DocumentMetadata.from_json(json_str) | |
| assert metadata.document_type == "PDF" | |
| assert metadata.tags == ["tech"] | |
| assert metadata.author == "Test" | |
| class TestMetadataManager: | |
| """Testes para classe MetadataManager.""" | |
| def mock_db(self, mocker): | |
| """Mock do DatabaseManager.""" | |
| return mocker.Mock() | |
| def manager(self, mock_db): | |
| """Instancia de MetadataManager.""" | |
| return MetadataManager(mock_db) | |
| def test_validate_metadata_valid(self, manager): | |
| """Testa validacao de metadata valido.""" | |
| metadata = DocumentMetadata( | |
| document_type="PDF", | |
| security_level="public", | |
| tags=["tech", "ai"] | |
| ) | |
| assert manager.validate_metadata(metadata) is True | |
| def test_validate_metadata_invalid_type(self, manager): | |
| """Testa validacao com tipo invalido.""" | |
| metadata = DocumentMetadata( | |
| document_type="INVALID" | |
| ) | |
| with pytest.raises(ValueError, match="document_type invalido"): | |
| manager.validate_metadata(metadata) | |
| def test_validate_metadata_invalid_security(self, manager): | |
| """Testa validacao com security_level invalido.""" | |
| metadata = DocumentMetadata( | |
| security_level="top_secret" # Nao existe | |
| ) | |
| with pytest.raises(ValueError, match="security_level invalido"): | |
| manager.validate_metadata(metadata) | |
| def test_validate_metadata_invalid_tags(self, manager): | |
| """Testa validacao com tags invalidas.""" | |
| metadata = DocumentMetadata( | |
| tags="not_a_list" # Deve ser lista | |
| ) | |
| with pytest.raises(ValueError, match="tags deve ser uma lista"): | |
| manager.validate_metadata(metadata) | |
| def test_build_filters_dict(self): | |
| """Testa construcao de dicionario de filtros.""" | |
| from ui.filters_component import build_filters_dict | |
| filters = build_filters_dict( | |
| doc_type="PDF", | |
| security_level="public", | |
| author="John", | |
| department=None, | |
| tags=["tech", "ai"], | |
| date_from="2026-01-01", | |
| date_to="2026-12-31" | |
| ) | |
| assert filters['document_type'] == "PDF" | |
| assert filters['security_level'] == "public" | |
| assert filters['author'] == "John" | |
| assert 'department' not in filters | |
| assert filters['tags'] == ["tech", "ai"] | |
| assert filters['upload_date_from'] == "2026-01-01" | |
| assert filters['upload_date_to'] == "2026-12-31" | |
| def test_build_filters_dict_invalid_date(self): | |
| """Testa que datas invalidas sao ignoradas.""" | |
| from ui.filters_component import build_filters_dict | |
| filters = build_filters_dict( | |
| doc_type="PDF", | |
| security_level=None, | |
| author=None, | |
| department=None, | |
| tags=None, | |
| date_from="invalid-date", | |
| date_to="2026-99-99" | |
| ) | |
| assert 'upload_date_from' not in filters | |
| assert 'upload_date_to' not in filters | |
| def test_format_active_filters(self): | |
| """Testa formatacao de filtros ativos.""" | |
| from ui.filters_component import format_active_filters | |
| filters = { | |
| 'document_type': 'PDF', | |
| 'tags': ['tech', 'ai'], | |
| 'author': 'John' | |
| } | |
| formatted = format_active_filters(filters) | |
| assert '**Filtros Ativos:**' in formatted | |
| assert 'Tipo: `PDF`' in formatted | |
| assert 'Tags: `tech`, `ai`' in formatted | |
| assert 'Autor: `John`' in formatted | |
| def test_format_active_filters_empty(self): | |
| """Testa formatacao com filtros vazios.""" | |
| from ui.filters_component import format_active_filters | |
| formatted = format_active_filters({}) | |
| assert formatted == "Nenhum filtro ativo" | |
| def test_clear_all_filters(self): | |
| """Testa limpeza de todos os filtros.""" | |
| from ui.filters_component import clear_all_filters | |
| result = clear_all_filters() | |
| assert result[0] is None # doc_type | |
| assert result[1] is None # security_level | |
| assert result[2] is None # author | |
| assert result[3] is None # department | |
| assert result[4] is None # tags | |
| assert result[5] == "" # date_from | |
| assert result[6] == "" # date_to | |
| assert result[7] == "Nenhum filtro ativo" | |
| if __name__ == "__main__": | |
| pytest.main([__file__, "-v"]) | |