def test_RHRegistrationForm_can_register(db, dummy_regform, dummy_reg, dummy_user, create_user): invitation = RegistrationInvitation(registration_form=dummy_regform, email='*****@*****.**', first_name='foo', last_name='bar', affiliation='test') db.session.flush() request.view_args = { 'reg_form_id': dummy_regform.id, 'event_id': dummy_regform.event_id } request.args = {'invitation': invitation.uuid} rh = RHRegistrationForm() rh._process_args() assert rh._can_register() # invited rh.invitation = None assert not rh._can_register() # not open dummy_regform.start_dt = now_utc(False) assert rh._can_register() session.user = dummy_user # registered in dummy_reg assert not rh._can_register() dummy_reg.state = RegistrationState.rejected assert not rh._can_register( ) # being rejected does not allow registering again dummy_reg.state = RegistrationState.withdrawn assert not rh._can_register( ) # being withdrawn does not allow registering again session.user = create_user(123, email='*****@*****.**') assert rh._can_register() dummy_regform.registration_limit = 1 assert rh._can_register() # withdrawn/rejected do not count against limit dummy_reg.state = RegistrationState.complete assert not rh._can_register() # exceeding limit
def test_import_invitations_duplicate_invitation(monkeypatch, dummy_regform, dummy_user): monkeypatch.setattr( 'indico.modules.events.registration.util.notify_invitation', lambda *args, **kwargs: None) invitation = RegistrationInvitation(skip_moderation=True, email='*****@*****.**', first_name='Amy', last_name='Wang', affiliation='ACME Inc.') dummy_regform.invitations.append(invitation) # duplicate invitation with 'skip_existing=True' csv = b'\n'.join([ b'Amy,Wang,ACME Inc.,[email protected]', b'Jane,Smith,ACME Inc.,[email protected]' ]) invitations, skipped = import_invitations_from_csv( dummy_regform, BytesIO(csv), email_from='*****@*****.**', email_subject='invitation', email_body='Invitation to event', skip_moderation=True, skip_existing=True) assert len(invitations) == 1 assert skipped == 1 assert invitations[0].first_name == 'Jane' assert invitations[0].last_name == 'Smith' assert invitations[0].affiliation == 'ACME Inc.' assert invitations[0].email == '*****@*****.**' assert invitations[0].skip_moderation
def _create_invitation(self, user, skip_moderation, email_from, email_subject, email_body): invitation = RegistrationInvitation(skip_moderation=skip_moderation, email=user['email'], first_name=user['first_name'], last_name=user['last_name'], affiliation=user['affiliation']) self.regform.invitations.append(invitation) db.session.flush() notify_invitation(invitation, email_subject, email_body, email_from)
def test_get_user_data(monkeypatch, dummy_event, dummy_user, dummy_regform): monkeypatch.setattr( 'indico.modules.events.registration.util.notify_invitation', lambda *args, **kwargs: None) session.set_session_user(dummy_user) assert get_user_data(dummy_regform, None) == {} expected = { 'email': '*****@*****.**', 'first_name': 'Guinea', 'last_name': 'Pig' } user_data = get_user_data(dummy_regform, dummy_user) assert user_data == expected user_data = get_user_data(dummy_regform, session.user) assert user_data == expected dummy_user.title = UserTitle.mr dummy_user.phone = '+1 22 50 14' dummy_user.address = 'Geneva' user_data = get_user_data(dummy_regform, dummy_user) assert type(user_data['title']) is dict assert user_data['phone'] == '+1 22 50 14' # Check that data is taken from the invitation invitation = RegistrationInvitation(skip_moderation=True, email='*****@*****.**', first_name='Amy', last_name='Wang', affiliation='ACME Inc.') dummy_regform.invitations.append(invitation) dummy_user.title = None user_data = get_user_data(dummy_regform, dummy_user, invitation) assert user_data == { 'email': '*****@*****.**', 'first_name': 'Amy', 'last_name': 'Wang', 'phone': '+1 22 50 14', 'address': 'Geneva', 'affiliation': 'ACME Inc.' } # Check that data is taken from the invitation when user is missing user_data = get_user_data(dummy_regform, None, invitation) assert user_data == { 'email': '*****@*****.**', 'first_name': 'Amy', 'last_name': 'Wang', 'affiliation': 'ACME Inc.' } # Check that data from disabled/deleted fields is not used title_field = next(item for item in dummy_regform.active_fields if item.type == RegistrationFormItemType.field_pd and item.personal_data_type.name == 'title') title_field.is_enabled = False dummy_user.title = UserTitle.dr user_data = get_user_data(dummy_regform, dummy_user) assert 'title' not in user_data phone_field = next(item for item in dummy_regform.active_fields if item.type == RegistrationFormItemType.field_pd and item.personal_data_type.name == 'phone') phone_field.is_deleted = True user_data = get_user_data(dummy_regform, dummy_user) assert 'title' not in user_data assert 'phone' not in user_data assert user_data == { 'email': '*****@*****.**', 'first_name': 'Guinea', 'last_name': 'Pig', 'address': 'Geneva' } for item in dummy_regform.active_fields: item.is_enabled = False assert get_user_data(dummy_regform, dummy_user) == {} assert get_user_data(dummy_regform, dummy_user, invitation) == {}
def test_import_invitations_error(dummy_regform, dummy_user): dummy_user.secondary_emails.add('*****@*****.**') create_registration(dummy_regform, { 'email': dummy_user.email, 'first_name': dummy_user.first_name, 'last_name': dummy_user.last_name }, notify_user=False) create_registration(dummy_regform, { 'email': '*****@*****.**', 'first_name': 'Big', 'last_name': 'Boss' }, notify_user=False) invitation = RegistrationInvitation(skip_moderation=True, email='*****@*****.**', first_name='Bill', last_name='Doe', affiliation='ACME Inc.') dummy_regform.invitations.append(invitation) # duplicate e-mail (registration) csv = b'\n'.join([b'Big,Boss,ACME Inc.,[email protected]']) with pytest.raises(UserValueError) as e: import_invitations_from_csv(dummy_regform, BytesIO(csv), email_from='*****@*****.**', email_subject='invitation', email_body='Invitation to event', skip_moderation=False, skip_existing=False) assert 'a registration with this email already exists' in str(e.value) assert 'Row 1' in str(e.value) # duplicate user csv = b'\n'.join([b'Big,Boss,ACME Inc.,[email protected]']) with pytest.raises(UserValueError) as e: import_invitations_from_csv(dummy_regform, BytesIO(csv), email_from='*****@*****.**', email_subject='invitation', email_body='Invitation to event', skip_moderation=False, skip_existing=False) assert 'a registration for this user already exists' in str(e.value) assert 'Row 1' in str(e.value) # duplicate email (invitation) csv = b'\n'.join([b'Bill,Doe,ACME Inc.,[email protected]']) with pytest.raises(UserValueError) as e: import_invitations_from_csv(dummy_regform, BytesIO(csv), email_from='*****@*****.**', email_subject='invitation', email_body='Invitation to event', skip_moderation=False, skip_existing=False) assert 'an invitation for this user already exists' in str(e.value) assert 'Row 1' in str(e.value)