This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/server/szurubooru/tests/db/test_user.py
2016-08-16 21:51:25 +02:00

180 lines
5.6 KiB
Python

from datetime import datetime
from szurubooru import db
def test_saving_user():
user = db.User()
user.name = 'name'
user.password_salt = 'salt'
user.password_hash = 'hash'
user.email = 'email'
user.rank = 'rank'
user.creation_time = datetime(1997, 1, 1)
user.avatar_style = db.User.AVATAR_GRAVATAR
db.session.add(user)
db.session.flush()
db.session.refresh(user)
assert not db.session.dirty
assert user.name == 'name'
assert user.password_salt == 'salt'
assert user.password_hash == 'hash'
assert user.email == 'email'
assert user.rank == 'rank'
assert user.creation_time == datetime(1997, 1, 1)
assert user.avatar_style == db.User.AVATAR_GRAVATAR
def test_upload_count(user_factory, post_factory):
user = user_factory()
db.session.add(user)
db.session.flush()
assert user.post_count == 0
post1 = post_factory()
post1.user = user
post2 = post_factory()
db.session.add_all([post1, post2])
db.session.flush()
db.session.refresh(user)
assert user.post_count == 1
def test_comment_count(user_factory, comment_factory):
user = user_factory()
db.session.add(user)
db.session.flush()
assert user.comment_count == 0
db.session.add_all([
comment_factory(user=user),
comment_factory(),
])
db.session.flush()
db.session.refresh(user)
assert user.comment_count == 1
def test_favorite_count(user_factory, post_factory):
user1 = user_factory()
user2 = user_factory()
db.session.add(user1)
db.session.flush()
assert user1.comment_count == 0
post1 = post_factory()
post2 = post_factory()
db.session.add_all([
db.PostFavorite(post=post1, time=datetime.utcnow(), user=user1),
db.PostFavorite(post=post2, time=datetime.utcnow(), user=user2),
])
db.session.flush()
db.session.refresh(user1)
assert user1.favorite_post_count == 1
def test_liked_post_count(user_factory, post_factory):
user1 = user_factory()
user2 = user_factory()
db.session.add_all([user1, user2])
db.session.flush()
assert user1.liked_post_count == 0
assert user1.disliked_post_count == 0
post1 = post_factory()
post2 = post_factory()
db.session.add_all([
db.PostScore(post=post1, time=datetime.utcnow(), user=user1, score=1),
db.PostScore(post=post2, time=datetime.utcnow(), user=user2, score=1),
])
db.session.flush()
db.session.refresh(user1)
assert user1.liked_post_count == 1
assert user1.disliked_post_count == 0
def test_disliked_post_count(user_factory, post_factory):
user1 = user_factory()
user2 = user_factory()
db.session.add_all([user1, user2])
db.session.flush()
assert user1.liked_post_count == 0
assert user1.disliked_post_count == 0
post1 = post_factory()
post2 = post_factory()
db.session.add_all([
db.PostScore(post=post1, time=datetime.utcnow(), user=user1, score=-1),
db.PostScore(post=post2, time=datetime.utcnow(), user=user2, score=1),
])
db.session.flush()
db.session.refresh(user1)
assert user1.liked_post_count == 0
assert user1.disliked_post_count == 1
# pylint: disable=too-many-statements
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_pkey = 1
snapshot.resource_name = '-'
snapshot.operation = '-'
db.session.add_all([user, post, comment, snapshot])
db.session.commit()
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