server/users: fix cascade deletions
This commit is contained in:
parent
ff189a3915
commit
2429e95102
|
@ -1,5 +1,5 @@
|
|||
from sqlalchemy import Column, Integer, DateTime, UnicodeText, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import relationship, backref
|
||||
from sqlalchemy.sql.expression import func
|
||||
from szurubooru.db.base import Base
|
||||
|
||||
|
@ -14,7 +14,9 @@ class CommentScore(Base):
|
|||
score = Column('score', Integer, nullable=False)
|
||||
|
||||
comment = relationship('Comment')
|
||||
user = relationship('User')
|
||||
user = relationship(
|
||||
'User',
|
||||
backref=backref('comment_scores', cascade='all, delete-orphan'))
|
||||
|
||||
class Comment(Base):
|
||||
__tablename__ = 'comment'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from sqlalchemy import (
|
||||
Column, Integer, DateTime, Unicode, UnicodeText, PickleType, ForeignKey)
|
||||
from sqlalchemy.orm import relationship, column_property, object_session
|
||||
from sqlalchemy.orm import relationship, column_property, object_session, backref
|
||||
from sqlalchemy.sql.expression import func, select
|
||||
from szurubooru.db.base import Base
|
||||
from szurubooru.db.comment import Comment
|
||||
|
@ -16,7 +16,9 @@ class PostFeature(Base):
|
|||
time = Column('time', DateTime, nullable=False)
|
||||
|
||||
post = relationship('Post')
|
||||
user = relationship('User')
|
||||
user = relationship(
|
||||
'User',
|
||||
backref=backref('post_features', cascade='all, delete-orphan'))
|
||||
|
||||
class PostScore(Base):
|
||||
__tablename__ = 'post_score'
|
||||
|
@ -29,7 +31,9 @@ class PostScore(Base):
|
|||
score = Column('score', Integer, nullable=False)
|
||||
|
||||
post = relationship('Post')
|
||||
user = relationship('User')
|
||||
user = relationship(
|
||||
'User',
|
||||
backref=backref('post_scores', cascade='all, delete-orphan'))
|
||||
|
||||
class PostFavorite(Base):
|
||||
__tablename__ = 'post_favorite'
|
||||
|
@ -41,7 +45,9 @@ class PostFavorite(Base):
|
|||
time = Column('time', DateTime, nullable=False)
|
||||
|
||||
post = relationship('Post')
|
||||
user = relationship('User')
|
||||
user = relationship(
|
||||
'User',
|
||||
backref=backref('post_favorites', cascade='all, delete-orphan'))
|
||||
|
||||
class PostNote(Base):
|
||||
__tablename__ = 'post_note'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from sqlalchemy import Column, Integer, Unicode, DateTime
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql.expression import func
|
||||
from szurubooru.db.base import Base
|
||||
from szurubooru.db.post import Post, PostScore, PostFavorite
|
||||
|
@ -29,6 +30,8 @@ class User(Base):
|
|||
avatar_style = Column(
|
||||
'avatar_style', Unicode(32), nullable=False, default=AVATAR_GRAVATAR)
|
||||
|
||||
comments = relationship('Comment')
|
||||
|
||||
@property
|
||||
def post_count(self):
|
||||
from szurubooru.db import session
|
||||
|
|
|
@ -96,3 +96,74 @@ def test_disliked_post_count(user_factory, post_factory):
|
|||
db.session.refresh(user)
|
||||
assert user.liked_post_count == 0
|
||||
assert user.disliked_post_count == 1
|
||||
|
||||
def test_cascade_deletions(post_factory, user_factory, comment_factory):
|
||||
user = user_factory()
|
||||
|
||||
post = post_factory()
|
||||
post.user = user
|
||||
|
||||
post_score = db.PostScore()
|
||||
post_score.post = post
|
||||
post_score.user = user
|
||||
post_score.time = datetime(1997, 1, 1)
|
||||
post_score.score = 1
|
||||
post.scores.append(post_score)
|
||||
|
||||
post_favorite = db.PostFavorite()
|
||||
post_favorite.post = post
|
||||
post_favorite.user = user
|
||||
post_favorite.time = datetime(1997, 1, 1)
|
||||
post.favorited_by.append(post_favorite)
|
||||
|
||||
post_feature = db.PostFeature()
|
||||
post_feature.post = post
|
||||
post_feature.user = user
|
||||
post_feature.time = datetime(1997, 1, 1)
|
||||
post.features.append(post_feature)
|
||||
|
||||
comment = comment_factory(post=post, user=user)
|
||||
comment_score = db.CommentScore()
|
||||
comment_score.comment = comment
|
||||
comment_score.user = user
|
||||
comment_score.time = datetime(1997, 1, 1)
|
||||
comment_score.score = 1
|
||||
comment.scores.append(comment_score)
|
||||
|
||||
snapshot = db.Snapshot()
|
||||
snapshot.user = user
|
||||
snapshot.creation_time = datetime(1997, 1, 1)
|
||||
snapshot.resource_type = '-'
|
||||
snapshot.resource_id = '-'
|
||||
snapshot.resource_repr = '-'
|
||||
snapshot.operation = '-'
|
||||
|
||||
db.session.add_all([user, post, comment, snapshot])
|
||||
db.session.flush()
|
||||
|
||||
assert not db.session.dirty
|
||||
assert post.user is not None and post.user.user_id is not None
|
||||
assert db.session.query(db.User).count() == 1
|
||||
assert db.session.query(db.Post).count() == 1
|
||||
assert db.session.query(db.PostScore).count() == 1
|
||||
assert db.session.query(db.PostFeature).count() == 1
|
||||
assert db.session.query(db.PostFavorite).count() == 1
|
||||
assert db.session.query(db.Comment).count() == 1
|
||||
assert db.session.query(db.CommentScore).count() == 1
|
||||
assert db.session.query(db.Snapshot).count() == 1
|
||||
|
||||
db.session.delete(user)
|
||||
db.session.commit()
|
||||
|
||||
assert not db.session.dirty
|
||||
assert db.session.query(db.User).count() == 0
|
||||
assert db.session.query(db.Post).count() == 1
|
||||
assert db.session.query(db.Post)[0].user is None
|
||||
assert db.session.query(db.PostScore).count() == 0
|
||||
assert db.session.query(db.PostFeature).count() == 0
|
||||
assert db.session.query(db.PostFavorite).count() == 0
|
||||
assert db.session.query(db.Comment).count() == 1
|
||||
assert db.session.query(db.Comment)[0].user is None
|
||||
assert db.session.query(db.CommentScore).count() == 0
|
||||
assert db.session.query(db.Snapshot).count() == 1
|
||||
assert db.session.query(db.Snapshot)[0].user is None
|
||||
|
|
Loading…
Reference in New Issue