Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
 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)
Esempio n. 4
0
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) == {}
Esempio n. 5
0
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)