示例#1
0
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)
示例#2
0
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))
示例#3
0
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_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)
示例#6
0
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)
示例#7
0
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)
示例#8
0
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
示例#9
0
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
示例#10
0
    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()
示例#11
0
    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()
示例#12
0
 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
示例#13
0
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)
示例#14
0
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)
示例#15
0
    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()
示例#17
0
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
示例#18
0
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