Beispiel #1
0
    def test_project_task_users(self):
        import transaction
        from osmtm.models import Task, TaskState, TaskLock, User, DBSession
        from . import USER1_ID, USER2_ID

        project_id = self.create_project()
        ''' No contributions, users sorted alphabetically '''
        res = self.testapp.get('/project/%d/task/2/users' % project_id,
                               status=200,
                               xhr=True)
        self.assertEqual(res.json[0], u'admin_user')

        task_id = 2
        task = DBSession.query(Task).get((project_id, task_id))

        user1 = DBSession.query(User).get(USER1_ID)
        task.states.append(TaskState(state=TaskState.state_done, user=user1))

        user2 = DBSession.query(User).get(USER2_ID)
        task.locks.append(TaskLock(lock=True, user=user2))

        DBSession.add(task)
        transaction.commit()
        ''' Contributors and then lockers should appear first '''
        res = self.testapp.get('/project/%d/task/2/users' % project_id,
                               status=200,
                               xhr=True)
        self.assertEqual(res.json[0], u'user1')
        self.assertEqual(res.json[1], u'user2')
    def test_task_random__bordering_busy_tasks(self):
        import geoalchemy2
        import shapely
        import transaction
        from osmtm.models import Task, TaskLock, Area, Project, User, DBSession

        shape = shapely.geometry.Polygon([(7.23, 41.25), (7.23, 41.12),
                                          (7.41, 41.20)])
        geometry = geoalchemy2.shape.from_shape(shape, 4326)
        area = Area(geometry)
        project = Project(u'test project')
        project.area = area
        project.auto_fill(12)

        DBSession.add(project)
        DBSession.flush()
        project_id = project.id

        user2 = DBSession.query(User).filter(User.id == self.user2_id).one()
        task = DBSession.query(Task).filter(Task.project_id == project_id) \
            .first()
        task.locks.append(TaskLock(user=user2, lock=True))
        DBSession.add(task)

        transaction.commit()

        headers = self.login_as_user1()
        res = self.testapp.get('/project/%d/random' % project_id,
                               status=200,
                               headers=headers,
                               xhr=True)
        self.assertTrue(res.json['success'])
            session_v2.execute(d)

            d = TaskLock.__table__.delete(
                and_(TaskLock.project_id == job.id,
                     TaskLock.task_id == task.id))
            session_v2.execute(d)

            # initial state
            task_state = TaskState()
            task_state.date = datetime.datetime(2010, 01, 01)
            task_state.task_id = task.id
            task_state.project_id = project_id
            session_v2.add(task_state)

            # initial state
            task_lock = TaskLock()
            task_lock.date = datetime.datetime(2010, 01, 01)
            task_lock.task_id = task.id
            task_lock.project_id = project_id
            session_v2.add(task_lock)

            prev_checkin = None
            for h in session_v1.query(tiles_history) \
                .filter(
                    tiles_history.c.job_id == job.id,
                    tiles_history.c.x == tile.x,
                    tiles_history.c.y == tile.y,
                    tiles_history.c.zoom == tile.zoom) \
                .order_by('tiles_history."update"'):  # noqa

                # we don't care about locks (checkout)
                and_(
                    TaskLock.project_id == job.id,
                    TaskLock.task_id == task.id
                )
            )
            session_v2.execute(d)

            # initial state
            task_state = TaskState()
            task_state.date = datetime.datetime(2010, 01, 01)
            task_state.task_id = task.id
            task_state.project_id = project_id
            session_v2.add(task_state)

            # initial state
            task_lock = TaskLock()
            task_lock.date = datetime.datetime(2010, 01, 01)
            task_lock.task_id = task.id
            task_lock.project_id = project_id
            session_v2.add(task_lock)

            prev_checkin = None
            for h in session_v1.query(tiles_history) \
                .filter(
                    tiles_history.c.job_id == job.id,
                    tiles_history.c.x == tile.x,
                    tiles_history.c.y == tile.y,
                    tiles_history.c.zoom == tile.zoom) \
                .order_by('tiles_history."update"'):  # noqa

                # we don't care about locks (checkout)