agendas: use update_or_create on TimePeriod and TimePeriodException import (#48095)
This commit is contained in:
parent
3617c3ff05
commit
df03dfd515
|
@ -609,8 +609,7 @@ class TimePeriod(models.Model):
|
|||
@classmethod
|
||||
def import_json(cls, data):
|
||||
data = clean_import_data(cls, data)
|
||||
timeperiod = cls(**data)
|
||||
timeperiod.save()
|
||||
timeperiod, _ = cls.objects.update_or_create(defaults=data, **data)
|
||||
return timeperiod
|
||||
|
||||
def export_json(self):
|
||||
|
@ -1631,8 +1630,9 @@ class TimePeriodException(models.Model):
|
|||
if k.endswith('_datetime'):
|
||||
data[k] = import_datetime(v)
|
||||
data = clean_import_data(cls, data)
|
||||
exception = cls(**data)
|
||||
exception.save()
|
||||
query_data = data.copy()
|
||||
query_data.pop('update_datetime')
|
||||
exception, _ = cls.objects.update_or_create(defaults=data, **query_data)
|
||||
return exception
|
||||
|
||||
def export_json(self):
|
||||
|
|
|
@ -565,3 +565,32 @@ def test_import_export_time_period_exception_source():
|
|||
source = desk.timeperiodexceptionsource_set.first()
|
||||
assert not source.enabled
|
||||
assert not desk.timeperiodexception_set.exists()
|
||||
|
||||
|
||||
def test_import_export_do_not_duplicate_timeperiod_and_exceptions():
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
desk = Desk.objects.create(slug='test', agenda=agenda)
|
||||
TimePeriod.objects.create(
|
||||
desk=desk, weekday=2, start_time=datetime.time(10, 0), end_time=datetime.time(11, 0)
|
||||
)
|
||||
TimePeriod.objects.create(
|
||||
desk=desk, weekday=3, start_time=datetime.time(10, 0), end_time=datetime.time(11, 0)
|
||||
)
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)),
|
||||
)
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 6, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 6, 22, 12, 30)),
|
||||
)
|
||||
assert TimePeriod.objects.count() == 2
|
||||
assert TimePeriodException.objects.count() == 2
|
||||
output = get_output_of_command('export_site')
|
||||
payload = json.loads(output)
|
||||
import_site(payload)
|
||||
|
||||
assert TimePeriod.objects.count() == 2
|
||||
assert TimePeriodException.objects.count() == 2
|
||||
|
|
Loading…
Reference in New Issue