aboutsummaryrefslogtreecommitdiff
path: root/server/szurubooru/tests/model/test_post.py
diff options
context:
space:
mode:
authorrr-2017-02-04 01:08:12 +0100
committerrr-2017-02-05 16:34:45 +0100
commitad842ee8a54c57463b8e28b52970f173ea1d64ea (patch)
tree1238e8270878801a2ddb10bc4db469115c026cab /server/szurubooru/tests/model/test_post.py
parentabf1fc2b2d135299fe7e8a700d4e7a18966d7bfe (diff)
server: refactor + add type hinting
- Added type hinting (for now, 3.5-compatible) - Split `db` namespace into `db` module and `model` namespace - Changed elastic search to be created lazily for each operation - Changed to class based approach in entity serialization to allow stronger typing - Removed `required` argument from `context.get_*` family of functions; now it's implied if `default` argument is omitted - Changed `unalias_dict` implementation to use less magic inputs
Diffstat (limited to 'server/szurubooru/tests/model/test_post.py')
-rw-r--r--server/szurubooru/tests/model/test_post.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/server/szurubooru/tests/model/test_post.py b/server/szurubooru/tests/model/test_post.py
new file mode 100644
index 0000000..f35e275
--- /dev/null
+++ b/server/szurubooru/tests/model/test_post.py
@@ -0,0 +1,138 @@
+from datetime import datetime
+from szurubooru import db, model
+
+
+def test_saving_post(post_factory, user_factory, tag_factory):
+ user = user_factory()
+ tag1 = tag_factory()
+ tag2 = tag_factory()
+ related_post1 = post_factory()
+ related_post2 = post_factory()
+ post = model.Post()
+ post.safety = 'safety'
+ post.type = 'type'
+ post.checksum = 'deadbeef'
+ post.creation_time = datetime(1997, 1, 1)
+ post.last_edit_time = datetime(1998, 1, 1)
+ post.mime_type = 'application/whatever'
+ db.session.add_all([user, tag1, tag2, related_post1, related_post2, post])
+
+ post.user = user
+ post.tags.append(tag1)
+ post.tags.append(tag2)
+ post.relations.append(related_post1)
+ post.relations.append(related_post2)
+ db.session.commit()
+
+ db.session.refresh(post)
+ db.session.refresh(related_post1)
+ db.session.refresh(related_post2)
+ assert not db.session.dirty
+ assert post.user.user_id is not None
+ assert post.safety == 'safety'
+ assert post.type == 'type'
+ assert post.checksum == 'deadbeef'
+ assert post.creation_time == datetime(1997, 1, 1)
+ assert post.last_edit_time == datetime(1998, 1, 1)
+ assert len(post.relations) == 2
+ # relation bidirectionality is realized on business level in func.posts
+ assert len(related_post1.relations) == 0
+ assert len(related_post2.relations) == 0
+
+
+# pylint: disable=too-many-statements
+def test_cascade_deletions(
+ post_factory, user_factory, tag_factory, comment_factory):
+ user = user_factory()
+ tag1 = tag_factory()
+ tag2 = tag_factory()
+ related_post1 = post_factory()
+ related_post2 = post_factory()
+ post = post_factory()
+ comment = comment_factory(post=post, user=user)
+ db.session.add_all([
+ user, tag1, tag2, post, related_post1, related_post2, comment])
+ db.session.flush()
+
+ score = model.PostScore()
+ score.post = post
+ score.user = user
+ score.time = datetime(1997, 1, 1)
+ score.score = 1
+ favorite = model.PostFavorite()
+ favorite.post = post
+ favorite.user = user
+ favorite.time = datetime(1997, 1, 1)
+ feature = model.PostFeature()
+ feature.post = post
+ feature.user = user
+ feature.time = datetime(1997, 1, 1)
+ note = model.PostNote()
+ note.post = post
+ note.polygon = ''
+ note.text = ''
+ db.session.add_all([score, favorite, feature, note])
+ db.session.flush()
+
+ post.user = user
+ post.tags.append(tag1)
+ post.tags.append(tag2)
+ post.relations.append(related_post1)
+ related_post2.relations.append(post)
+ post.scores.append(score)
+ post.favorited_by.append(favorite)
+ post.features.append(feature)
+ post.notes.append(note)
+ db.session.commit()
+
+ assert not db.session.dirty
+ assert post.user is not None and post.user.user_id is not None
+ assert len(post.relations) == 1
+ assert db.session.query(model.User).count() == 1
+ assert db.session.query(model.Tag).count() == 2
+ assert db.session.query(model.Post).count() == 3
+ assert db.session.query(model.PostTag).count() == 2
+ assert db.session.query(model.PostRelation).count() == 2
+ assert db.session.query(model.PostScore).count() == 1
+ assert db.session.query(model.PostNote).count() == 1
+ assert db.session.query(model.PostFeature).count() == 1
+ assert db.session.query(model.PostFavorite).count() == 1
+ assert db.session.query(model.Comment).count() == 1
+
+ db.session.delete(post)
+ db.session.commit()
+
+ assert not db.session.dirty
+ assert db.session.query(model.User).count() == 1
+ assert db.session.query(model.Tag).count() == 2
+ assert db.session.query(model.Post).count() == 2
+ assert db.session.query(model.PostTag).count() == 0
+ assert db.session.query(model.PostRelation).count() == 0
+ assert db.session.query(model.PostScore).count() == 0
+ assert db.session.query(model.PostNote).count() == 0
+ assert db.session.query(model.PostFeature).count() == 0
+ assert db.session.query(model.PostFavorite).count() == 0
+ assert db.session.query(model.Comment).count() == 0
+
+
+def test_tracking_tag_count(post_factory, tag_factory):
+ post = post_factory()
+ tag1 = tag_factory()
+ tag2 = tag_factory()
+ db.session.add_all([tag1, tag2, post])
+ db.session.flush()
+ post.tags.append(tag1)
+ post.tags.append(tag2)
+ db.session.commit()
+ assert len(post.tags) == 2
+ assert post.tag_count == 2
+ db.session.delete(tag1)
+ db.session.commit()
+ db.session.refresh(post)
+ assert len(post.tags) == 1
+ assert post.tag_count == 1
+ db.session.delete(tag2)
+ db.session.commit()
+ db.session.refresh(post)
+ assert len(post.tags) == 0
+ assert post.tag_count == 0

© 2015 - 2026 Jakob L. Kreuze