Files
2026-04-27 09:25:29 +02:00

117 lines
3.1 KiB
Python

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")