from types import SimpleNamespace from pretix_selective_export.presets import ( SETTINGS_KEY, get_presets, normalize_presets, save_preset, ) class DummySettings: def __init__(self, initial=None): self._data = dict(initial or {}) def get(self, key, as_type=None, default=None): return self._data.get(key, default) def set(self, key, value): self._data[key] = value def make_holder(initial=None): return SimpleNamespace(settings=DummySettings(initial)) def test_normalize_presets_discards_invalid_entries(): normalized = normalize_presets( { " Useful ": { "fields": [" order.code ", "order.code", "", 12], "fieldOrder": ["position.attendee_name_cached", "position.attendee_name_cached"], "events": [" TE1 ", ""], }, "": {"fields": ["ignored"]}, "Other": "invalid", } ) assert normalized == { "Useful": { "fields": ["order.code", "12"], "fieldOrder": ["position.attendee_name_cached"], "events": ["TE1"], }, "Other": { "fields": [], "fieldOrder": [], "events": [], }, } def test_save_preset_persists_to_settings_holder(): holder = make_holder() name, preset = save_preset( holder, " Shared preset ", { "fields": ["order.code", "position.attendee_name_cached"], "fieldOrder": ["position.attendee_name_cached", "order.code"], "events": ["TE1"], }, ) assert name == "Shared preset" assert preset["fields"] == ["order.code", "position.attendee_name_cached"] assert get_presets(holder) == { "Shared preset": { "fields": ["order.code", "position.attendee_name_cached"], "fieldOrder": ["position.attendee_name_cached", "order.code"], "events": ["TE1"], } } assert holder.settings.get(SETTINGS_KEY)["Shared preset"]["events"] == ["TE1"] def test_save_preset_overwrites_existing_name(): holder = make_holder( { SETTINGS_KEY: { "Shared preset": { "fields": ["order.code"], "fieldOrder": ["order.code"], "events": [], } } } ) save_preset( holder, "Shared preset", { "fields": ["position.attendee_name_cached"], "fieldOrder": ["position.attendee_name_cached"], "events": ["TE1"], }, ) assert get_presets(holder)["Shared preset"] == { "fields": ["position.attendee_name_cached"], "fieldOrder": ["position.attendee_name_cached"], "events": ["TE1"], } def test_save_preset_requires_non_blank_name(): holder = make_holder() try: save_preset(holder, " ", {"fields": []}) except ValueError as exc: assert str(exc) == "Preset name is required." else: raise AssertionError("Expected ValueError for blank preset name")