コード例 #1
0
ファイル: test_user.py プロジェクト: lukasjuhrich/pycroft
    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)
コード例 #2
0
ファイル: test_user.py プロジェクト: sgeisler/pycroft
    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)
コード例 #3
0
ファイル: __init__.py プロジェクト: agdsn/pycroft
    def post(self, user_id):
        """
        Terminate the membership on the given date

        :param user_id: The ID of the user
        :return:
        """

        parser = reqparse.RequestParser()
        parser.add_argument('end_date',
                            dest='end_date',
                            required=True,
                            type=lambda x: datetime.strptime(x, '%Y-%m-%d').date())
        parser.add_argument('comment', dest='comment', required=False)
        args = parser.parse_args()

        user = get_user_or_404(user_id)

        if membership_ending_task(user) is not None:
            abort(400, message="The termination of the membership has already"
                               " been scheduled.")

        if not user.has_property('member'):
            abort(400, message="User is not a member.")

        move_out(user=user,
                 comment=args.comment if args.comment is not None else "Move-out over API",
                 processor=user,
                 when=utc.with_min_time(args.end_date),
                 end_membership=True)

        session.session.commit()

        return "Membership termination scheduled."
コード例 #4
0
    def test_room_history_move_out(self):
        move_out(self.user, comment="test", processor=self.processor, when=session.utcnow())

        session.session.commit()

        rhe = self.user.room_history_entries[0]

        self.assertIsNotNone(rhe.begins_at)
        self.assertIsNotNone(rhe.ends_at)
コード例 #5
0
ファイル: test_room_history.py プロジェクト: agdsn/pycroft
    def test_room_history_move_out(self):
        move_out(self.user,
                 comment="test",
                 processor=self.processor,
                 when=session.utcnow())

        session.session.commit()

        rhe = self.user.room_history_entries[0]

        assert rhe.active_during.begin is not None
        assert rhe.active_during.end is not None
コード例 #6
0
ファイル: test_dormant_user.py プロジェクト: agdsn/pycroft
 def test_move_out_gets_scheduled(self, end_membership=None):
     for end_membership in (True, False):
         with self.subTest(end_membership=end_membership):
             old_room = self.user.room
             UserHelper.move_out(self.user, comment="", processor=self.processor,
                                 when=session.utcnow() + timedelta(days=1),
                                 end_membership=end_membership)
             assert self.user.room == old_room
             tasks = self.session.query(Task).all()
             assert len(tasks) == 1
             [task] = tasks
             assert task.type == TaskType.USER_MOVE_OUT
             assert task.parameters == UserMoveOutParams(comment="", end_membership=end_membership)
             session.session.delete(task)
コード例 #7
0
ファイル: task.py プロジェクト: agdsn/pycroft
    def _execute(self, task: UserTask, parameters: UserMoveOutParams):
        from pycroft.lib import user as lib_user
        if task.user.room is None:
            self.errors.append(
                "Tried to move out user, but user was not living in a dormitory"
            )
            return

        lib_user.move_out(user=task.user,
                          comment=parameters.comment,
                          processor=task.creator,
                          when=session.utcnow(),
                          end_membership=parameters.end_membership)

        self.new_status = TaskStatus.EXECUTED
コード例 #8
0
    def _execute(self, task, parameters):
        from pycroft.lib import user as lib_user

        if task.user.room is not None:
            lib_user.move_out(user=task.user,
                              comment=parameters['comment'],
                              processor=task.creator,
                              when=session.utcnow(),
                              end_membership=parameters['end_membership'])

            self.new_status = TaskStatus.EXECUTED
        else:
            self.errors.append(
                "Tried to move out user, but user was not living in a dormitory"
            )
コード例 #9
0
def take_actions_for_payment_in_default_users(users_pid_membership,
                                              users_membership_terminated,
                                              processor):
    ts_now = session.utcnow()

    for user in users_pid_membership:
        if not user.member_of(config.payment_in_default_group):
            make_member_of(user, config.payment_in_default_group,
                           processor, closed(ts_now, None))

    from pycroft.lib.user import move_out

    for user in users_membership_terminated:
        if user.member_of(config.member_group):
            move_out(user, "Zahlungsrückstand", processor, ts_now - timedelta(seconds=1), True)

            log_user_event("Mitgliedschaftsende wegen Zahlungsrückstand.",
                           processor, user)
コード例 #10
0
ファイル: test_dormant_user.py プロジェクト: agdsn/pycroft
 def move_out(self, user, comment=None):
     UserHelper.move_out(user, comment=comment or "", processor=self.processor,
                         when=session.utcnow())
     session.session.refresh(user)
コード例 #11
0
    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())
コード例 #12
0
    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))
コード例 #13
0
ファイル: test_user.py プロジェクト: agdsn/pycroft
    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())
コード例 #14
0
ファイル: test_user.py プロジェクト: agdsn/pycroft
    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)