Fixing sql related with tags

remotes/origin/issue/4795/notification_even_they_are_disabled
Alejandro Alonso 2016-10-17 10:22:34 +02:00
parent 4564802fd9
commit b78d1b9a26
2 changed files with 50 additions and 53 deletions

View File

@ -36,24 +36,23 @@ def create_tag(project, tag, color):
def edit_tag(project, from_tag, to_tag, color): def edit_tag(project, from_tag, to_tag, color):
sql = """ sql = """
UPDATE userstories_userstory UPDATE userstories_userstory
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE tasks_task UPDATE tasks_task
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE issues_issue UPDATE issues_issue
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE epics_epic UPDATE epics_epic
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
""" """
sql = sql.format(project_id=project.id, from_tag=from_tag, to_tag=to_tag)
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(sql) cursor.execute(sql, params={"from_tag": from_tag, "to_tag": to_tag, "project_id": project.id})
tags_colors = dict(project.tags_colors) tags_colors = dict(project.tags_colors)
tags_colors.pop(from_tag) tags_colors.pop(from_tag)
@ -71,24 +70,23 @@ def rename_tag(project, from_tag, to_tag, **kwargs):
color = dict(project.tags_colors)[from_tag] color = dict(project.tags_colors)[from_tag]
sql = """ sql = """
UPDATE userstories_userstory UPDATE userstories_userstory
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE tasks_task UPDATE tasks_task
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE issues_issue UPDATE issues_issue
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE epics_epic UPDATE epics_epic
SET tags = array_distinct(array_replace(tags, '{from_tag}', '{to_tag}')) SET tags = array_distinct(array_replace(tags, %(from_tag)s, %(to_tag)s))
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
""" """
sql = sql.format(project_id=project.id, from_tag=from_tag, to_tag=to_tag, color=color)
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(sql) cursor.execute(sql, params={"from_tag": from_tag, "to_tag": to_tag, "project_id": project.id})
tags_colors = dict(project.tags_colors) tags_colors = dict(project.tags_colors)
tags_colors.pop(from_tag) tags_colors.pop(from_tag)
@ -100,24 +98,23 @@ def rename_tag(project, from_tag, to_tag, **kwargs):
def delete_tag(project, tag): def delete_tag(project, tag):
sql = """ sql = """
UPDATE userstories_userstory UPDATE userstories_userstory
SET tags = array_remove(tags, '{tag}') SET tags = array_remove(tags, %(tag)s)
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE tasks_task UPDATE tasks_task
SET tags = array_remove(tags, '{tag}') SET tags = array_remove(tags, %(tag)s)
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE issues_issue UPDATE issues_issue
SET tags = array_remove(tags, '{tag}') SET tags = array_remove(tags, %(tag)s)
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
UPDATE epics_epic UPDATE epics_epic
SET tags = array_remove(tags, '{tag}') SET tags = array_remove(tags, %(tag)s)
WHERE project_id = {project_id}; WHERE project_id = %(project_id)s;
""" """
sql = sql.format(project_id=project.id, tag=tag)
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(sql) cursor.execute(sql, params={"tag": tag, "project_id": project.id})
tags_colors = dict(project.tags_colors) tags_colors = dict(project.tags_colors)
del tags_colors[tag] del tags_colors[tag]

View File

@ -1915,19 +1915,19 @@ def test_create_tag_without_color(client, settings):
def test_edit_tag_only_name(client, settings): def test_edit_tag_only_name(client, settings):
user = f.UserFactory.create() user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user, tags_colors=[("tag", "#123123")]) project = f.ProjectFactory.create(owner=user, tags_colors=[("tag'1", "#123123")])
user_story = f.UserStoryFactory.create(project=project, tags=["tag"]) user_story = f.UserStoryFactory.create(project=project, tags=["tag'1"])
task = f.TaskFactory.create(project=project, tags=["tag"]) task = f.TaskFactory.create(project=project, tags=["tag'1"])
issue = f.IssueFactory.create(project=project, tags=["tag"]) issue = f.IssueFactory.create(project=project, tags=["tag'1"])
epic = f.EpicFactory.create(project=project, tags=["tag"]) epic = f.EpicFactory.create(project=project, tags=["tag'1"])
role = f.RoleFactory.create(project=project, permissions=["view_project"]) role = f.RoleFactory.create(project=project, permissions=["view_project"])
membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True) membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True)
url = reverse("projects-edit-tag", args=(project.id,)) url = reverse("projects-edit-tag", args=(project.id,))
client.login(user) client.login(user)
data = { data = {
"from_tag": "tag", "from_tag": "tag'1",
"to_tag": "renamed_tag" "to_tag": "renamed_tag'1"
} }
client.login(user) client.login(user)
@ -1935,15 +1935,15 @@ def test_edit_tag_only_name(client, settings):
assert response.status_code == 200 assert response.status_code == 200
project = Project.objects.get(id=project.pk) project = Project.objects.get(id=project.pk)
assert project.tags_colors == [["renamed_tag", "#123123"]] assert project.tags_colors == [["renamed_tag'1", "#123123"]]
user_story = UserStory.objects.get(id=user_story.pk) user_story = UserStory.objects.get(id=user_story.pk)
assert user_story.tags == ["renamed_tag"] assert user_story.tags == ["renamed_tag'1"]
task = Task.objects.get(id=task.pk) task = Task.objects.get(id=task.pk)
assert task.tags == ["renamed_tag"] assert task.tags == ["renamed_tag'1"]
issue = Issue.objects.get(id=issue.pk) issue = Issue.objects.get(id=issue.pk)
assert issue.tags == ["renamed_tag"] assert issue.tags == ["renamed_tag'1"]
epic = Epic.objects.get(id=epic.pk) epic = Epic.objects.get(id=epic.pk)
assert epic.tags == ["renamed_tag"] assert epic.tags == ["renamed_tag'1"]
def test_edit_tag_only_color(client, settings): def test_edit_tag_only_color(client, settings):
@ -2013,18 +2013,18 @@ def test_edit_tag(client, settings):
def test_delete_tag(client, settings): def test_delete_tag(client, settings):
user = f.UserFactory.create() user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user, tags_colors=[("tag", "#123123")]) project = f.ProjectFactory.create(owner=user, tags_colors=[("tag'1", "#123123")])
user_story = f.UserStoryFactory.create(project=project, tags=["tag"]) user_story = f.UserStoryFactory.create(project=project, tags=["tag'1"])
task = f.TaskFactory.create(project=project, tags=["tag"]) task = f.TaskFactory.create(project=project, tags=["tag'1"])
issue = f.IssueFactory.create(project=project, tags=["tag"]) issue = f.IssueFactory.create(project=project, tags=["tag'1"])
epic = f.EpicFactory.create(project=project, tags=["tag"]) epic = f.EpicFactory.create(project=project, tags=["tag'1"])
role = f.RoleFactory.create(project=project, permissions=["view_project"]) role = f.RoleFactory.create(project=project, permissions=["view_project"])
membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True) membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True)
url = reverse("projects-delete-tag", args=(project.id,)) url = reverse("projects-delete-tag", args=(project.id,))
client.login(user) client.login(user)
data = { data = {
"tag": "tag" "tag": "tag'1"
} }
client.login(user) client.login(user)
@ -2044,18 +2044,18 @@ def test_delete_tag(client, settings):
def test_mix_tags(client, settings): def test_mix_tags(client, settings):
user = f.UserFactory.create() user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user, tags_colors=[("tag1", "#123123"), ("tag2", "#123123"), ("tag3", "#123123")]) project = f.ProjectFactory.create(owner=user, tags_colors=[("tag'1", "#123123"), ("tag2", "#123123"), ("tag3", "#123123")])
user_story = f.UserStoryFactory.create(project=project, tags=["tag1", "tag3"]) user_story = f.UserStoryFactory.create(project=project, tags=["tag'1", "tag3"])
task = f.TaskFactory.create(project=project, tags=["tag2", "tag3"]) task = f.TaskFactory.create(project=project, tags=["tag2", "tag3"])
issue = f.IssueFactory.create(project=project, tags=["tag1", "tag2", "tag3"]) issue = f.IssueFactory.create(project=project, tags=["tag'1", "tag2", "tag3"])
epic = f.EpicFactory.create(project=project, tags=["tag1", "tag2", "tag3"]) epic = f.EpicFactory.create(project=project, tags=["tag'1", "tag2", "tag3"])
role = f.RoleFactory.create(project=project, permissions=["view_project"]) role = f.RoleFactory.create(project=project, permissions=["view_project"])
membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True) membership = f.MembershipFactory.create(project=project, user=user, role=role, is_admin=True)
url = reverse("projects-mix-tags", args=(project.id,)) url = reverse("projects-mix-tags", args=(project.id,))
client.login(user) client.login(user)
data = { data = {
"from_tags": ["tag1", "tag2"], "from_tags": ["tag'1", "tag2"],
"to_tag": "tag2" "to_tag": "tag2"
} }