Commit f495d34b authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

fix missing project_id in rpc.delete_tag

parent bd6de05d
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2211,15 +2211,18 @@ def set_tag(


@_rpc_groups(["Tags"])
def delete_tag(user: User, uid: str) -> bool:
def delete_tag(user: User, uid: str, project_id: int) -> bool:
    """
    Remove (delete) a tag based on its uid.
    Remove (delete) a tag based on its project and uid.

    Beware: This will remove ALL associations with the tag.
    """
    project = Project.objects.filter(pk=project_id).first()
    if not project:
        raise ServiceException(NO_SUCH_PROJECT)
    try:
        tag_instance = Tag.objects.get(uid=uid)
        UserAccess(user, tag_instance.project).check_delete(tag_instance)
        tag_instance = Tag.objects.get(project=project, uid=uid)
        UserAccess(user, project).check_delete(tag_instance)
        tag_instance.delete()
        return True
    except Tag.DoesNotExist:
+22 −0
Original line number Diff line number Diff line
@@ -961,6 +961,28 @@ class ServiceTestCase(TestCase):
        tags = methods.tags(self.test_user, self.test_project.pk)
        self.assertEqual(len(tags), 1)

    def test_delete_tag_is_scoped_to_project(self):
        other_project = models.Project.objects.create(label="other tag project")
        tag = models.Tag.objects.create(
            project=self.test_project, uid="shared tag", label="local"
        )
        other_tag = models.Tag.objects.create(
            project=other_project, uid="shared tag", label="foreign"
        )

        self.assertTrue(
            methods.delete_tag(self.test_user, tag.uid, self.test_project.pk)
        )

        self.assertFalse(models.Tag.objects.filter(pk=tag.pk).exists())
        self.assertTrue(models.Tag.objects.filter(pk=other_tag.pk).exists())

    def test_delete_tag_rejects_unknown_project(self):
        with self.assertRaises(ServiceException) as context:
            methods.delete_tag(self.test_user, "tag", -1)

        self.assertEqual(context.exception.message, methods.NO_SUCH_PROJECT)

    def test_add_collection_from_path(self):
        ancestors_labels = ["toto", "tata"]
        collections = methods.add_collection_from_path(