Skip to content

Commit 6986e65

Browse files
rpcrossrjsparks
andauthored
fix: prevent creation of duplicate MeetingRegistration records (ietf-tools#6593)
* fix: prevent creation of duplicate MeetingRegistration records * fix: use get_or_create to prevent duplicate MeetingRegistrations --------- Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
1 parent 37c796e commit 6986e65

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

ietf/stats/tests.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,31 @@ def test_get_meeting_registration_data(self, mock_get):
272272
self.assertEqual(query.count(), 1)
273273
self.assertEqual(query.filter(reg_type='onsite').count(), 1)
274274
self.assertEqual(query.filter(reg_type='hackathon').count(), 0)
275+
276+
@patch('requests.get')
277+
def test_get_meeting_registration_data_duplicates(self, mock_get):
278+
'''Test that get_meeting_registration_data does not create duplicate
279+
MeetingRegistration records
280+
'''
281+
person = PersonFactory()
282+
data = {
283+
'LastName': person.last_name() + ' ',
284+
'FirstName': person.first_name(),
285+
'Company': 'ABC',
286+
'Country': 'US',
287+
'Email': person.email().address,
288+
'RegType': 'onsite',
289+
'TicketType': 'week_pass',
290+
'CheckedIn': 'True',
291+
}
292+
data2 = data.copy()
293+
data2['RegType'] = 'hackathon'
294+
response = Response()
295+
response.status_code = 200
296+
response._content = json.dumps([data, data2, data]).encode('utf8')
297+
mock_get.return_value = response
298+
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016, 7, 14), number="96")
299+
self.assertEqual(MeetingRegistration.objects.count(), 0)
300+
get_meeting_registration_data(meeting)
301+
query = MeetingRegistration.objects.all()
302+
self.assertEqual(query.count(), 2)

ietf/stats/utils.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,10 @@ def get_meeting_registration_data(meeting):
270270
object = meeting_registrations.pop((address, reg_type))
271271
created = False
272272
else:
273-
object = MeetingRegistration.objects.create(
273+
object, created = MeetingRegistration.objects.get_or_create(
274274
meeting_id=meeting.pk,
275275
email=address,
276276
reg_type=reg_type)
277-
created = True
278277

279278
if (object.first_name != first_name[:200] or
280279
object.last_name != last_name[:200] or

0 commit comments

Comments
 (0)