From e9ca1abf557060e73010d513624b0410e47da10d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 12 Sep 2016 15:34:15 +0200 Subject: [PATCH] Adding epics to user favorites and voted APIs --- taiga/users/services.py | 10 ++++++- tests/integration/test_users.py | 46 ++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/taiga/users/services.py b/taiga/users/services.py index 5923ff11..4b49353e 100644 --- a/taiga/users/services.py +++ b/taiga/users/services.py @@ -325,6 +325,8 @@ def get_watched_list(for_user, from_user, type=None, q=None): row_to_json(users_user) as assigned_to_extra_info FROM ( + {epics_sql} + UNION {userstories_sql} UNION {tasks_sql} @@ -365,6 +367,7 @@ def get_watched_list(for_user, from_user, type=None, q=None): OR (entities.type = 'task' AND 'view_tasks' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) OR (entities.type = 'userstory' AND 'view_us' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) OR (entities.type = 'project' AND 'view_project' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) + OR (entities.type = 'epic' AND 'view_epic' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) ) )) -- END Permissions checking @@ -384,6 +387,7 @@ def get_watched_list(for_user, from_user, type=None, q=None): userstories_sql=_build_sql_for_type(for_user, "userstory", "userstories_userstory", "notifications_watched", slug_column="null"), tasks_sql=_build_sql_for_type(for_user, "task", "tasks_task", "notifications_watched", slug_column="null"), issues_sql=_build_sql_for_type(for_user, "issue", "issues_issue", "notifications_watched", slug_column="null"), + epics_sql=_build_sql_for_type(for_user, "epic", "epics_epic", "notifications_watched", slug_column="null"), projects_sql=_build_watched_sql_for_projects(for_user)) cursor = connection.cursor() @@ -503,6 +507,8 @@ def get_voted_list(for_user, from_user, type=None, q=None): users_user.id as assigned_to_id, row_to_json(users_user) as assigned_to_extra_info FROM ( + {epics_sql} + UNION {userstories_sql} UNION {tasks_sql} @@ -540,6 +546,7 @@ def get_voted_list(for_user, from_user, type=None, q=None): (entities.type = 'issue' AND 'view_issues' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) OR (entities.type = 'task' AND 'view_tasks' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) OR (entities.type = 'userstory' AND 'view_us' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) + OR (entities.type = 'epic' AND 'view_epic' = ANY (array_cat(users_role.permissions, projects_project.anon_permissions))) ) )) -- END Permissions checking @@ -558,7 +565,8 @@ def get_voted_list(for_user, from_user, type=None, q=None): filters_sql=filters_sql, userstories_sql=_build_sql_for_type(for_user, "userstory", "userstories_userstory", "votes_vote", slug_column="null"), tasks_sql=_build_sql_for_type(for_user, "task", "tasks_task", "votes_vote", slug_column="null"), - issues_sql=_build_sql_for_type(for_user, "issue", "issues_issue", "votes_vote", slug_column="null")) + issues_sql=_build_sql_for_type(for_user, "issue", "issues_issue", "votes_vote", slug_column="null"), + epics_sql=_build_sql_for_type(for_user, "epic", "epics_epic", "votes_vote", slug_column="null")) cursor = connection.cursor() params = { diff --git a/tests/integration/test_users.py b/tests/integration/test_users.py index c9bf5fba..3accebb7 100644 --- a/tests/integration/test_users.py +++ b/tests/integration/test_users.py @@ -454,6 +454,9 @@ def test_get_watched_list(): membership = f.MembershipFactory(project=project, role=role, user=fav_user) project.add_watcher(fav_user) + epic = f.EpicFactory(project=project, subject="Testing epic") + epic.add_watcher(fav_user) + user_story = f.UserStoryFactory(project=project, subject="Testing user story") user_story.add_watcher(fav_user) @@ -463,11 +466,12 @@ def test_get_watched_list(): issue = f.IssueFactory(project=project, subject="Testing issue") issue.add_watcher(fav_user) - assert len(get_watched_list(fav_user, viewer_user)) == 4 + assert len(get_watched_list(fav_user, viewer_user)) == 5 assert len(get_watched_list(fav_user, viewer_user, type="project")) == 1 assert len(get_watched_list(fav_user, viewer_user, type="userstory")) == 1 assert len(get_watched_list(fav_user, viewer_user, type="task")) == 1 assert len(get_watched_list(fav_user, viewer_user, type="issue")) == 1 + assert len(get_watched_list(fav_user, viewer_user, type="epic")) == 1 assert len(get_watched_list(fav_user, viewer_user, type="unknown")) == 0 assert len(get_watched_list(fav_user, viewer_user, q="issue")) == 1 @@ -500,6 +504,11 @@ def test_get_voted_list(): role = f.RoleFactory(project=project, permissions=["view_project", "view_us", "view_tasks", "view_issues"]) membership = f.MembershipFactory(project=project, role=role, user=fav_user) + epic = f.EpicFactory(project=project, subject="Testing epic") + content_type = ContentType.objects.get_for_model(epic) + f.VoteFactory(content_type=content_type, object_id=epic.id, user=fav_user) + f.VotesFactory(content_type=content_type, object_id=epic.id, count=1) + user_story = f.UserStoryFactory(project=project, subject="Testing user story") content_type = ContentType.objects.get_for_model(user_story) f.VoteFactory(content_type=content_type, object_id=user_story.id, user=fav_user) @@ -515,7 +524,8 @@ def test_get_voted_list(): f.VoteFactory(content_type=content_type, object_id=issue.id, user=fav_user) f.VotesFactory(content_type=content_type, object_id=issue.id, count=1) - assert len(get_voted_list(fav_user, viewer_user)) == 3 + assert len(get_voted_list(fav_user, viewer_user)) == 4 + assert len(get_voted_list(fav_user, viewer_user, type="epic")) == 1 assert len(get_voted_list(fav_user, viewer_user, type="userstory")) == 1 assert len(get_voted_list(fav_user, viewer_user, type="task")) == 1 assert len(get_voted_list(fav_user, viewer_user, type="issue")) == 1 @@ -530,7 +540,7 @@ def test_get_watched_list_valid_info_for_project(): viewer_user = f.UserFactory() project = f.ProjectFactory(is_private=False, name="Testing project") - role = f.RoleFactory(project=project, permissions=["view_project", "view_us", "view_tasks", "view_issues"]) + role = f.RoleFactory(project=project, permissions=["view_project", "view_epic", "view_us", "view_tasks", "view_issues"]) project.add_watcher(fav_user) raw_project_watch_info = get_watched_list(fav_user, viewer_user)[0] @@ -568,7 +578,7 @@ def test_get_watched_list_for_project_with_ignored_notify_level(): viewer_user = f.UserFactory() project = f.ProjectFactory(is_private=False, name="Testing project", tags=['test', 'tag']) - role = f.RoleFactory(project=project, permissions=["view_project", "view_us", "view_tasks", "view_issues"]) + role = f.RoleFactory(project=project, permissions=["view_project", "view_epic", "view_us", "view_tasks", "view_issues"]) membership = f.MembershipFactory(project=project, role=role, user=fav_user) notify_policy = NotifyPolicy.objects.get(user=fav_user, project=project) notify_policy.notify_level=NotifyLevel.none @@ -624,6 +634,7 @@ def test_get_watched_list_valid_info_for_not_project_types(): project = f.ProjectFactory(is_private=False, name="Testing project") factories = { + "epic": f.EpicFactory, "userstory": f.UserStoryFactory, "task": f.TaskFactory, "issue": f.IssueFactory @@ -680,6 +691,7 @@ def test_get_voted_list_valid_info(): project = f.ProjectFactory(is_private=False, name="Testing project") factories = { + "epic": f.EpicFactory, "userstory": f.UserStoryFactory, "task": f.TaskFactory, "issue": f.IssueFactory @@ -743,6 +755,7 @@ def test_get_watched_list_with_liked_and_voted_objects(client): f.LikeFactory(content_type=content_type, object_id=project.id, user=fav_user) voted_elements_factories = { + "epic": f.EpicFactory, "userstory": f.UserStoryFactory, "task": f.TaskFactory, "issue": f.IssueFactory @@ -793,6 +806,7 @@ def test_get_voted_list_with_watched_objects(client): membership = f.MembershipFactory(project=project, role=role, user=fav_user) voted_elements_factories = { + "epic": f.EpicFactory, "userstory": f.UserStoryFactory, "task": f.TaskFactory, "issue": f.IssueFactory @@ -820,9 +834,12 @@ def test_get_watched_list_permissions(): project = f.ProjectFactory(is_private=True, name="Testing project") project.add_watcher(fav_user) - role = f.RoleFactory(project=project, permissions=["view_project", "view_us", "view_tasks", "view_issues"]) + role = f.RoleFactory(project=project, permissions=["view_project", "view_epic", "view_us", "view_tasks", "view_issues"]) membership = f.MembershipFactory(project=project, role=role, user=viewer_priviliged_user) + epic = f.EpicFactory(project=project, subject="Testing epic") + epic.add_watcher(fav_user) + user_story = f.UserStoryFactory(project=project, subject="Testing user story") user_story.add_watcher(fav_user) @@ -838,13 +855,13 @@ def test_get_watched_list_permissions(): #If the project is private but the viewer user has permissions the votes should # be accesible - assert len(get_watched_list(fav_user, viewer_priviliged_user)) == 4 + assert len(get_watched_list(fav_user, viewer_priviliged_user)) == 5 #If the project is private but has the required anon permissions the votes should # be accesible by any user too - project.anon_permissions = ["view_project", "view_us", "view_tasks", "view_issues"] + project.anon_permissions = ["view_project", "view_epic", "view_us", "view_tasks", "view_issues"] project.save() - assert len(get_watched_list(fav_user, viewer_unpriviliged_user)) == 4 + assert len(get_watched_list(fav_user, viewer_unpriviliged_user)) == 5 def test_get_liked_list_permissions(): @@ -879,9 +896,14 @@ def test_get_voted_list_permissions(): viewer_priviliged_user = f.UserFactory() project = f.ProjectFactory(is_private=True, name="Testing project") - role = f.RoleFactory(project=project, permissions=["view_project", "view_us", "view_tasks", "view_issues"]) + role = f.RoleFactory(project=project, permissions=["view_project", "view_epic", "view_us", "view_tasks", "view_issues"]) membership = f.MembershipFactory(project=project, role=role, user=viewer_priviliged_user) + epic = f.EpicFactory(project=project, subject="Testing epic") + content_type = ContentType.objects.get_for_model(epic) + f.VoteFactory(content_type=content_type, object_id=epic.id, user=fav_user) + f.VotesFactory(content_type=content_type, object_id=epic.id, count=1) + user_story = f.UserStoryFactory(project=project, subject="Testing user story") content_type = ContentType.objects.get_for_model(user_story) f.VoteFactory(content_type=content_type, object_id=user_story.id, user=fav_user) @@ -903,10 +925,10 @@ def test_get_voted_list_permissions(): #If the project is private but the viewer user has permissions the votes should # be accesible - assert len(get_voted_list(fav_user, viewer_priviliged_user)) == 3 + assert len(get_voted_list(fav_user, viewer_priviliged_user)) == 4 #If the project is private but has the required anon permissions the votes should # be accesible by any user too - project.anon_permissions = ["view_project", "view_us", "view_tasks", "view_issues"] + project.anon_permissions = ["view_project", "view_epic", "view_us", "view_tasks", "view_issues"] project.save() - assert len(get_voted_list(fav_user, viewer_unpriviliged_user)) == 3 + assert len(get_voted_list(fav_user, viewer_unpriviliged_user)) == 4