Spiritual_Health_Project / tests /verification_mode /test_properties_dataset_metadata.py
DocUA's picture
Add property-based tests for verification mode functionality
a3934b1
# test_properties_dataset_metadata.py
"""
Property-based tests for dataset metadata display.
Tests that dataset metadata is accurately displayed in the verification UI.
**Feature: verification-mode, Property 12: Dataset Metadata is Displayed**
**Validates: Requirements 7.2, 7.3**
"""
import pytest
from hypothesis import given, strategies as st
from src.core.test_datasets import TestDatasetManager
from src.interface.verification_ui import VerificationUIComponents
from src.core.verification_models import TestDataset, TestMessage
class TestDatasetMetadataDisplay:
"""Property-based tests for dataset metadata display."""
@given(st.sampled_from(list(TestDatasetManager.get_all_datasets().values())))
def test_dataset_metadata_is_displayed(self, dataset: TestDataset):
"""
Property: For any dataset, when rendered, the metadata display should contain
the dataset name, description, and accurate message count.
**Feature: verification-mode, Property 12: Dataset Metadata is Displayed**
**Validates: Requirements 7.2, 7.3**
"""
# Render the dataset metadata
rendered = VerificationUIComponents.render_dataset_metadata(dataset)
# Verify dataset name is displayed
assert dataset.name in rendered, \
f"Dataset name '{dataset.name}' not found in rendered metadata"
# Verify description is displayed
assert dataset.description in rendered, \
f"Dataset description '{dataset.description}' not found in rendered metadata"
# Verify message count is displayed
assert str(dataset.message_count) in rendered, \
f"Message count '{dataset.message_count}' not found in rendered metadata"
# Verify dataset ID is displayed
assert dataset.dataset_id in rendered, \
f"Dataset ID '{dataset.dataset_id}' not found in rendered metadata"
@given(st.sampled_from(list(TestDatasetManager.get_all_datasets().values())))
def test_dataset_metadata_accuracy(self, dataset: TestDataset):
"""
Property: For any dataset, the displayed message count should exactly match
the actual number of messages in the dataset.
**Feature: verification-mode, Property 12: Dataset Metadata is Displayed**
**Validates: Requirements 7.2, 7.3**
"""
# Render the dataset metadata
rendered = VerificationUIComponents.render_dataset_metadata(dataset)
# Extract the message count from rendered output
# The format is "Message Count: X messages"
lines = rendered.split('\n')
message_count_line = [l for l in lines if 'Message Count:' in l]
assert len(message_count_line) > 0, \
"Message count line not found in rendered metadata"
# Verify the displayed count matches actual count
actual_count = dataset.message_count
assert str(actual_count) in message_count_line[0], \
f"Displayed message count does not match actual count {actual_count}"
@given(st.sampled_from(list(TestDatasetManager.get_all_datasets().values())))
def test_dataset_selection_confirmation_contains_metadata(self, dataset: TestDataset):
"""
Property: For any dataset, the selection confirmation should display
the dataset name and message count.
**Feature: verification-mode, Property 12: Dataset Metadata is Displayed**
**Validates: Requirements 7.2, 7.3**
"""
# Render the selection confirmation
confirmation = VerificationUIComponents.render_dataset_selection_confirmation(dataset)
# Verify dataset name is in confirmation
assert dataset.name in confirmation, \
f"Dataset name '{dataset.name}' not found in confirmation"
# Verify message count is in confirmation
assert str(dataset.message_count) in confirmation, \
f"Message count '{dataset.message_count}' not found in confirmation"
def test_dataset_metadata_display_with_none_dataset(self):
"""Test that metadata display handles None dataset gracefully."""
rendered = VerificationUIComponents.render_dataset_metadata(None)
assert "No dataset selected" in rendered
def test_dataset_selection_confirmation_with_none_dataset(self):
"""Test that selection confirmation handles None dataset gracefully."""
confirmation = VerificationUIComponents.render_dataset_selection_confirmation(None)
assert "No dataset selected" in confirmation
def test_all_datasets_have_metadata(self):
"""Test that all datasets have required metadata fields."""
datasets = TestDatasetManager.get_all_datasets()
for dataset_id, dataset in datasets.items():
# Verify all required fields exist
assert dataset.dataset_id, f"Dataset {dataset_id} missing dataset_id"
assert dataset.name, f"Dataset {dataset_id} missing name"
assert dataset.description, f"Dataset {dataset_id} missing description"
assert dataset.message_count > 0, f"Dataset {dataset_id} has no messages"
# Verify metadata is displayable
rendered = VerificationUIComponents.render_dataset_metadata(dataset)
assert dataset.name in rendered
assert dataset.description in rendered
assert str(dataset.message_count) in rendered