Skip to content

[TEST] Tests unitaires FilterMatePublicAPI (apply, clear, get, signaux) #23

@imagodata

Description

@imagodata

User Story

En tant que développeur,
je veux une suite de tests unitaires complète pour FilterMatePublicAPI,
afin de garantir la stabilité du contrat d'interface pour les plugins tiers.

Fichier cible

/tests/test_public_api/test_filter_mate_public_api.py

Plan de tests

Groupe 1 : Propriétés et capacités

def test_version_format():
    """La version suit le format semver."""

def test_capabilities_contains_required_keys():
    """capabilities() retourne les clés attendues."""

Groupe 2 : apply_filter

def test_apply_filter_success_vectorlayer():
def test_apply_filter_layer_not_found_raises():
def test_apply_filter_invalid_expression_raises():
def test_apply_filter_empty_expression_clears_filter():
def test_apply_filter_case_insensitive_layer_name():
def test_apply_filter_duplicate_layer_name_uses_first():
def test_apply_filter_emits_filter_applied_signal():
def test_apply_filter_logs_source_plugin():
def test_apply_filter_all_four_backends():

Groupe 3 : clear_filter / clear_all_filters

def test_clear_filter_removes_subset_string():
def test_clear_filter_emits_filter_cleared_signal():
def test_clear_filter_nonexistent_layer_returns_false():
def test_clear_all_filters_returns_correct_count():
def test_clear_all_filters_emits_signal_per_layer():

Groupe 4 : get_active_filters / get_filter_for_layer

def test_get_active_filters_reflects_real_subset_strings():
def test_get_active_filters_empty_project():
def test_get_filter_for_layer_returns_none_if_no_filter():
def test_is_layer_filtered_true_when_subset_string():

Groupe 5 : Signaux et cycle de vie

def test_about_to_unload_signal_on_plugin_unload():
def test_no_memory_leak_with_weakref():
def test_error_occurred_signal_on_layer_not_found():
def test_error_occurred_includes_error_code():

Fixtures nécessaires

@pytest.fixture
def mock_qgs_project(mocker):
    """Projet QGIS mocké avec couches vectorielles."""
    
@pytest.fixture
def api(mock_qgs_project):
    """Instance FilterMatePublicAPI prête à l'emploi."""

Critères d'acceptance

  • Tous les tests passent en CI (sans QGIS installé - mock total)
  • Couverture >= 85% sur filter_mate_public_api.py
  • Tests des 4 backends (PostgreSQL, Spatialite, GeoPackage, Shapefile)
  • Tests des signaux via pytest-qt et qtbot.waitSignal
  • Temps d'exécution total < 30 secondes

Estimation

Points : 5 | Priorité : Haute | Epic : #22

Liens

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestsprint-1Sprint 1 - Narractive Integration Foundation

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions