buzz/tests/settings/settings_test.py
2025-12-12 20:41:44 +02:00

149 lines
8.4 KiB
Python

import pytest
from unittest.mock import Mock, patch
from buzz.settings.settings import Settings
class TestSettings:
def test_transcription_tasks_table_column_order_key(self):
"""Test that TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER key is defined"""
assert hasattr(Settings.Key, 'TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER')
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value == "transcription-tasks-table/column-order"
def test_transcription_tasks_table_column_widths_key(self):
"""Test that TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS key is defined"""
assert hasattr(Settings.Key, 'TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS')
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value == "transcription-tasks-table/column-widths"
def test_transcription_tasks_table_column_visibility_key_exists(self):
"""Test that TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY key still exists"""
assert hasattr(Settings.Key, 'TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY')
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value == "transcription-tasks-table/column-visibility"
def test_transcription_tasks_table_sort_state_key(self):
"""Test that TRANSCRIPTION_TASKS_TABLE_SORT_STATE key is defined"""
assert hasattr(Settings.Key, 'TRANSCRIPTION_TASKS_TABLE_SORT_STATE')
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value == "transcription-tasks-table/sort-state"
def test_all_transcription_tasks_table_keys_are_strings(self):
"""Test that all transcription tasks table keys are strings"""
assert isinstance(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value, str)
assert isinstance(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value, str)
assert isinstance(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value, str)
assert isinstance(Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value, str)
def test_transcription_tasks_table_keys_have_correct_prefix(self):
"""Test that all transcription tasks table keys have the correct prefix"""
prefix = "transcription-tasks-table/"
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value.startswith(prefix)
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value.startswith(prefix)
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value.startswith(prefix)
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value.startswith(prefix)
def test_transcription_tasks_table_keys_are_unique(self):
"""Test that all transcription tasks table keys are unique"""
keys = [
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value
]
assert len(keys) == len(set(keys)), "All transcription tasks table keys should be unique"
def test_settings_key_enum_values(self):
"""Test that Settings.Key enum values are properly defined"""
# Test that the keys exist and have expected values
expected_keys = {
'TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY': 'transcription-tasks-table/column-visibility',
'TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER': 'transcription-tasks-table/column-order',
'TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS': 'transcription-tasks-table/column-widths',
'TRANSCRIPTION_TASKS_TABLE_SORT_STATE': 'transcription-tasks-table/sort-state'
}
for key_name, expected_value in expected_keys.items():
assert hasattr(Settings.Key, key_name)
assert getattr(Settings.Key, key_name).value == expected_value
def test_settings_key_immutability(self):
"""Test that Settings.Key values cannot be modified"""
# This test ensures that the keys are defined as constants
original_visibility = Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY
original_order = Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER
original_widths = Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS
original_sort_state = Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE
# Attempting to modify these should not work (they should be immutable)
# If they were mutable, this test would fail
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY == original_visibility
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER == original_order
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS == original_widths
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE == original_sort_state
def test_settings_key_format_consistency(self):
"""Test that all transcription tasks table keys follow the same format"""
keys = [
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value
]
for key in keys:
# All keys should start with the same prefix
assert key.startswith("transcription-tasks-table/")
# All keys should contain only lowercase letters, hyphens, and forward slashes
assert all(c.islower() or c in '-/' for c in key)
# All keys should end with a descriptive suffix
assert key.endswith(('visibility', 'order', 'widths', 'sort-state'))
def test_settings_key_length(self):
"""Test that transcription tasks table keys have reasonable length"""
keys = [
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value
]
for key in keys:
# Keys should be long enough to be descriptive but not excessively long
assert 20 <= len(key) <= 50, f"Key '{key}' has unexpected length: {len(key)}"
def test_settings_key_naming_convention(self):
"""Test that transcription tasks table keys follow proper naming convention"""
keys = [
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value,
Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value
]
for key in keys:
# Keys should use kebab-case (lowercase with hyphens)
assert '-' in key, f"Key '{key}' should use kebab-case with hyphens"
assert not any(c.isupper() for c in key), f"Key '{key}' should not contain uppercase letters"
assert not '_' in key, f"Key '{key}' should use hyphens instead of underscores"
def test_settings_key_usage_in_code(self):
"""Test that the settings keys can be used in typical settings operations"""
# Mock a settings object to test key usage
mock_settings = Mock()
mock_settings.begin_group = Mock()
mock_settings.end_group = Mock()
mock_settings.settings = Mock()
# Test that the keys can be used with begin_group
mock_settings.begin_group(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value)
mock_settings.begin_group(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value)
mock_settings.begin_group(Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value)
mock_settings.begin_group(Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value)
# Verify that begin_group was called with the correct keys
assert mock_settings.begin_group.call_count == 4
call_args = [call[0][0] for call in mock_settings.begin_group.call_args_list]
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_VISIBILITY.value in call_args
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_ORDER.value in call_args
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_COLUMN_WIDTHS.value in call_args
assert Settings.Key.TRANSCRIPTION_TASKS_TABLE_SORT_STATE.value in call_args