From dfdea74c588aef3995533e2f586aec00fa76cea1 Mon Sep 17 00:00:00 2001 From: Michael Jurke Date: Fri, 2 Sep 2016 11:02:04 +0200 Subject: [PATCH] Add created-, modified- and finish_date filters to userstories --- CHANGELOG.md | 1 + taiga/projects/userstories/api.py | 5 +- tests/integration/test_userstories.py | 110 ++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dcee9c3..50dae19b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ - Cleanup hooks code. - Add created-, modified-, finished- and finish_date queryset filters - Support exact match, gt, gte, lt, lte + - added issues, tasks and userstories accordingly ### Misc - [API] Improve performance of some calls over list. diff --git a/taiga/projects/userstories/api.py b/taiga/projects/userstories/api.py index 61911d61..3b6e108a 100644 --- a/taiga/projects/userstories/api.py +++ b/taiga/projects/userstories/api.py @@ -64,7 +64,10 @@ class UserStoryViewSet(OCCResourceMixin, VotedResourceMixin, HistoryResourceMixi filters.TagsFilter, filters.WatchersFilter, filters.QFilter, - filters.OrderByFilterMixin) + filters.OrderByFilterMixin, + filters.CreatedDateFilter, + filters.ModifiedDateFilter, + filters.FinishDateFilter) retrieve_exclude_filters = (filters.OwnersFilter, filters.AssignedToFilter, filters.StatusesFilter, diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index b777b186..c9cd4bb1 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -19,6 +19,10 @@ import uuid import csv +import pytz + +from datetime import datetime, timedelta +from urllib.parse import quote from unittest import mock from django.core.urlresolvers import reverse @@ -501,6 +505,112 @@ def test_get_total_points(client): assert us_mixed.get_total_points() == 1.0 +def test_api_filter_by_created_date(client): + user = f.UserFactory(is_superuser=True) + one_day_ago = datetime.now(pytz.utc) - timedelta(days=1) + + old_userstory = f.create_userstory(owner=user, created_date=one_day_ago) + userstory = f.create_userstory(owner=user, subject="test") + + url = reverse("userstories-list") + "?created_date=%s" % ( + quote(userstory.created_date.isoformat()) + ) + + client.login(userstory.owner) + response = client.get(url) + number_of_userstories = len(response.data) + + assert response.status_code == 200 + assert number_of_userstories == 1 + assert response.data[0]["subject"] == userstory.subject + + +def test_api_filter_by_created_date__lt(client): + user = f.UserFactory(is_superuser=True) + one_day_ago = datetime.now(pytz.utc) - timedelta(days=1) + + old_userstory = f.create_userstory( + owner=user, created_date=one_day_ago, subject="old test" + ) + userstory = f.create_userstory(owner=user) + + url = reverse("userstories-list") + "?created_date__lt=%s" % ( + quote(userstory.created_date.isoformat()) + ) + + client.login(userstory.owner) + response = client.get(url) + number_of_userstories = len(response.data) + + assert response.status_code == 200 + assert response.data[0]["subject"] == old_userstory.subject + + +def test_api_filter_by_created_date__lte(client): + user = f.UserFactory(is_superuser=True) + one_day_ago = datetime.now(pytz.utc) - timedelta(days=1) + + old_userstory = f.create_userstory(owner=user, created_date=one_day_ago) + userstory = f.create_userstory(owner=user) + + url = reverse("userstories-list") + "?created_date__lte=%s" % ( + quote(userstory.created_date.isoformat()) + ) + + client.login(userstory.owner) + response = client.get(url) + number_of_userstories = len(response.data) + + assert response.status_code == 200 + assert number_of_userstories == 2 + + +def test_api_filter_by_modified_date__gte(client): + user = f.UserFactory(is_superuser=True) + + older_userstory = f.create_userstory(owner=user) + userstory = f.create_userstory(owner=user, subject="test") + # we have to refresh as it slightly differs + userstory.refresh_from_db() + + assert older_userstory.modified_date < userstory.modified_date + + url = reverse("userstories-list") + "?modified_date__gte=%s" % ( + quote(userstory.modified_date.isoformat()) + ) + + client.login(userstory.owner) + response = client.get(url) + number_of_userstories = len(response.data) + + assert response.status_code == 200 + assert number_of_userstories == 1 + assert response.data[0]["subject"] == userstory.subject + + +def test_api_filter_by_finish_date(client): + user = f.UserFactory(is_superuser=True) + one_day_later = datetime.now(pytz.utc) + timedelta(days=1) + + userstory = f.create_userstory(owner=user) + userstory_to_finish = f.create_userstory( + owner=user, finish_date=one_day_later, subject="test" + ) + + assert userstory_to_finish.finish_date + + url = reverse("userstories-list") + "?finish_date__gte=%s" % ( + quote(userstory_to_finish.finish_date.isoformat()) + ) + client.login(userstory.owner) + response = client.get(url) + number_of_userstories = len(response.data) + + assert response.status_code == 200 + assert number_of_userstories == 1 + assert response.data[0]["subject"] == userstory_to_finish.subject + + def test_api_filters_data(client): project = f.ProjectFactory.create() user1 = f.UserFactory.create(is_superuser=True)