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.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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue