From 77f4bf21ff3f795ea2c164b4a040f91987ca6e80 Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Wed, 7 Jun 2017 17:30:53 +0000 Subject: [PATCH] When changing a TelechatDate in the admin interface, retain all document associations. Fixes #1349. Commit ready for merge. - Legacy-Id: 13559 --- ietf/iesg/admin.py | 14 +++++++++++++- ietf/iesg/tests.py | 11 ++++++++++- ietf/utils/test_data.py | 6 +++--- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ietf/iesg/admin.py b/ietf/iesg/admin.py index eddae67f6..bdace1b36 100644 --- a/ietf/iesg/admin.py +++ b/ietf/iesg/admin.py @@ -1,10 +1,22 @@ from django.contrib import admin +from ietf.doc.models import TelechatDocEvent from ietf.iesg.models import TelechatDate, TelechatAgendaItem class TelechatAgendaItemAdmin(admin.ModelAdmin): pass admin.site.register(TelechatAgendaItem, TelechatAgendaItemAdmin) -admin.site.register(TelechatDate) +class TelechatDateAdmin(admin.ModelAdmin): + def save_model(self, request, obj, form, change): + '''If changing a Telechat date, change all related TelechatDocEvents, which is how + documents are related to the Telechat + ''' + super(TelechatDateAdmin, self).save_model(request, obj, form, change) + if 'date' in form.changed_data: + old_date = form.initial['date'] + new_date = form.cleaned_data['date'] + TelechatDocEvent.objects.filter(telechat_date=old_date).update(telechat_date=new_date) + +admin.site.register(TelechatDate, TelechatDateAdmin) diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index ac9fffc29..fe7a320ce 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -409,6 +409,16 @@ class IESGAgendaTests(TestCase): self.assertTrue("Included" in [l for l in lines if d1_filename in l][0]) self.assertTrue("Not found" in [l for l in lines if d2_filename in l][0]) + def test_admin_change(self): + draft = Document.objects.get(name="draft-ietf-mars-test") + today = datetime.date.today() + telechat_date = TelechatDate.objects.get(date=draft.telechat_date()) + url = urlreverse('admin:iesg_telechatdate_change', args=(telechat_date.id,)) + self.client.login(username="secretary", password="secretary+password") + r = self.client.post(url, {'date':today.strftime('%Y-%m-%d')}) + self.assertRedirects(r, urlreverse('admin:iesg_telechatdate_changelist')) + self.assertEqual(draft.telechat_date(),today) + class RescheduleOnAgendaTests(TestCase): def test_reschedule(self): draft = make_test_data() @@ -457,4 +467,3 @@ class RescheduleOnAgendaTests(TestCase): self.assertEqual(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, d) self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").returning_item) self.assertEqual(draft.docevent_set.count(), events_before + 1) - diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index 836231e85..f90eb0ef2 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -20,7 +20,7 @@ from ietf.person.models import Person, Email from ietf.group.utils import setup_default_community_list_for_group from ietf.review.models import (ReviewRequest, ReviewerSettings, ReviewResultName, ReviewTypeName, ReviewTeamSettings ) -def create_person(group, role_name, name=None, username=None, email_address=None, password=None): +def create_person(group, role_name, name=None, username=None, email_address=None, password=None, is_staff=False, is_superuser=False): """Add person/user/email and role.""" if not name: name = group.acronym.capitalize() + " " + role_name.capitalize() @@ -31,7 +31,7 @@ def create_person(group, role_name, name=None, username=None, email_address=None if not password: password = username + "+password" - user = User.objects.create(username=username) + user = User.objects.create(username=username,is_staff=is_staff,is_superuser=is_superuser) user.set_password(password) user.save() person = Person.objects.create(name=name, ascii=name, user=user) @@ -69,7 +69,7 @@ def make_immutable_base_data(): create_person(irtf, "chair") secretariat = create_group(name="IETF Secretariat", acronym="secretariat", type_id="ietf") - create_person(secretariat, "secr", name="Sec Retary", username="secretary") + create_person(secretariat, "secr", name="Sec Retary", username="secretary", is_staff=True, is_superuser=True) iab = create_group(name="Internet Architecture Board", acronym="iab", type_id="ietf", parent=ietf) create_person(iab, "chair")