33"""Tests of models in the Meeting application"""
44import datetime
55
6- from ietf .meeting .factories import MeetingFactory , SessionFactory
6+ from ietf .meeting .factories import MeetingFactory , SessionFactory , AttendedFactory
77from ietf .stats .factories import MeetingRegistrationFactory
88from ietf .utils .test_utils import TestCase
99
@@ -17,41 +17,75 @@ def test_get_attendance_pre110(self):
1717 MeetingRegistrationFactory .create_batch (5 , meeting = meeting , reg_type = 'in_person' )
1818 self .assertIsNone (meeting .get_attendance ())
1919
20- def test_get_attendance (self ):
21- """Post-110 meetings do calculate attendance """
20+ def test_get_attendance_110 (self ):
21+ """Look at attendance as captured at 110 """
2222 meeting = MeetingFactory (type_id = 'ietf' , number = '110' )
2323
2424 # start with attendees that should be ignored
25- MeetingRegistrationFactory .create_batch (3 , meeting = meeting , reg_type = '' )
25+ MeetingRegistrationFactory .create_batch (3 , meeting = meeting , reg_type = '' , attended = True )
2626 MeetingRegistrationFactory (meeting = meeting , reg_type = '' , attended = False )
2727 attendance = meeting .get_attendance ()
2828 self .assertIsNotNone (attendance )
29- self .assertEqual (attendance .online , 0 )
29+ self .assertEqual (attendance .remote , 0 )
3030 self .assertEqual (attendance .onsite , 0 )
3131
3232 # add online attendees with at least one who registered but did not attend
33- MeetingRegistrationFactory .create_batch (4 , meeting = meeting , reg_type = 'remote' )
33+ MeetingRegistrationFactory .create_batch (4 , meeting = meeting , reg_type = 'remote' , attended = True )
3434 MeetingRegistrationFactory (meeting = meeting , reg_type = 'remote' , attended = False )
3535 attendance = meeting .get_attendance ()
3636 self .assertIsNotNone (attendance )
37- self .assertEqual (attendance .online , 4 )
37+ self .assertEqual (attendance .remote , 4 )
3838 self .assertEqual (attendance .onsite , 0 )
3939
4040 # and the same for onsite attendees
41- MeetingRegistrationFactory .create_batch (5 , meeting = meeting , reg_type = 'in_person' )
41+ MeetingRegistrationFactory .create_batch (5 , meeting = meeting , reg_type = 'onsite' , attended = True )
4242 MeetingRegistrationFactory (meeting = meeting , reg_type = 'in_person' , attended = False )
4343 attendance = meeting .get_attendance ()
4444 self .assertIsNotNone (attendance )
45- self .assertEqual (attendance .online , 4 )
45+ self .assertEqual (attendance .remote , 4 )
4646 self .assertEqual (attendance .onsite , 5 )
4747
4848 # and once more after removing all the online attendees
4949 meeting .meetingregistration_set .filter (reg_type = 'remote' ).delete ()
5050 attendance = meeting .get_attendance ()
5151 self .assertIsNotNone (attendance )
52- self .assertEqual (attendance .online , 0 )
52+ self .assertEqual (attendance .remote , 0 )
5353 self .assertEqual (attendance .onsite , 5 )
5454
55+ def test_get_attendance_113 (self ):
56+ """Simulate IETF 113 attendance gathering data"""
57+ meeting = MeetingFactory (type_id = 'ietf' , number = '113' )
58+ MeetingRegistrationFactory (meeting = meeting , reg_type = 'onsite' , attended = True , checkedin = False )
59+ MeetingRegistrationFactory (meeting = meeting , reg_type = 'onsite' , attended = False , checkedin = True )
60+ p1 = MeetingRegistrationFactory (meeting = meeting , reg_type = 'onsite' , attended = False , checkedin = False ).person
61+ AttendedFactory (session__meeting = meeting , person = p1 )
62+ p2 = MeetingRegistrationFactory (meeting = meeting , reg_type = 'remote' , attended = False , checkedin = False ).person
63+ AttendedFactory (session__meeting = meeting , person = p2 )
64+ attendance = meeting .get_attendance ()
65+ self .assertEqual (attendance .onsite , 3 )
66+ self .assertEqual (attendance .remote , 1 )
67+
68+ def test_get_attendance_keeps_meetings_distinct (self ):
69+ """No cross-talk between attendance for different meetings"""
70+ # numbers are arbitrary here
71+ first_mtg = MeetingFactory (type_id = 'ietf' , number = '114' )
72+ second_mtg = MeetingFactory (type_id = 'ietf' , number = '115' )
73+
74+ # Create a person who attended a remote session for first_mtg and onsite for second_mtg without
75+ # checking in for either.
76+ p = MeetingRegistrationFactory (meeting = second_mtg , reg_type = 'onsite' , attended = False , checkedin = False ).person
77+ AttendedFactory (session__meeting = first_mtg , person = p )
78+ MeetingRegistrationFactory (meeting = first_mtg , person = p , reg_type = 'remote' , attended = False , checkedin = False )
79+ AttendedFactory (session__meeting = second_mtg , person = p )
80+
81+ att = first_mtg .get_attendance ()
82+ self .assertEqual (att .onsite , 0 )
83+ self .assertEqual (att .remote , 1 )
84+
85+ att = second_mtg .get_attendance ()
86+ self .assertEqual (att .onsite , 1 )
87+ self .assertEqual (att .remote , 0 )
88+
5589
5690class SessionTests (TestCase ):
5791 def test_chat_archive_url_with_jabber (self ):
0 commit comments