Skip to content

Commit

Permalink
fix the tags side
Browse files Browse the repository at this point in the history
  • Loading branch information
ciur committed Feb 1, 2025
1 parent 03688bb commit 1b73cec
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
"""add on casecase=delete for tags association table
Revision ID: bafd773c8533
Revises: 88b6b2d497ea
Create Date: 2025-02-01 08:59:18.660765
"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'bafd773c8533'
down_revision: Union[str, None] = '88b6b2d497ea'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('nodes_tags_tag_id_fkey', 'nodes_tags', type_='foreignkey')
op.create_foreign_key(None, 'nodes_tags', 'tags', ['tag_id'], ['id'], ondelete='CASCADE')
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'nodes_tags', type_='foreignkey')
op.create_foreign_key('nodes_tags_tag_id_fkey', 'nodes_tags', 'tags', ['tag_id'], ['id'])
# ### end Alembic commands ###
2 changes: 1 addition & 1 deletion papermerge/core/features/tags/db/orm.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class NodeTagsAssociation(Base):
ForeignKey("nodes.id", ondelete="CASCADE")
)
tag_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("tags.id"),
ForeignKey("tags.id", ondelete="CASCADE"),
)


Expand Down
55 changes: 55 additions & 0 deletions papermerge/core/features/tags/tests/test_router_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from papermerge.core.db.engine import Session
from papermerge.core import orm, schema
from papermerge.core.tests.types import AuthTestClient
from papermerge.core.features.nodes.db import api as nodes_dbapi


def test_create_tag_route(auth_api_client: AuthTestClient, db_session: Session):
Expand Down Expand Up @@ -133,3 +134,57 @@ def test_get_all_tags_no_pagination_per_user(make_tag, make_api_client):
items_user_b = [schema.Tag(**item) for item in response.json()]

assert len(items_user_b) == user_b_tags_count


def test_delete_tag_which_has_associated_folder(
make_folder, make_tag, db_session, user, auth_api_client
):
folder = make_folder(title="My Documents", user=user, parent=user.home_folder)
tag = make_tag(name="important", user=user)

nodes_dbapi.assign_node_tags(
db_session,
node_id=folder.id,
tags=["important"],
user_id=user.id,
)

# delete tagged folder
response = auth_api_client.delete(f"/tags/{tag.id}")

assert response.status_code == 204

# folder still exists
q = db_session.query(orm.Folder).filter(orm.Folder.id == folder.id)
assert db_session.query(q.exists()).scalar() is True

# but tag was deleted
q_tag = db_session.query(orm.Tag).filter(orm.Tag.name == "important")
assert db_session.query(q_tag.exists()).scalar() is False


def test_delete_tag_which_has_associated_document(
make_document, make_tag, db_session, user, auth_api_client
):
doc = make_document(title="My Contract", user=user, parent=user.home_folder)
tag = make_tag(name="important", user=user)

nodes_dbapi.assign_node_tags(
db_session,
node_id=doc.id,
tags=["important"],
user_id=user.id,
)

# delete tagged folder
response = auth_api_client.delete(f"/tags/{tag.id}")

assert response.status_code == 204

# document still exists
q = db_session.query(orm.Document).filter(orm.Document.id == doc.id)
assert db_session.query(q.exists()).scalar() is True

# but tag was deleted
q_tag = db_session.query(orm.Tag).filter(orm.Tag.name == "important")
assert db_session.query(q_tag.exists()).scalar() is False

0 comments on commit 1b73cec

Please sign in to comment.