Skip to content

feat: use new meeting.Registration model #8983

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 12, 2025
Merged
205 changes: 90 additions & 115 deletions ietf/api/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -833,111 +833,91 @@ def test_api_new_meeting_registration_nomcom_volunteer(self):
def test_api_new_meeting_registration_v2(self):
meeting = MeetingFactory(type_id='ietf')
person = PersonFactory()
regs = [
{
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'onsite',
'ticket_type': 'week_pass',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
}
]

reg_detail = {
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': meeting.number,
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
'tickets': [{'attendance_type': 'onsite', 'ticket_type': 'week_pass'}],
}
reg_data = {'objects': {reg_detail['email']: reg_detail}}
url = urlreverse('ietf.api.views.api_new_meeting_registration_v2')
#
# Test invalid key
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "invalid-token"})
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "invalid-token"})
self.assertEqual(r.status_code, 403)
#
# Test invalid data
bad_regs = copy.deepcopy(regs)
del(bad_regs[0]['email'])
r = self.client.post(url, data=json.dumps(bad_regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
bad_reg_data = copy.deepcopy(reg_data)
del bad_reg_data['objects'][reg_detail['email']]['email']
r = self.client.post(url, data=json.dumps(bad_reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertEqual(r.status_code, 400)
#
# Test valid POST
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
#
# Check record
reg = regs[0]
objects = Registration.objects.filter(email=reg['email'], meeting__number=reg['meeting'])
objects = Registration.objects.filter(email=reg_detail['email'], meeting__number=reg_detail['meeting'])
self.assertEqual(objects.count(), 1)
obj = objects[0]
for key in ['affiliation', 'country_code', 'first_name', 'last_name', 'checkedin']:
self.assertEqual(getattr(obj, key), False if key=='checkedin' else reg.get(key) , "Bad data for field '%s'" % key)
self.assertEqual(getattr(obj, key), False if key == 'checkedin' else reg_detail.get(key), f"Bad data for field {key}")
self.assertEqual(obj.tickets.count(), 1)
ticket = obj.tickets.first()
self.assertEqual(ticket.ticket_type.slug, regs[0]['ticket_type'])
self.assertEqual(ticket.attendance_type.slug, regs[0]['reg_type'])
self.assertEqual(ticket.ticket_type.slug, reg_detail['tickets'][0]['ticket_type'])
self.assertEqual(ticket.attendance_type.slug, reg_detail['tickets'][0]['attendance_type'])
self.assertEqual(obj.person, person)
#
# Test update (switch to remote)
regs = [
{
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'remote',
'ticket_type': 'week_pass',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
}
]
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
reg_detail = {
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': meeting.number,
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
'tickets': [{'attendance_type': 'remote', 'ticket_type': 'week_pass'}],
}
reg_data = {'objects': {reg_detail['email']: reg_detail}}
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
objects = Registration.objects.filter(email=reg['email'], meeting__number=reg['meeting'])
objects = Registration.objects.filter(email=reg_detail['email'], meeting__number=reg_detail['meeting'])
self.assertEqual(objects.count(), 1)
obj = objects[0]
self.assertEqual(obj.tickets.count(), 1)
ticket = obj.tickets.first()
self.assertEqual(ticket.ticket_type.slug, regs[0]['ticket_type'])
self.assertEqual(ticket.attendance_type.slug, regs[0]['reg_type'])
self.assertEqual(ticket.ticket_type.slug, reg_detail['tickets'][0]['ticket_type'])
self.assertEqual(ticket.attendance_type.slug, reg_detail['tickets'][0]['attendance_type'])
#
# Test multiple
regs = [
{
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'onsite',
'ticket_type': 'one_day',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
},

{
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'remote',
'ticket_type': 'week_pass',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
}
]

r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
reg_detail = {
'affiliation': "Alguma Corporação",
'country_code': 'PT',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': meeting.number,
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
'tickets': [
{'attendance_type': 'onsite', 'ticket_type': 'one_day'},
{'attendance_type': 'remote', 'ticket_type': 'week_pass'},
],
}
reg_data = {'objects': {reg_detail['email']: reg_detail}}
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
objects = Registration.objects.filter(email=reg['email'], meeting__number=reg['meeting'])
objects = Registration.objects.filter(email=reg_detail['email'], meeting__number=reg_detail['meeting'])
self.assertEqual(objects.count(), 1)
obj = objects[0]
self.assertEqual(obj.tickets.count(), 2)
Expand All @@ -948,51 +928,46 @@ def test_api_new_meeting_registration_v2(self):
def test_api_new_meeting_registration_v2_cancelled(self):
meeting = MeetingFactory(type_id='ietf')
person = PersonFactory()
regs = [
{
'affiliation': "Acme",
'country_code': 'US',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'onsite',
'ticket_type': 'week_pass',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
}
]
reg_detail = {
'affiliation': "Acme",
'country_code': 'US',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': meeting.number,
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
'tickets': [{'attendance_type': 'onsite', 'ticket_type': 'week_pass'}],
}
reg_data = {'objects': {reg_detail['email']: reg_detail}}
url = urlreverse('ietf.api.views.api_new_meeting_registration_v2')
self.assertEqual(Registration.objects.count(), 0)
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
self.assertEqual(Registration.objects.count(), 1)
regs[0]['cancelled'] = True
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
reg_detail['cancelled'] = True
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
self.assertEqual(Registration.objects.count(), 0)

@override_settings(APP_API_TOKENS={"ietf.api.views.api_new_meeting_registration_v2": ["valid-token"]})
@override_settings(APP_API_TOKENS={"ietf.api.views.api_new_meeting_registration_v2": ["valid-token"]})
def test_api_new_meeting_registration_v2_nomcom(self):
meeting = MeetingFactory(type_id='ietf')
person = PersonFactory()
regs = [
{
'affiliation': "Acme",
'country_code': 'US',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': str(meeting.number),
'reg_type': 'onsite',
'ticket_type': 'week_pass',
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
}
]

reg_detail = {
'affiliation': "Acme",
'country_code': 'US',
'email': person.email().address,
'first_name': person.first_name(),
'last_name': person.last_name(),
'meeting': meeting.number,
'checkedin': False,
'is_nomcom_volunteer': False,
'cancelled': False,
'tickets': [{'attendance_type': 'onsite', 'ticket_type': 'week_pass'}],
}
reg_data = {'objects': {reg_detail['email']: reg_detail}}
url = urlreverse('ietf.api.views.api_new_meeting_registration_v2')
now = datetime.datetime.now()
if now.month > 10:
Expand All @@ -1003,14 +978,14 @@ def test_api_new_meeting_registration_v2_nomcom(self):
nomcom = NomComFactory.create(is_accepting_volunteers=True, **nomcom_kwargs_for_year(year))

# first test is_nomcom_volunteer False
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
# assert no Volunteers exists
self.assertEqual(Volunteer.objects.count(), 0)

# test is_nomcom_volunteer True
regs[0]['is_nomcom_volunteer'] = True
r = self.client.post(url, data=json.dumps(regs), content_type='application/json', headers={"X-Api-Key": "valid-token"})
reg_detail['is_nomcom_volunteer'] = True
r = self.client.post(url, data=json.dumps(reg_data), content_type='application/json', headers={"X-Api-Key": "valid-token"})
self.assertContains(r, "Success", status_code=202)
# assert Volunteer exists
self.assertEqual(Volunteer.objects.count(), 1)
Expand Down
Loading
Loading