def _execute(self, task, parameters: UserMoveInParams): from pycroft.lib import user as lib_user if task.user.room is not None: self.errors.append("Tried to move in user, " "but user was already living in a dormitory.") return room = lib_user.get_room( room_number=parameters.room_number, level=parameters.level, building_id=parameters.building_id, ) if room is None: self.errors.append( "Tried to move in user, but target room did not exist.") return lib_user.move_in( user=task.user, building_id=room.building.id, level=room.level, room_number=room.number, mac=parameters.mac, processor=task.creator, birthdate=parameters.birthdate, host_annex=parameters.host_annex, begin_membership=parameters.begin_membership, ) self.new_status = TaskStatus.EXECUTED
def test_0010_move_in(self): test_mac = "12:11:11:11:11:11" UserHelper.move_in( self.user, building_id=self.room.building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) assert self.user.room == self.room assert self.user.address == self.user.room.address assert len(self.user.hosts) == 1 [user_host] = self.user.hosts assert len(user_host.interfaces) == 1 user_interface = user_host.interfaces[0] assert len(user_interface.ips) == 1 assert user_interface.mac == test_mac # checks the initial group memberships active_user_groups = self.user.active_property_groups() for group in { self.config.member_group, self.config.network_access_group }: assert group in active_user_groups assert not self.user.has_property("reduced_membership_fee")
def _execute(self, task, parameters): from pycroft.lib import user as lib_user if task.user.room is None: room = Room.q.filter_by( number=parameters['room_number'], level=parameters['level'], building_id=parameters['building_id']).first() if room is not None: lib_user.move_in( user=task.user, building_id=room.building.id, level=room.level, room_number=room.number, mac=parameters['mac'], processor=task.creator, birthdate=parameters['birthdate'], host_annex=parameters['host_annex'], begin_membership=parameters['begin_membership']) self.new_status = TaskStatus.EXECUTED else: self.errors.append( "Tried to move in user, but target room did not exist.") else: self.errors.append( "Tried to move in user, but user was already living in a dormitory." )
def test_move_in_custom_traffic_group(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" traffic_group = user.TrafficGroup.q.first() new_user, _ = UserHelper.create_user(test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group=config.member_group) UserHelper.move_in(new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id) self.assertIn(traffic_group, new_user.active_traffic_groups())
def test_move_in_custom_traffic_group(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" traffic_group = user.TrafficGroup.q.first() new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group = config.member_group ) UserHelper.move_in( new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id ) self.assertIn(traffic_group, new_user.active_traffic_groups())
def test_0010_move_in(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group=config.member_group ) UserHelper.move_in( new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=self.traffic_group_id, ) self.assertEqual(new_user.name, test_name) self.assertEqual(new_user.login, test_login) self.assertEqual(new_user.email, test_email) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.room.level, 1) user_host = host.Host.q.filter_by(owner=new_user).one() self.assertEqual(len(user_host.interfaces), 1) user_interface = user_host.interfaces[0] self.assertEqual(len(user_interface.ips), 1) self.assertEqual(user_interface.mac, test_mac) # checks the initial group memberships active_user_groups = (new_user.active_property_groups() + new_user.active_traffic_groups()) for group in {config.member_group, config.network_access_group}: self.assertIn(group, active_user_groups) self.assertIsNotNone(new_user.account) self.assertEqual(new_user.account.balance, 0) self.assertFalse(new_user.has_property("reduced_membership_fee")) self.assertTrue(new_user.unix_account is not None) account = new_user.unix_account self.assertTrue(account.home_directory.endswith(new_user.login)) self.assertTrue(account.home_directory.startswith('/home/')) credits = new_user.traffic_credits self.assertEqual(len(credits), 1) self.assertEqual(credits[0].amount, self.traffic_group.initial_credit_amount)
def test_0010_move_in(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user(test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group=config.member_group) UserHelper.move_in( new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=self.traffic_group_id, ) self.assertEqual(new_user.name, test_name) self.assertEqual(new_user.login, test_login) self.assertEqual(new_user.email, test_email) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.room.level, 1) user_host = host.Host.q.filter_by(owner=new_user).one() self.assertEqual(len(user_host.interfaces), 1) user_interface = user_host.interfaces[0] self.assertEqual(len(user_interface.ips), 1) self.assertEqual(user_interface.mac, test_mac) # checks the initial group memberships active_user_groups = (new_user.active_property_groups() + new_user.active_traffic_groups()) for group in {config.member_group, config.network_access_group}: self.assertIn(group, active_user_groups) self.assertIsNotNone(new_user.account) self.assertEqual(new_user.account.balance, 0) self.assertFalse(new_user.has_property("reduced_membership_fee")) self.assertTrue(new_user.unix_account is not None) account = new_user.unix_account self.assertTrue(account.home_directory.endswith(new_user.login)) self.assertTrue(account.home_directory.startswith('/home/')) credits = new_user.traffic_credits self.assertEqual(len(credits), 1) self.assertEqual(credits[0].amount, self.traffic_group.initial_credit_amount)
def test_0010_move_in(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = self.room.building test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" address = get_room(building_id=test_building.id, level=1, room_number="1").address new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, groups=[self.config.member_group], address=address ) UserHelper.move_in( new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) self.assertEqual(new_user.name, test_name) self.assertEqual(new_user.login, test_login) self.assertEqual(new_user.email, test_email) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.address, new_user.room.address) user_host = host.Host.q.filter_by(owner=new_user).one() self.assertEqual(len(user_host.interfaces), 1) user_interface = user_host.interfaces[0] self.assertEqual(len(user_interface.ips), 1) self.assertEqual(user_interface.mac, test_mac) # checks the initial group memberships active_user_groups = new_user.active_property_groups() for group in {self.config.member_group, self.config.network_access_group}: self.assertIn(group, active_user_groups) self.assertIsNotNone(new_user.account) self.assertEqual(new_user.account.balance, 0) self.assertFalse(new_user.has_property("reduced_membership_fee")) self.assertTrue(new_user.unix_account is not None) account = new_user.unix_account self.assertTrue(account.home_directory.endswith(new_user.login)) self.assertTrue(account.home_directory.startswith('/home/'))
def test_room_history_move_in(self): self.assertEqual(0, len(self.user_no_room.room_history_entries)) move_in(self.user_no_room, self.room.building.id, self.room.level, self.room.number, mac=None, processor=self.processor) session.session.commit() rhe = self.user_no_room.room_history_entries[0] self.assertEqual(rhe.room, self.room) self.assertIsNotNone(rhe.begins_at) self.assertIsNone(rhe.ends_at)
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in( test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user ) out_time = datetime.now() UserHelper.move_out(user=new_user, date=out_time, comment="", processor=self.processing_user) # check end_date of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.end_date) self.assertLessEqual(membership.end_date, out_time) # check if users finance account still exists finance_account = new_user.finance_account self.assertIsNotNone(finance_account)
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in(test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user) out_time = datetime.now() UserHelper.move_out(user=new_user, date=out_time, comment="", processor=self.processing_user) # check end_date of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.end_date) self.assertLessEqual(membership.end_date, out_time) # check if users finance account still exists finance_account = new_user.finance_account self.assertIsNotNone(finance_account)
def test_room_history_move_in(self): assert 0 == len(self.user_no_room.room_history_entries) move_in(self.user_no_room, self.room.building.id, self.room.level, self.room.number, mac=None, processor=self.processor) session.session.commit() rhe = self.user_no_room.room_history_entries[0] assert rhe.room == self.room assert rhe.active_during.begin is not None assert rhe.active_during.end is None
def test_move_in_scheduling(self): test_mac = '00:de:ad:be:ef:00' UserHelper.move_in( self.user, building_id=self.room.building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, when=session.utcnow() + timedelta(days=1), ) assert (task := Task.q.first()) is not None assert task.parameters == UserMoveInParams( building_id=self.room.building.id, level=1, room_number="1", mac=test_mac, )
def test_0010_move_in(self): def get_initial_groups(): initial_groups = [] for memberships in config["move_in"]["group_memberships"]: initial_groups.append(property.Group.q.filter( property.Group.name == memberships["name"] ).one()) return initial_groups test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_hostname = "hans" test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in( test_name, test_login, test_email, test_dormitory, level=1, room_number="1", host_name=test_hostname, mac=test_mac, processor=self.processing_user ) self.assertEqual(new_user.name, test_name) self.assertEqual(new_user.login, test_login) self.assertEqual(new_user.email, test_email) self.assertEqual(new_user.room.dormitory, test_dormitory) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.user_hosts[0].user_net_device.mac, test_mac) user_host = host.UserHost.q.filter_by(user=new_user).one() user_net_device = host.UserNetDevice.q.filter_by(host=user_host).one() self.assertEqual(user_net_device.mac, test_mac) user_cname_record = dns.CNAMERecord.q.filter_by(host=user_host).one() self.assertEqual(user_cname_record.name, test_hostname) user_a_record = dns.ARecord.q.filter_by(host=user_host).one() self.assertEqual(user_cname_record.record_for, user_a_record) #checks the initial group memberships user_groups = new_user.active_property_groups + new_user.active_traffic_groups for group in get_initial_groups(): self.assertIn(group, user_groups) self.assertEqual(UserHelper.has_internet(new_user), True) self.assertIsNotNone(new_user.finance_account) self.assertEqual(new_user.finance_account.balance, 4000) self.assertFalse(new_user.has_property("away"))
def test_0010_move_in(self): def get_initial_groups(): initial_groups = [] for memberships in config["move_in"]["group_memberships"]: initial_groups.append( property.Group.q.filter( property.Group.name == memberships["name"]).one()) return initial_groups test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_hostname = "hans" test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in(test_name, test_login, test_email, test_dormitory, level=1, room_number="1", host_name=test_hostname, mac=test_mac, processor=self.processing_user) self.assertEqual(new_user.name, test_name) self.assertEqual(new_user.login, test_login) self.assertEqual(new_user.email, test_email) self.assertEqual(new_user.room.dormitory, test_dormitory) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.user_hosts[0].user_net_device.mac, test_mac) user_host = host.UserHost.q.filter_by(user=new_user).one() user_net_device = host.UserNetDevice.q.filter_by(host=user_host).one() self.assertEqual(user_net_device.mac, test_mac) user_cname_record = dns.CNAMERecord.q.filter_by(host=user_host).one() self.assertEqual(user_cname_record.name, test_hostname) user_a_record = dns.ARecord.q.filter_by(host=user_host).one() self.assertEqual(user_cname_record.record_for, user_a_record) #checks the initial group memberships user_groups = new_user.active_property_groups + new_user.active_traffic_groups for group in get_initial_groups(): self.assertIn(group, user_groups) self.assertEqual(UserHelper.has_internet(new_user), True) self.assertIsNotNone(new_user.finance_account) self.assertEqual(new_user.finance_account.balance, 4000) self.assertFalse(new_user.has_property("away"))
def test_0010_move_out_tmp(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in( test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user ) out_time = datetime.now() self.assertFalse(new_user.has_property("away")) UserHelper.move_out_tmp(new_user, out_time, "", self.processing_user) # check for tmpAusgezogen group membership away_group = property.PropertyGroup.q.filter( property.PropertyGroup.name == config["move_out_tmp"]["group"]).one() self.assertIn(new_user, away_group.active_users) self.assertIn(away_group, new_user.active_property_groups) self.assertTrue(new_user.has_property("away")) # check if user has no ips left self.assertEqual(new_user.user_hosts[0].user_net_device.ips, []) # check log message log_entry = new_user.user_log_entries[-1] self.assertGreaterEqual(log_entry.timestamp, out_time) self.assertEqual(log_entry.author, self.processing_user)
def test_0010_move_out_tmp(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_dormitory = dormitory.Dormitory.q.first() test_mac = "12:11:11:11:11:11" new_user = UserHelper.move_in(test_name, test_login, test_email, test_dormitory, level=1, room_number="1", mac=test_mac, processor=self.processing_user) out_time = datetime.now() self.assertFalse(new_user.has_property("away")) UserHelper.move_out_tmp(new_user, out_time, "", self.processing_user) # check for tmpAusgezogen group membership away_group = property.PropertyGroup.q.filter( property.PropertyGroup.name == config["move_out_tmp"] ["group"]).one() self.assertIn(new_user, away_group.active_users) self.assertIn(away_group, new_user.active_property_groups) self.assertTrue(new_user.has_property("away")) # check if user has no ips left self.assertEqual(new_user.user_hosts[0].user_net_device.ips, []) # check log message log_entry = new_user.user_log_entries[-1] self.assertGreaterEqual(log_entry.timestamp, out_time) self.assertEqual(log_entry.author, self.processing_user)
def test_move_out(self): test_name = "Hans" test_login = "******" test_email = "*****@*****.**" test_building = self.room.building test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" address = self.room.address new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, groups=[self.config.member_group], address=address ) UserHelper.move_in( new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) self.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) self.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: assert (int := membership.active_during) is not None assert (end := int.end) is not None assert end <= out_time assert not new_user.hosts assert new_user.room is None # move_out keeps user's address assert new_user.address == address # check if users finance account still exists assert new_user.account is not None UserHelper.move_in( user=new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, ) self.session.refresh(new_user) assert new_user.room.building == test_building assert new_user.room.level == 1 assert new_user.room.number == "1" assert new_user.address == new_user.room.address assert len(new_user.hosts) == 1 user_host = new_user.hosts[0] assert len(user_host.interfaces) == 1 assert user_host.interfaces[0].mac == test_mac assert len(user_host.ips) == 1 assert new_user.member_of(config.member_group) assert new_user.member_of(config.network_access_group)
def test_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = self.room.building test_mac = "12:11:11:11:11:11" test_birthdate = "1990-01-01" address = self.room.address new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, groups=[self.config.member_group], address=address ) UserHelper.move_in( new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, processor=self.processing_user, ) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # move_out keeps user's address self.assertEqual(new_user.address, address) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building_id=test_building.id, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(new_user.address, new_user.room.address) self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group))
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" traffic_group = user.TrafficGroup.q.first() test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user( test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group = config.member_group ) UserHelper.move_in( new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id ) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building=test_building, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, traffic_group_id=traffic_group.id, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group)) # `member_of` only concerns `PropertyGroup`s! self.assertIn(traffic_group, new_user.active_traffic_groups())
def test_0030_move_out(self): test_name = u"Hans" test_login = u"hans66" test_email = u"*****@*****.**" test_building = facilities.Building.q.first() test_mac = "12:11:11:11:11:11" traffic_group = user.TrafficGroup.q.first() test_birthdate = "1990-01-01" new_user, _ = UserHelper.create_user(test_name, test_login, test_email, test_birthdate, processor=self.processing_user, group=config.member_group) UserHelper.move_in(new_user, test_building, level=1, room_number="1", mac=test_mac, processor=self.processing_user, traffic_group_id=traffic_group.id) session.session.commit() out_time = session.utcnow() UserHelper.move_out(user=new_user, comment="", processor=self.processing_user, when=out_time) session.session.refresh(new_user) # check ends_at of moved out user for membership in new_user.memberships: self.assertIsNotNone(membership.ends_at) self.assertLessEqual(membership.ends_at, out_time) self.assertFalse(new_user.hosts) self.assertIsNone(new_user.room) # check if users finance account still exists self.assertIsNotNone(new_user.account) UserHelper.move_in( user=new_user, building=test_building, level=1, room_number="1", mac=test_mac, birthdate=test_birthdate, processor=self.processing_user, traffic_group_id=traffic_group.id, ) session.session.refresh(new_user) self.assertEqual(new_user.room.building, test_building) self.assertEqual(new_user.room.level, 1) self.assertEqual(new_user.room.number, "1") self.assertEqual(len(new_user.hosts), 1) user_host = new_user.hosts[0] self.assertEqual(len(user_host.interfaces), 1) self.assertEqual(user_host.interfaces[0].mac, test_mac) self.assertEqual(len(user_host.ips), 1) self.assertTrue(new_user.member_of(config.member_group)) self.assertTrue(new_user.member_of(config.network_access_group)) # `member_of` only concerns `PropertyGroup`s! self.assertIn(traffic_group, new_user.active_traffic_groups())