mirror of
https://github.com/chidiwilliams/buzz.git
synced 2026-03-14 22:55:46 +01:00
149 lines
8.4 KiB
Python
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
|