fix: prevent creation of duplicate MeetingRegistration records (#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>
This commit is contained in:
Ryan Cross 2023-11-06 18:22:42 +01:00 committed by GitHub
parent 37c796ebef
commit 6986e65665
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 2 deletions

View file

@ -272,3 +272,31 @@ class StatisticsTests(TestCase):
self.assertEqual(query.count(), 1)
self.assertEqual(query.filter(reg_type='onsite').count(), 1)
self.assertEqual(query.filter(reg_type='hackathon').count(), 0)
@patch('requests.get')
def test_get_meeting_registration_data_duplicates(self, mock_get):
'''Test that get_meeting_registration_data does not create duplicate
MeetingRegistration records
'''
person = PersonFactory()
data = {
'LastName': person.last_name() + ' ',
'FirstName': person.first_name(),
'Company': 'ABC',
'Country': 'US',
'Email': person.email().address,
'RegType': 'onsite',
'TicketType': 'week_pass',
'CheckedIn': 'True',
}
data2 = data.copy()
data2['RegType'] = 'hackathon'
response = Response()
response.status_code = 200
response._content = json.dumps([data, data2, data]).encode('utf8')
mock_get.return_value = response
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016, 7, 14), number="96")
self.assertEqual(MeetingRegistration.objects.count(), 0)
get_meeting_registration_data(meeting)
query = MeetingRegistration.objects.all()
self.assertEqual(query.count(), 2)

View file

@ -270,11 +270,10 @@ def get_meeting_registration_data(meeting):
object = meeting_registrations.pop((address, reg_type))
created = False
else:
object = MeetingRegistration.objects.create(
object, created = MeetingRegistration.objects.get_or_create(
meeting_id=meeting.pk,
email=address,
reg_type=reg_type)
created = True
if (object.first_name != first_name[:200] or
object.last_name != last_name[:200] or