diff --git a/ietf/meeting/factories.py b/ietf/meeting/factories.py index 927ed68d2..9fb2b31c5 100644 --- a/ietf/meeting/factories.py +++ b/ietf/meeting/factories.py @@ -7,9 +7,11 @@ import random import datetime from django.core.files.base import ContentFile +from django.db.models import Q -from ietf.meeting.models import Meeting, Session, SchedulingEvent, Schedule, TimeSlot, SessionPresentation, FloorPlan, Room, SlideSubmission -from ietf.name.models import ConstraintName, SessionStatusName +from ietf.meeting.models import ( Meeting, Session, SchedulingEvent, Schedule, + TimeSlot, SessionPresentation, FloorPlan, Room, SlideSubmission, Constraint) +from ietf.name.models import ConstraintName, SessionStatusName, TimerangeName from ietf.group.factories import GroupFactory from ietf.person.factories import PersonFactory @@ -100,6 +102,7 @@ class SessionFactory(factory.django.DjangoModelFactory): meeting = factory.SubFactory(MeetingFactory) type_id='regular' group = factory.SubFactory(GroupFactory) + requested_duration = datetime.timedelta(hours=1) @factory.post_generation def status_id(obj, create, extracted, **kwargs): @@ -220,3 +223,28 @@ class SlideSubmissionFactory(factory.django.DjangoModelFactory): make_file = factory.PostGeneration( lambda obj, create, extracted, **kwargs: open(obj.staged_filepath(),'a').close() ) + +class ConstraintFactory(factory.django.DjangoModelFactory): + class Meta: + model = Constraint + + meeting = factory.SubFactory(MeetingFactory) + source = factory.SubFactory(GroupFactory) + target = factory.SubFactory(GroupFactory) + person = factory.SubFactory(PersonFactory) + time_relation = factory.Iterator(Constraint.TIME_RELATION_CHOICES) + + @factory.lazy_attribute + def name(obj): + constraint_list = list(ConstraintName.objects.filter( + Q(slug__in=['bethere','timerange','time_relation','wg_adjacent']) + | Q(meeting=obj.meeting) + )) + return random.choice(constraint_list) + + @factory.post_generation + def timeranges(self, create, extracted, **kwargs): + if create: + if extracted: + for tr in TimerangeName.objects.filter(slug__in=extracted): + self.timeranges.add(tr) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index fb72eb5d4..d5deaeda6 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -51,7 +51,7 @@ from ietf.utils.text import xslugify from ietf.person.factories import PersonFactory from ietf.group.factories import GroupFactory, GroupEventFactory, RoleFactory from ietf.meeting.factories import ( SessionFactory, SessionPresentationFactory, ScheduleFactory, - MeetingFactory, FloorPlanFactory, TimeSlotFactory, SlideSubmissionFactory, RoomFactory ) + MeetingFactory, FloorPlanFactory, TimeSlotFactory, SlideSubmissionFactory, RoomFactory, ConstraintFactory ) from ietf.doc.factories import DocumentFactory, WgDraftFactory from ietf.submit.tests import submission_file from ietf.utils.test_utils import assert_ical_response_is_valid @@ -4450,11 +4450,15 @@ class SessionTests(TestCase): meeting = MeetingFactory(type_id='ietf') area = GroupFactory(type_id='area') requested_session = SessionFactory(meeting=meeting,group__parent=area,status_id='schedw',add_to_schedule=False) + conflicting_session = SessionFactory(meeting=meeting,group__parent=area,status_id='schedw',add_to_schedule=False) + ConstraintFactory(name_id='key_participant',meeting=meeting,source=requested_session.group,target=conflicting_session.group) not_meeting = SessionFactory(meeting=meeting,group__parent=area,status_id='notmeet',add_to_schedule=False) url = urlreverse('ietf.meeting.views.meeting_requests',kwargs={'num':meeting.number}) r = self.client.get(url) self.assertContains(r, requested_session.group.acronym) self.assertContains(r, not_meeting.group.acronym) + self.assertContains(r, requested_session.constraints().first().name) + self.assertContains(r, conflicting_session.group.acronym) def test_request_minutes(self): meeting = MeetingFactory(type_id='ietf') diff --git a/ietf/templates/meeting/requests.html b/ietf/templates/meeting/requests.html index 6ec1854fb..54687cdbf 100644 --- a/ietf/templates/meeting/requests.html +++ b/ietf/templates/meeting/requests.html @@ -92,7 +92,7 @@ {% if not forloop.first %} {% ifchanged grouped_constraint.grouper %}
{% endifchanged %} {% endif %} - {{ forloop.counter }}) + {{ grouped_constraint.grouper.name }}: {% for constraint in grouped_constraint.list %} {% with constraint.target.parent.id as constraint_target_parent_id %} {% with constraint.source.parent.id as constraint_source_parent_id %}