예제 #1
0
def test_meeting_registration_success_phrases_fr(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    online_phrase = meeting.phrases.filter_by(
        group=Phrase.ONLINE_REGISTRATION,
        name=Phrase.PARTICIPANT).scalar()
    online_phrase.description.french = 'Online success message french'
    email_phrase = meeting.phrases.filter_by(
        group=Phrase.EMAIL_CONFIRMATION,
        name=Phrase.FOR_PARTICIPANTS).scalar()
    email_phrase.description.french = 'Email success message french'

    for field in meeting.custom_fields:
        field.label.french = field.label.english + ' french'

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id
    data['language'] = 'French'

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        success_message = PyQuery(resp.data)('h4').text()
        assert success_message == online_phrase.description.french
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        participant = Participant.query.get(1)
        assert participant.participant_type.code == Participant.PARTICIPANT
        assert len(outbox) == 2
        success_message = PyQuery(outbox[1].html)('h4').text()
        assert success_message == email_phrase.description.french
        labels = PyQuery(outbox[1].html)('th')
        for label in labels:
            assert label.text.endswith('french')
def test_meeting_registration_success_phrases(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    online_phrase = meeting.phrases.filter_by(
        group=Phrase.ONLINE_REGISTRATION,
        name=Phrase.PARTICIPANT).scalar()
    online_phrase.description.english = 'Online success message'
    email_phrase = meeting.phrases.filter_by(
        group=Phrase.EMAIL_CONFIRMATION,
        name=Phrase.FOR_PARTICIPANTS).scalar()
    email_phrase.description.english = 'Email success message'

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        success_message = PyQuery(resp.data)('h4').text()
        assert success_message == online_phrase.description.english
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        participant = Participant.query.get(1)
        assert participant.participant_type.code == Participant.PARTICIPANT
        assert len(outbox) == 2
        success_message = PyQuery(outbox[1].html)('h4').text()
        assert success_message == email_phrase.description.english
def test_send_bulk_email_logs(app, user):
    cat = MeetingCategoryFactory()
    ParticipantFactory.create_batch(5, meeting=cat.meeting)
    ParticipantFactory.create_batch(3, meeting=cat.meeting, language='French')

    data = {
        'message': 'Test',
        'subject': 'Test subject',
        'language': 'English',
        'participant_type': 'participant',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.bulkemail',
                                   meeting_id=cat.meeting.id),
                           data=data)
        assert resp.status_code == 302
        assert len(outbox) == 5
        assert MailLog.query.filter_by(meeting=cat.meeting).count() == 5

        resp = client.get(
            url_for('meetings.mail_logs', meeting_id=cat.meeting.id))
        assert resp.status_code == 200
        assert len(PyQuery(resp.data)('#mails tbody tr')) == 5
def test_send_bulk_email_logs(app, user):
    cat = MeetingCategoryFactory()
    ParticipantFactory.create_batch(5, meeting=cat.meeting)
    ParticipantFactory.create_batch(3, meeting=cat.meeting,
                                    language='fr')

    data = {
        'message': 'Test',
        'subject': 'Test subject',
        'language': 'English',
        'participant_type': 'participant',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.bulkemail',
                                   meeting_id=cat.meeting.id), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 5
        assert MailLog.query.filter_by(meeting=cat.meeting).count() == 5

        resp = client.get(url_for('meetings.mail_logs',
                                  meeting_id=cat.meeting.id))
        assert resp.status_code == 200
        assert len(PyQuery(resp.data)('#mails tbody tr')) == 5
def test_meeting_registration_success_phrases(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    online_phrase = meeting.phrases.filter_by(
        group=Phrase.ONLINE_REGISTRATION, name=Phrase.PARTICIPANT).scalar()
    online_phrase.description.english = 'Online success message'
    email_phrase = meeting.phrases.filter_by(
        group=Phrase.EMAIL_CONFIRMATION,
        name=Phrase.FOR_PARTICIPANTS).scalar()
    email_phrase.description.english = 'Dear John John, Email success message'

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        success_message = PyQuery(resp.data)('h4').text()
        assert success_message == online_phrase.description.english
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        participant = Participant.query.get(1)
        assert participant.participant_type.code == Participant.PARTICIPANT
        assert len(outbox) == 2
        success_message = PyQuery(outbox[1].html)('h4').text()
        assert success_message == ('Dear {} {}, '.format(
            participant.first_name, participant.last_name) +
                                   email_phrase.description.english)
예제 #6
0
def test_send_notification_add_media_participant(app):
    category = (MeetingCategoryFactory(
        meeting__settings='media_participant_enabled',
        category_type=Category.MEDIA))
    role_user = RoleUserMeetingFactory(meeting=category.meeting)
    RoleUserMeetingFactory(meeting=category.meeting,
                           user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user,
                            meeting=category.meeting,
                            notification_type='notify_media_participant')

    data = MediaParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        add_custom_fields_for_meeting(category.meeting,
                                      form_class=MediaParticipantDummyForm)
        with client.session_transaction() as sess:
            sess['user_id'] = role_user.user.id
        resp = client.post(url_for('meetings.media_participant_edit',
                                   meeting_id=category.meeting.id),
                           data=data)
        assert resp.status_code == 302
        assert RoleUser.query.filter_by(meeting=category.meeting).count() == 2
        assert len(outbox) == 0
def test_send_email_to_categories(app, user):
    cat_member = MeetingCategoryFactory()
    cat_press = MeetingCategoryFactory(meeting=cat_member.meeting)
    ParticipantFactory.create_batch(7,
                                    meeting=cat_member.meeting,
                                    category=cat_member)
    ParticipantFactory.create_batch(4,
                                    meeting=cat_member.meeting,
                                    category=cat_press)
    data = {
        'message': 'Test',
        'subject': 'Test subject',
        'language': 'English',
        'categories': '1',
        'participant_type': 'participant',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.bulkemail',
                                   meeting_id=cat_press.meeting.id),
                           data=data)
        assert resp.status_code == 302
        assert len(outbox) == 7
def test_resend_email(app, user):
    mail_log = MailLogFactory()

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.mail_resend',
                                   meeting_id=mail_log.meeting.id,
                                   mail_id=mail_log.id))
        assert resp.status_code == 302
        assert len(outbox) == 1
        assert MailLog.query.count() == 2
def test_meeting_registration_email_sender(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        assert len(outbox) == 2
        assert outbox[1].sender == meeting.owner.user.email
def test_meeting_registration_email_sender(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        assert len(outbox) == 2
        assert outbox[1].sender == app.config['MAIL_DEFAULT_SENDER']
def test_resend_email(app, user):
    mail_log = MailLogFactory()

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(
            url_for('meetings.mail_resend',
                    meeting_id=mail_log.meeting.id,
                    mail_id=mail_log.id))
        assert resp.status_code == 302
        assert len(outbox) == 1
        assert MailLog.query.count() == 2
예제 #12
0
def test_staff_add_fail_with_existing_staff(app, user):
    staff = StaffFactory(user__email='*****@*****.**')
    data = StaffFactory.attributes()
    data['user-email'] = staff.user.email

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        url = url_for('admin.staff_edit')
        resp = client.post(url, data=data)
        assert len(outbox) == 0
        assert resp.status_code == 200
        assert Staff.query.count() == 2
예제 #13
0
def test_staff_add_fail_with_multiple_emails(app, user):
    data = StaffFactory.attributes()
    data['user-email'] = '[email protected] , [email protected]'
    data['user-is_superuser'] = '******'

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        url = url_for('admin.staff_edit')
        resp = client.post(url, data=data)
        assert len(outbox) == 0
        assert resp.status_code == 200
        assert Staff.query.count() == 1
def test_change_user_password_successfully(app, user):
    new_user = UserFactory()
    data = {
        'email': new_user.email
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('admin.user_edit', user_id=new_user.id),
                           data=data)
        assert resp.status_code == 200
        assert 'success' in resp.data
        assert len(outbox) == 1
def test_change_user_password_successfully(app, user):
    new_user = UserFactory()
    data = {
        'email': new_user.email
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('admin.user_edit', user_id=new_user.id),
                           data=data)
        assert resp.status_code == 200
        assert 'success' in resp.data
        assert len(outbox) == 1
예제 #16
0
def test_staff_edit(app, user):
    staff = StaffFactory()
    data = StaffFactory.attributes()
    data['user-email'] = staff.user.email
    data['user-is_superuser'] = '******'
    data['title'] = title = 'CEO'

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        url = url_for('admin.staff_edit', staff_id=staff.id)
        resp = client.post(url, data=data)
        assert resp.status_code == 302
        assert len(outbox) == 0
        assert staff.title == title
        assert staff.user.is_superuser is True
def test_meeting_registration_add(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    role_user = RoleUserMeetingFactory(meeting=meeting)
    RoleUserMeetingFactory(meeting=meeting, user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user, meeting=meeting)

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        participant = Participant.query.get(1)
        assert participant.participant_type.code == Participant.PARTICIPANT
        assert len(outbox) == 3
        assert ActivityLog.query.filter_by(meeting=meeting).count() == 1
def test_meeting_registration_add(app, user, default_meeting):
    meeting = add_new_meeting(app, user)
    category = MeetingCategoryFactory(meeting=meeting)
    role_user = RoleUserMeetingFactory(meeting=meeting)
    RoleUserMeetingFactory(meeting=meeting, user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user, meeting=meeting)

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = register_participant_online(client, data, meeting)
        assert resp.status_code == 200
        assert Participant.query.filter_by(meeting=meeting).count() == 1
        participant = Participant.query.get(1)
        assert participant.participant_type.code == Participant.PARTICIPANT
        assert len(outbox) == 3
        assert ActivityLog.query.filter_by(meeting=meeting).count() == 1
def test_send_email_in_english(app, user):
    cat = MeetingCategoryFactory()
    ParticipantFactory.create_batch(5, meeting=cat.meeting)
    ParticipantFactory.create_batch(5, meeting=cat.meeting, language='fr')
    data = {
        'message': 'Test',
        'subject': 'Test subject',
        'language': 'English',
        'participant_type': 'participant',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.bulkemail',
                                   meeting_id=cat.meeting.id), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 5
def test_recover_password(app):
    user = UserFactory()
    data = UserFactory.attributes()
    data['email'] = user.email

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = client.post(url_for('auth.recover'), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 1

    passwd = str(uuid4())
    data['confirm'] = data['password'] = passwd
    with app.test_request_context():
        url = url_for('auth.reset', token=user.recover_token)
        resp = client.post(url, data=data)
        assert resp.status_code == 302

    assert user.check_password(passwd)
def test_send_email_to_all_participants(app, user):
    cat = MeetingCategoryFactory()
    ParticipantFactory.create_batch(5, meeting=cat.meeting)
    ParticipantFactory.create_batch(5, meeting=cat.meeting, language='French')
    data = {
        'message': 'Test',
        'subject': 'Test subject',
        'language': 'all',
        'participant_type': 'participant',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.bulkemail',
                                   meeting_id=cat.meeting.id),
                           data=data)
        assert resp.status_code == 302
        assert len(outbox) == 10
def test_send_notification_add_participant(app):
    category = MeetingCategoryFactory()
    role_user = RoleUserMeetingFactory(meeting=category.meeting)
    RoleUserMeetingFactory(meeting=category.meeting,
                           user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user, meeting=category.meeting)

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        add_participant_custom_fields(category.meeting)
        populate_participant_form(category.meeting, data)
        with client.session_transaction() as sess:
            sess['user_id'] = role_user.user.id
        resp = client.post(url_for('meetings.participant_edit',
                                   meeting_id=category.meeting.id), data=data)
        assert resp.status_code == 302
        assert RoleUser.query.filter_by(meeting=category.meeting).count() == 2
        assert len(outbox) == 0
예제 #23
0
def test_send_notification_add_participant(app):
    category = MeetingCategoryFactory()
    role_user = RoleUserMeetingFactory(meeting=category.meeting)
    RoleUserMeetingFactory(meeting=category.meeting,
                           user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user, meeting=category.meeting)

    data = ParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        add_participant_custom_fields(category.meeting)
        populate_participant_form(category.meeting, data)
        with client.session_transaction() as sess:
            sess['user_id'] = role_user.user.id
        resp = client.post(url_for('meetings.participant_edit',
                                   meeting_id=category.meeting.id),
                           data=data)
        assert resp.status_code == 302
        assert RoleUser.query.filter_by(meeting=category.meeting).count() == 2
        assert len(outbox) == 0
예제 #24
0
def test_meeting_participant_acknowledge_email_with_no_language(monkeypatch,
                                                                pdf_renderer,
                                                                app,
                                                                user):
    monkeypatch.setattr('mrt.meetings.participant.PdfRenderer', pdf_renderer)
    part = ParticipantFactory(language='')

    data = {
        'to': part.email,
        'message': 'AckMessage',
        'subject': 'AckSubject',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.participant_acknowledge',
                                   meeting_id=part.meeting.id,
                                   participant_id=part.id), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 1
def test_meeting_participant_acknowledge_email_with_no_language(monkeypatch,
                                                                pdf_renderer,
                                                                app,
                                                                user):
    monkeypatch.setattr('mrt.meetings.participant.PdfRenderer', pdf_renderer)
    part = ParticipantFactory(language='')

    data = {
        'to': part.email,
        'message': 'AckMessage',
        'subject': 'AckSubject',
    }

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.participant_acknowledge',
                                   meeting_id=part.meeting.id,
                                   participant_id=part.id), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 1
def test_ack_email(app, user):
    cat = MeetingCategoryFactory()
    participant = ParticipantFactory(meeting=cat.meeting)
    client = app.test_client()
    data = {
        'message': 'Test',
        'subject': 'Very long subject ' * 8,
        'language': 'English',
        'to': participant.email,
    }
    with app.test_request_context(), mail.record_messages() as outbox:
        with client.session_transaction() as sess:
            sess['user_id'] = user.id
        resp = client.post(url_for('meetings.participant_acknowledge',
                                   meeting_id=cat.meeting.id,
                                   participant_id=participant.id),
                           data=data)
        assert resp.status_code == 200
        assert len(PyQuery(resp.data)('div.text-danger')) == 1
        assert PyQuery(resp.data)('div.text-danger')[0].text_content() == \
            'Field cannot be longer than 128 characters.'
        assert len(outbox) == 0
        assert MailLog.query.count() == 0
def test_send_notification_add_media_participant(app):
    category = (
        MeetingCategoryFactory(meeting__settings='media_participant_enabled',
                               category_type=Category.MEDIA))
    role_user = RoleUserMeetingFactory(meeting=category.meeting)
    RoleUserMeetingFactory(meeting=category.meeting,
                           user__email='*****@*****.**')
    UserNotificationFactory(user=role_user.user, meeting=category.meeting,
                            notification_type='notify_media_participant')

    data = MediaParticipantFactory.attributes()
    data['category_id'] = category.id

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        add_custom_fields_for_meeting(category.meeting,
                                      form_class=MediaParticipantDummyForm)
        with client.session_transaction() as sess:
            sess['user_id'] = role_user.user.id
        resp = client.post(url_for('meetings.media_participant_edit',
                                   meeting_id=category.meeting.id), data=data)
        assert resp.status_code == 302
        assert RoleUser.query.filter_by(meeting=category.meeting).count() == 2
        assert len(outbox) == 0
def test_recover_password_fail_after_using_token(app):
    user = UserFactory()
    StaffFactory(user=user)
    data = UserFactory.attributes()
    data['email'] = user.email

    client = app.test_client()
    with app.test_request_context(), mail.record_messages() as outbox:
        resp = client.post(url_for('auth.recover'), data=data)
        assert resp.status_code == 302
        assert len(outbox) == 1

    passwd = str(uuid4())
    data['confirm'] = data['password'] = passwd
    with app.test_request_context():
        url = url_for('auth.reset', token=user.recover_token)
        resp = client.post(url, data=data)
        assert resp.status_code == 302
        resp = client.post(url, data=data, follow_redirects=True)

    errors = PyQuery(resp.data)('.alert-danger')

    assert resp.status_code == 200
    assert len(errors) == 1