def test_approve( create_user, create_reservation, create_blocking, smtp, notify_blocker, colliding_reservation, colliding_occurrence ): blocking = create_blocking(start_date=date.today(), end_date=date.today() + timedelta(days=1)) br = blocking.blocked_rooms[0] other_user = create_user(123) resv = create_reservation( start_dt=datetime.combine(blocking.start_date, time(8)), end_dt=datetime.combine(blocking.start_date, time(10)), created_by_user=other_user if colliding_reservation else blocking.created_by_user, booked_for_user=other_user if colliding_reservation else blocking.created_by_user, ) resv2 = create_reservation( start_dt=datetime.combine(blocking.start_date + timedelta(days=1), time(8)), end_dt=datetime.combine(blocking.end_date + timedelta(days=1), time(10)), repeat_frequency=RepeatFrequency.DAY, created_by_user=other_user if colliding_occurrence else blocking.created_by_user, booked_for_user=other_user if colliding_occurrence else blocking.created_by_user, ) assert br.state == BlockedRoom.State.pending br.approve(notify_blocker=notify_blocker) assert br.state == BlockedRoom.State.accepted assert resv.is_rejected == colliding_reservation assert not resv2.is_rejected for occ in resv2.occurrences: assert occ.is_rejected == (colliding_occurrence and blocking.is_active_at(occ.date)) if notify_blocker: extract_emails(smtp, one=True, to=blocking.created_by_user.email, subject="Room blocking ACCEPTED") assert len(smtp.outbox) == 2 * (colliding_occurrence + colliding_reservation) # 2 emails per rejection
def test_cancel(smtp, create_reservation, dummy_user, silent, reason): reservation = create_reservation( start_dt=date.today() + relativedelta(hour=8), end_dt=date.today() + relativedelta(days=1, hour=17), repeat_frequency=RepeatFrequency.DAY) assert reservation.occurrences.count() > 1 occurrence = reservation.occurrences[0] occurrence.cancel(user=dummy_user, reason=reason, silent=silent) assert occurrence.is_cancelled assert occurrence.rejection_reason == reason assert not occurrence.reservation.is_cancelled if silent: assert not occurrence.reservation.edit_logs.count() assert not smtp.outbox else: assert occurrence.reservation.edit_logs.count() == 1 assert occurrence.reservation.edit_logs[ 0].user_name == dummy_user.getFullName() extract_emails( smtp, count=2, regex=True, subject=r'Booking cancelled on .+ \(SINGLE OCCURRENCE\)') if reason: assert len(occurrence.reservation.edit_logs[0].info) == 2 else: assert len(occurrence.reservation.edit_logs[0].info) == 1 assert not smtp.outbox
def test_approve(create_user, create_reservation, create_blocking, smtp, notify_blocker, colliding_reservation, colliding_occurrence): blocking = create_blocking(start_date=date.today(), end_date=date.today() + timedelta(days=1)) br = blocking.blocked_rooms[0] other_user = create_user(123) resv = create_reservation(start_dt=datetime.combine(blocking.start_date, time(8)), end_dt=datetime.combine(blocking.start_date, time(10)), created_by_user=other_user if colliding_reservation else blocking.created_by_user, booked_for_user=other_user if colliding_reservation else blocking.created_by_user) resv2 = create_reservation(start_dt=datetime.combine(blocking.start_date + timedelta(days=1), time(8)), end_dt=datetime.combine(blocking.end_date + timedelta(days=1), time(10)), repeat_frequency=RepeatFrequency.DAY, created_by_user=other_user if colliding_occurrence else blocking.created_by_user, booked_for_user=other_user if colliding_occurrence else blocking.created_by_user) assert br.state == BlockedRoom.State.pending br.approve(notify_blocker=notify_blocker) assert br.state == BlockedRoom.State.accepted assert resv.is_rejected == colliding_reservation assert not resv2.is_rejected for occ in resv2.occurrences: assert occ.is_rejected == (colliding_occurrence and blocking.is_active_at(occ.date)) if notify_blocker: extract_emails(smtp, one=True, to=blocking.created_by_user.email, subject='Room blocking ACCEPTED') assert len(smtp.outbox) == 2 * (colliding_occurrence + colliding_reservation) # 2 emails per rejection
def test_update_principal_email(create_event, smtp): event = create_event() principal = EmailPrincipal('*****@*****.**') event.update_principal(principal, roles={'submit'}) email = extract_emails(smtp, required=True, one=True, to=principal.email) assert email['Subject'] == '[Indico] Please register' # adding more privs to the user should not send another email event.update_principal(principal, full_access=True) extract_emails(smtp, required=False, count=0)
def test_update_principal_resolve_email(create_event, create_user, smtp): event = create_event() user = create_user(123, email='*****@*****.**') # add email that belongs to a user entry = event.update_principal(EmailPrincipal('*****@*****.**'), full_access=True) assert entry.principal == user assert entry.type == PrincipalType.user extract_emails(smtp, required=False, count=0) # add email that has no user associated entry = event.update_principal(EmailPrincipal('*****@*****.**'), full_access=True) assert entry.principal == EmailPrincipal('*****@*****.**') assert entry.type == PrincipalType.email extract_emails(smtp, required=True, count=1)
def test_reject(smtp, create_reservation, dummy_user, silent): reservation = create_reservation(start_dt=date.today() + relativedelta(hour=8), end_dt=date.today() + relativedelta(days=1, hour=17), repeat_frequency=RepeatFrequency.DAY) assert reservation.occurrences.count() > 1 occurrence = reservation.occurrences[0] occurrence.reject(user=dummy_user, reason='cancelled', silent=silent) assert occurrence.is_rejected assert occurrence.rejection_reason == 'cancelled' assert not occurrence.reservation.is_rejected if silent: assert not occurrence.reservation.edit_logs.count() assert not smtp.outbox else: assert occurrence.reservation.edit_logs.count() == 1 assert occurrence.reservation.edit_logs[0].user_name == dummy_user.full_name assert len(occurrence.reservation.edit_logs[0].info) == 2 extract_emails(smtp, count=2, regex=True, subject=r'Booking rejected on .+ \(SINGLE OCCURRENCE\)') assert not smtp.outbox
def test_reject_single_occurrence(smtp, dummy_occurrence, dummy_user, silent): dummy_occurrence.reject(user=dummy_user, reason='rejected', silent=silent) assert dummy_occurrence.is_rejected assert dummy_occurrence.rejection_reason == 'rejected' assert dummy_occurrence.reservation.is_rejected assert dummy_occurrence.reservation.rejection_reason == 'rejected' if silent: assert not dummy_occurrence.reservation.edit_logs.count() else: assert dummy_occurrence.reservation.edit_logs.count() mails = extract_emails(smtp, count=2, regex=True, subject='Booking rejected on') assert not any('SINGLE OCCURRENCE' in mail['subject'] for mail in mails) assert not smtp.outbox
def test_reject_single_occurrence(smtp, dummy_occurrence, dummy_avatar, silent): dummy_occurrence.reject(user=dummy_avatar, reason="rejected", silent=silent) assert dummy_occurrence.is_rejected assert dummy_occurrence.rejection_reason == "rejected" assert dummy_occurrence.reservation.is_rejected assert dummy_occurrence.reservation.rejection_reason == "rejected" if silent: assert not dummy_occurrence.reservation.edit_logs.count() else: assert dummy_occurrence.reservation.edit_logs.count() mails = extract_emails(smtp, count=2, regex=True, subject="Booking rejected on") assert not any("SINGLE OCCURRENCE" in mail["subject"] for mail in mails) assert not smtp.outbox
def test_reject(dummy_user, dummy_blocking, smtp, with_user, with_reason): br = dummy_blocking.blocked_rooms[0] assert br.state == BlockedRoom.State.pending kwargs = {} if with_user: kwargs["user"] = dummy_user if with_reason: kwargs["reason"] = u"foo" br.reject(**kwargs) assert br.state == BlockedRoom.State.rejected mail = extract_emails(smtp, one=True, to=dummy_blocking.created_by_user.email, subject="Room blocking REJECTED") if with_reason: assert kwargs["reason"] in mail.as_string() assert not smtp.outbox
def test_reject(dummy_user, dummy_blocking, smtp, with_user, with_reason): br = dummy_blocking.blocked_rooms[0] assert br.state == BlockedRoom.State.pending kwargs = {} if with_user: kwargs['user'] = dummy_user if with_reason: kwargs['reason'] = u'foo' br.reject(**kwargs) assert br.state == BlockedRoom.State.rejected mail = extract_emails(smtp, one=True, to=dummy_blocking.created_by_user.email, subject='Room blocking REJECTED') if with_reason: assert kwargs['reason'] in mail.as_string() assert not smtp.outbox
def test_reject(dummy_user, dummy_blocking, smtp, with_user, with_reason): br = dummy_blocking.blocked_rooms[0] assert br.state == BlockedRoom.State.pending kwargs = {} if with_user: kwargs['user'] = dummy_user if with_reason: kwargs['reason'] = u'foo' br.reject(**kwargs) assert br.state == BlockedRoom.State.rejected mail = extract_emails(smtp, one=True, to=dummy_blocking.created_by_user.getEmail(), subject='Room blocking REJECTED') if with_reason: assert kwargs['reason'] in mail.as_string() assert not smtp.outbox
def test_cancel_single_occurrence(smtp, create_occurrence, dummy_user, silent, freeze_time): occ = create_occurrence(start_dt=datetime.combine(date.today(), time(11)), end_dt=datetime.combine(date.today(), time(12))) freeze_time(datetime.combine(date.today(), time(11, 10))) occ.cancel(user=dummy_user, reason='cancelled', silent=silent) assert occ.is_cancelled assert occ.rejection_reason == 'cancelled' assert occ.reservation.is_cancelled assert occ.reservation.rejection_reason == 'cancelled' if silent: assert not occ.reservation.edit_logs.count() else: assert occ.reservation.edit_logs.count() mails = extract_emails(smtp, count=2, regex=True, subject=r'Booking cancelled on') assert not any('SINGLE OCCURRENCE' in mail['subject'] for mail in mails) assert not smtp.outbox