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)
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
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
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
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
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
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