generated from coop-cloud/example
117 lines
3.1 KiB
Python
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")
|