When changing a TelechatDate in the admin interface, retain all document associations. Fixes #1349. Commit ready for merge.

- Legacy-Id: 13559
This commit is contained in:
Ryan Cross 2017-06-07 17:30:53 +00:00
parent 5188bdff6c
commit 77f4bf21ff
3 changed files with 26 additions and 5 deletions

View file

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

View file

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

View file

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