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:
parent
37c796ebef
commit
6986e65665
|
@ -272,3 +272,31 @@ class StatisticsTests(TestCase):
|
||||||
self.assertEqual(query.count(), 1)
|
self.assertEqual(query.count(), 1)
|
||||||
self.assertEqual(query.filter(reg_type='onsite').count(), 1)
|
self.assertEqual(query.filter(reg_type='onsite').count(), 1)
|
||||||
self.assertEqual(query.filter(reg_type='hackathon').count(), 0)
|
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)
|
||||||
|
|
|
@ -270,11 +270,10 @@ def get_meeting_registration_data(meeting):
|
||||||
object = meeting_registrations.pop((address, reg_type))
|
object = meeting_registrations.pop((address, reg_type))
|
||||||
created = False
|
created = False
|
||||||
else:
|
else:
|
||||||
object = MeetingRegistration.objects.create(
|
object, created = MeetingRegistration.objects.get_or_create(
|
||||||
meeting_id=meeting.pk,
|
meeting_id=meeting.pk,
|
||||||
email=address,
|
email=address,
|
||||||
reg_type=reg_type)
|
reg_type=reg_type)
|
||||||
created = True
|
|
||||||
|
|
||||||
if (object.first_name != first_name[:200] or
|
if (object.first_name != first_name[:200] or
|
||||||
object.last_name != last_name[:200] or
|
object.last_name != last_name[:200] or
|
||||||
|
|
Loading…
Reference in a new issue