Skip to content

Commit

Permalink
Fixes to orderby.
Browse files Browse the repository at this point in the history
Use TIMESTAMP as Date's precission is only 1 day.
  • Loading branch information
teleyinex committed Mar 29, 2017
1 parent 48e9c7b commit 5b0208f
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
7 changes: 4 additions & 3 deletions pybossa/repositories/__init__.py
Expand Up @@ -38,7 +38,8 @@
import json
from pybossa.model.project import Project
from sqlalchemy.sql import and_
from sqlalchemy import cast, Text, func, Date, desc
from sqlalchemy import cast, Text, func, desc
from sqlalchemy.types import TIMESTAMP
from sqlalchemy.orm.base import _entity_descriptor

class Repository(object):
Expand Down Expand Up @@ -145,9 +146,9 @@ def _set_orderby_desc(self, query, model, limit,
query = query.order_by(desc(
cast(getattr(model,
orderby),
Date)))
TIMESTAMP)))
else:
query = query.order_by(cast(getattr(model, orderby), Date))
query = query.order_by(cast(getattr(model, orderby), TIMESTAMP))
else:
if orderby != 'fav_user_ids':
if descending:
Expand Down
32 changes: 32 additions & 0 deletions test/test_repository/test_task_repository.py
Expand Up @@ -34,6 +34,38 @@ def setUp(self):
self.task_repo = TaskRepository(db)


def test_orderby(self):
"""Test orderby."""
project = ProjectFactory.create()
task1 = TaskFactory.create(fav_user_ids=[1], project=project)
task2 = TaskFactory.create(fav_user_ids=None, project=project)
task3 = TaskFactory.create(fav_user_ids=[1, 2, 3], project=project)

task = self.task_repo.filter_tasks_by(orderby='id', desc=True,
project_id=project.id, limit=1)[0]
assert task == task3, (task, task3)

task = self.task_repo.filter_tasks_by(orderby='id', desc=False,
project_id=project.id, limit=1)[0]
assert task == task1, (task, task1)


task = self.task_repo.filter_tasks_by(orderby='created', desc=True,
project_id=project.id)[0]
assert task == task3, (task.id, task3.id)

task = self.task_repo.filter_tasks_by(orderby='created', desc=False,
project_id=project.id)[0]
assert task == task1, (task.created, task1.created)

task = self.task_repo.filter_tasks_by(orderby='fav_user_ids', desc=True,
project_id=project.id)[0][0]
assert task == task3, (task.id, task3.id)

task = self.task_repo.filter_tasks_by(orderby='fav_user_ids', desc=False,
project_id=project.id)[0][0]
assert task == task2, (task.fav_user_ids, task2.fav_user_ids)

def test_handle_info_json_plain_text(self):
"""Test handle info in JSON as plain text works."""
TaskFactory.create(info='answer')
Expand Down

0 comments on commit 5b0208f

Please sign in to comment.