Show the constraint names on the meeting session requests page. Fixes #3082. Commit ready for merge.

- Legacy-Id: 19305
This commit is contained in:
Robert Sparks 2021-08-27 19:45:19 +00:00
parent 05390ebb7a
commit 6a7ebfdb7a
3 changed files with 36 additions and 4 deletions

View file

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

View file

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

View file

@ -92,7 +92,7 @@
{% if not forloop.first %}
{% ifchanged grouped_constraint.grouper %}<br>{% endifchanged %}
{% endif %}
<b>{{ forloop.counter }})</b>
<b>{{ grouped_constraint.grouper.name }}:</b>
{% 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 %}