def test_is_in_digest_window_from_settings(db, freeze_time, dummy_room, current_date, notification_window, expected, expected_with_exclude): freeze_time(current_date) dummy_room.notification_window = None rb_settings.set('notification_before_days', notification_window) db.session.flush() assert_is_in_digest_window(dummy_room, expected, expected_with_exclude)
def create_user(db): """Returns a callable which lets you create dummy users""" _users = set() def _create_user(id_, name=u'Pig', surname=u'Guinea', rb_admin=False, email=None, groups=None): user = User.get(id_) if user: return user.as_avatar user = User() user.id = id_ user.first_name = name user.last_name = surname user.email = email or u'{}@example.com'.format(id_) user.local_groups = {g.group for g in (groups or ())} db.session.add(user) db.session.flush() if rb_admin: rb_settings.set('admin_principals', rb_settings.get('admin_principals') + [user.as_principal]) db.session.flush() _users.add(user) avatar = user.as_avatar avatar.email = user.email return avatar yield _create_user admins = set(map(tuple, rb_settings.get('admin_principals'))) for user in _users: admins.discard(user.as_principal) db.session.delete(user) rb_settings.set('admin_principals', list(admins))
def rb_merge_users(new_id, old_id): """Updates RB data after an Avatar merge :param new_id: Target user :param old_id: Source user (being deleted in the merge) """ from indico.modules.rb import settings as rb_settings from indico.modules.rb.models.blocking_principals import BlockingPrincipal from indico.modules.rb.models.blockings import Blocking from indico.modules.rb.models.reservations import Reservation from indico.modules.rb.models.rooms import Room old_user = User.get(int(old_id)) new_user = User.get(int(new_id)) for bp in BlockingPrincipal.find(): if bp.principal == old_user: bp.principal = new_user Blocking.find(created_by_id=old_id).update({'created_by_id': new_id}) Reservation.find(created_by_id=old_id).update({'created_by_id': new_id}) Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id}) Room.find(owner_id=old_id).update({'owner_id': new_id}) for key in ('authorized_principals', 'admin_principals'): principals = rb_settings.get(key) principals = principals_merge_users(principals, new_id, old_id) rb_settings.set(key, principals)
def test_is_in_notification_window_from_settings(db, create_occurrence, dummy_room, notification_window, expected, expected_with_exclude): from indico.modules.rb import settings as rb_settings occurrence = create_occurrence(start_dt=datetime.now() + relativedelta(days=2)) dummy_room.notification_before_days = None rb_settings.set('notification_before_days', notification_window) assert_is_in_notification_window(occurrence, expected, expected_with_exclude)
def test_can_be_booked_prebooked_no_rb_access(db, dummy_room, dummy_user, create_user, has_acl, in_acl, expected): user = create_user(u'user') if has_acl: acl = [(u'Avatar', dummy_user.id)] if in_acl: acl.append((u'Avatar', user.id)) rb_settings.set('authorized_principals', acl) db.session.flush() assert dummy_room.can_be_booked(user) == expected assert dummy_room.can_be_prebooked(user) == expected
def test_can_be_booked_prebooked_no_rb_access(db, dummy_room, dummy_user, create_user, has_acl, in_acl, expected): user = create_user(123) if has_acl: acl = [(u'Avatar', dummy_user.id)] if in_acl: acl.append((u'Avatar', user.id)) rb_settings.set('authorized_principals', acl) db.session.flush() assert dummy_room.can_be_booked(user) == expected assert dummy_room.can_be_prebooked(user) == expected
def migrate_settings(self): print cformat('%{white!}migrating settings') rb_settings.delete_all() opts = self.zodb_root['plugins']['RoomBooking']._PluginBase__options # Admins & authorized users/groups rb_settings.set('authorized_principals', convert_principal_list(opts['AuthorisedUsersGroups'])) rb_settings.set('admin_principals', convert_principal_list(opts['Managers'])) # Assistance emails emails = [email for email in opts['assistanceNotificationEmails']._PluginOption__value if is_valid_mail(email, False)] rb_settings.set('assistance_emails', emails) # Simple settings rb_settings.set('notification_hour', opts['notificationHour']._PluginOption__value) rb_settings.set('notification_before_days', opts['notificationBefore']._PluginOption__value) db.session.commit()
def migrate_settings(self): print cformat("%{white!}migrating settings") rb_settings.delete_all() opts = self.zodb_root["plugins"]["RoomBooking"]._PluginBase__options # Admins & authorized users/groups rb_settings.set("authorized_principals", convert_principal_list(opts["AuthorisedUsersGroups"])) rb_settings.set("admin_principals", convert_principal_list(opts["Managers"])) # Assistance emails emails = [ email for email in opts["assistanceNotificationEmails"]._PluginOption__value if is_valid_mail(email, False) ] rb_settings.set("assistance_emails", emails) # Simple settings rb_settings.set("notification_hour", opts["notificationHour"]._PluginOption__value) rb_settings.set("notification_before_days", opts["notificationBefore"]._PluginOption__value) db.session.commit()
def _create_user(id_, name=u'Pig', surname=u'Guinea', rb_admin=False, email=None, groups=None): user = User.get(id_) if user: return user.as_avatar user = User() user.id = id_ user.first_name = name user.last_name = surname user.email = email or u'{}@example.com'.format(id_) user.local_groups = {g.group for g in (groups or ())} db.session.add(user) db.session.flush() if rb_admin: rb_settings.set('admin_principals', rb_settings.get('admin_principals') + [user.as_principal]) db.session.flush() _users.add(user) avatar = user.as_avatar avatar.email = user.email return avatar
def rb_merge_users(new_id, old_id): """Updates RB data after an Avatar merge :param new_id: Target user :param old_id: Source user (being deleted in the merge) """ from indico.modules.rb import settings from indico.modules.rb.models.blocking_principals import BlockingPrincipal from indico.modules.rb.models.blockings import Blocking from indico.modules.rb.models.reservations import Reservation from indico.modules.rb.models.rooms import Room BlockingPrincipal.find(entity_type='Avatar', entity_id=old_id).update({'entity_id': new_id}) Blocking.find(created_by_id=old_id).update({'created_by_id': new_id}) Reservation.find(created_by_id=old_id).update({'created_by_id': new_id}) Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id}) Room.find(owner_id=old_id).update({'owner_id': new_id}) for key in ('authorized_principals', 'admin_principals'): principals = settings.get(key, []) principals = principals_merge_users(principals, new_id, old_id) settings.set(key, principals)
def migrate_settings(self): print cformat('%{white!}migrating settings') rb_settings.delete_all() opts = self.zodb_root['plugins']['RoomBooking']._PluginBase__options # Admins & authorized users/groups rb_settings.set('authorized_principals', convert_principal_list(opts['AuthorisedUsersGroups'])) rb_settings.set('admin_principals', convert_principal_list(opts['Managers'])) # Assistance emails emails = [ email for email in opts['assistanceNotificationEmails']._PluginOption__value if is_valid_mail(email, False) ] rb_settings.set('assistance_emails', emails) # Simple settings rb_settings.set('notification_hour', opts['notificationHour']._PluginOption__value) rb_settings.set('notification_before_days', opts['notificationBefore']._PluginOption__value) db.session.commit()
def migrate_settings(main_root): print cformat('%{white!}migrating settings') rb_settings.delete_all() opts = main_root['plugins']['RoomBooking']._PluginBase__options # Admins & authorized users/groups for old_key, new_key in (('AuthorisedUsersGroups', 'authorized_principals'), ('Managers', 'admin_principals')): principals = set() for principal in opts[old_key].getValue(): if principal.__class__.__name__ == 'Avatar': principals.add(('Avatar', principal.id)) else: principals.add(('Group', principal.id)) rb_settings.set(new_key, list(principals)) # Assistance emails emails = [email for email in opts['assistanceNotificationEmails'].getValue() if is_valid_mail(email, False)] rb_settings.set('assistance_emails', emails) # Simple settings rb_settings.set('notification_hour', opts['notificationHour'].getValue()) rb_settings.set('notification_before_days', opts['notificationBefore'].getValue()) db.session.commit()
def test_can_be_deleted(dummy_reservation, dummy_user, is_admin, expected): if is_admin: rb_settings.set('admin_principals', [dummy_user.user.as_principal]) assert dummy_reservation.can_be_deleted(dummy_user) == expected