def factory(post=None): if post: return model.PostFeature( time=datetime.utcnow(), user=user_factory(), post=post) return model.PostFeature( time=datetime.utcnow(), user=user_factory())
def feature_post(post: model.Post, user: Optional[model.User]) -> None: assert post post_feature = model.PostFeature() post_feature.time = datetime.utcnow() post_feature.post = post post_feature.user = user db.session.add(post_feature)
def test_get_post_snapshot(post_factory, user_factory, tag_factory): user = user_factory(name='dummy-user') tag1 = tag_factory(names=['dummy-tag1']) tag2 = tag_factory(names=['dummy-tag2']) post = post_factory(id=1) related_post1 = post_factory(id=2) related_post2 = post_factory(id=3) db.session.add_all([user, tag1, tag2, post, related_post1, related_post2]) 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 = [(1, 1), (200, 1), (200, 200), (1, 200)] note.text = 'some text' db.session.add_all([score]) db.session.flush() post.user = user post.checksum = 'deadbeef' post.source = 'example.com' post.tags.append(tag1) post.tags.append(tag2) post.relations.append(related_post1) post.relations.append(related_post2) post.scores.append(score) post.favorited_by.append(favorite) post.features.append(feature) post.notes.append(note) assert snapshots.get_post_snapshot(post) == { 'checksum': 'deadbeef', 'featured': True, 'flags': [], 'notes': [{ 'polygon': [[1, 1], [200, 1], [200, 200], [1, 200]], 'text': 'some text', }], 'relations': [2, 3], 'safety': 'safe', 'source': 'example.com', 'tags': ['dummy-tag1', 'dummy-tag2'], }
def test_get_post_snapshot(post_factory, user_factory, tag_factory): user = user_factory(name="dummy-user") tag1 = tag_factory(names=["dummy-tag1"]) tag2 = tag_factory(names=["dummy-tag2"]) post = post_factory(id=1) related_post1 = post_factory(id=2) related_post2 = post_factory(id=3) db.session.add_all([user, tag1, tag2, post, related_post1, related_post2]) 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 = [(1, 1), (200, 1), (200, 200), (1, 200)] note.text = "some text" db.session.add_all([score]) db.session.flush() post.user = user post.checksum = "deadbeef" post.source = "example.com" post.tags.append(tag1) post.tags.append(tag2) post.relations.append(related_post1) post.relations.append(related_post2) post.scores.append(score) post.favorited_by.append(favorite) post.features.append(feature) post.notes.append(note) assert snapshots.get_post_snapshot(post) == { "checksum": "deadbeef", "featured": True, "flags": [], "notes": [{ "polygon": [[1, 1], [200, 1], [200, 200], [1, 200]], "text": "some text", }], "relations": [2, 3], "safety": "safe", "source": "example.com", "tags": ["dummy-tag1", "dummy-tag2"], }
def test_serialize_post( user_factory, comment_factory, tag_factory, tag_category_factory, pool_factory, pool_category_factory, config_injector, ): config_injector({"data_url": "http://example.com/", "secret": "test"}) with patch("szurubooru.func.comments.serialize_comment"), patch( "szurubooru.func.users.serialize_micro_user"), patch( "szurubooru.func.posts.files.has"): files.has.return_value = True users.serialize_micro_user.side_effect = ( lambda user, auth_user: user.name) comments.serialize_comment.side_effect = ( lambda comment, auth_user: comment.user.name) auth_user = user_factory(name="auth user") post = model.Post() post.post_id = 1 post.creation_time = datetime(1997, 1, 1) post.last_edit_time = datetime(1998, 1, 1) post.tags = [ tag_factory( names=["tag1", "tag2"], category=tag_category_factory("test-cat1"), ), tag_factory(names=["tag3"], category=tag_category_factory("test-cat2")), ] post.safety = model.Post.SAFETY_SAFE post.source = "4gag" post.type = model.Post.TYPE_IMAGE post.checksum = "deadbeef" post.mime_type = "image/jpeg" post.file_size = 100 post.user = user_factory(name="post author") post.canvas_width = 200 post.canvas_height = 300 post.flags = ["loop"] db.session.add(post) db.session.flush() db.session.add_all([ comment_factory( user=user_factory(name="commenter1"), post=post, time=datetime(1999, 1, 1), ), comment_factory( user=user_factory(name="commenter2"), post=post, time=datetime(1999, 1, 2), ), model.PostFavorite( post=post, user=user_factory(name="fav1"), time=datetime(1800, 1, 1), ), model.PostFeature(post=post, user=user_factory(), time=datetime(1999, 1, 1)), model.PostScore( post=post, user=auth_user, score=-1, time=datetime(1800, 1, 1), ), model.PostScore( post=post, user=user_factory(), score=1, time=datetime(1800, 1, 1), ), model.PostScore( post=post, user=user_factory(), score=1, time=datetime(1800, 1, 1), ), ]) db.session.flush() pool1 = pool_factory( id=1, names=["pool1", "pool2"], description="desc", category=pool_category_factory("test-cat1"), ) pool1.last_edit_time = datetime(1998, 1, 1) pool1.posts.append(post) pool2 = pool_factory( id=2, names=["pool3"], description="desc2", category=pool_category_factory("test-cat2"), ) pool2.last_edit_time = datetime(1998, 1, 1) pool2.posts.append(post) db.session.add_all([pool1, pool2]) db.session.flush() result = posts.serialize_post(post, auth_user) result["tags"].sort(key=lambda tag: tag["names"][0]) assert result == { "id": 1, "version": 1, "creationTime": datetime(1997, 1, 1), "lastEditTime": datetime(1998, 1, 1), "safety": "safe", "source": "4gag", "type": "image", "checksum": "deadbeef", "fileSize": 100, "canvasWidth": 200, "canvasHeight": 300, "contentUrl": "http://example.com/posts/1_244c8840887984c4.jpg", "thumbnailUrl": "http://example.com/" "generated-thumbnails/1_244c8840887984c4.jpg", "flags": ["loop"], "tags": [ { "names": ["tag1", "tag2"], "category": "test-cat1", "usages": 1, }, { "names": ["tag3"], "category": "test-cat2", "usages": 1, }, ], "relations": [], "notes": [], "pools": [ { "id": 1, "names": ["pool1", "pool2"], "description": "desc", "category": "test-cat1", "postCount": 1, }, { "id": 2, "names": ["pool3"], "description": "desc2", "category": "test-cat2", "postCount": 1, }, ], "user": "******", "score": 1, "ownFavorite": False, "ownScore": -1, "tagCount": 2, "favoriteCount": 1, "commentCount": 2, "noteCount": 0, "featureCount": 1, "relationCount": 0, "lastFeatureTime": datetime(1999, 1, 1), "favoritedBy": ["fav1"], "hasCustomThumbnail": True, "mimeType": "image/jpeg", "comments": ["commenter1", "commenter2"], }
def test_cascade_deletions(post_factory, user_factory, comment_factory): user = user_factory() post = post_factory() post.user = user post_score = model.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 = model.PostFavorite() post_favorite.post = post post_favorite.user = user post_favorite.time = datetime(1997, 1, 1) post.favorited_by.append(post_favorite) post_feature = model.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 = model.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 = model.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(model.User).count() == 1 assert db.session.query(model.Post).count() == 1 assert db.session.query(model.PostScore).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 assert db.session.query(model.CommentScore).count() == 1 assert db.session.query(model.Snapshot).count() == 1 db.session.delete(user) db.session.commit() assert not db.session.dirty assert db.session.query(model.User).count() == 0 assert db.session.query(model.Post).count() == 1 assert db.session.query(model.Post)[0].user is None assert db.session.query(model.PostScore).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() == 1 assert db.session.query(model.Comment)[0].user is None assert db.session.query(model.CommentScore).count() == 0 assert db.session.query(model.Snapshot).count() == 1 assert db.session.query(model.Snapshot)[0].user is None
def test_serialize_post( user_factory, comment_factory, tag_factory, config_injector): config_injector({'data_url': 'http://example.com/'}) with patch('szurubooru.func.comments.serialize_comment'), \ patch('szurubooru.func.users.serialize_micro_user'), \ patch('szurubooru.func.posts.files.has'): files.has.return_value = True users.serialize_micro_user.side_effect \ = lambda user, auth_user: user.name comments.serialize_comment.side_effect \ = lambda comment, auth_user: comment.user.name auth_user = user_factory(name='auth user') post = model.Post() post.post_id = 1 post.creation_time = datetime(1997, 1, 1) post.last_edit_time = datetime(1998, 1, 1) post.tags = [ tag_factory(names=['tag1', 'tag2']), tag_factory(names=['tag3']) ] post.safety = model.Post.SAFETY_SAFE post.source = '4gag' post.type = model.Post.TYPE_IMAGE post.checksum = 'deadbeef' post.mime_type = 'image/jpeg' post.file_size = 100 post.user = user_factory(name='post author') post.canvas_width = 200 post.canvas_height = 300 post.flags = ['loop'] db.session.add(post) db.session.flush() db.session.add_all([ comment_factory( user=user_factory(name='commenter1'), post=post, time=datetime(1999, 1, 1)), comment_factory( user=user_factory(name='commenter2'), post=post, time=datetime(1999, 1, 2)), model.PostFavorite( post=post, user=user_factory(name='fav1'), time=datetime(1800, 1, 1)), model.PostFeature( post=post, user=user_factory(), time=datetime(1999, 1, 1)), model.PostScore( post=post, user=auth_user, score=-1, time=datetime(1800, 1, 1)), model.PostScore( post=post, user=user_factory(), score=1, time=datetime(1800, 1, 1)), model.PostScore( post=post, user=user_factory(), score=1, time=datetime(1800, 1, 1))]) db.session.flush() result = posts.serialize_post(post, auth_user) result['tags'].sort() assert result == { 'id': 1, 'version': 1, 'creationTime': datetime(1997, 1, 1), 'lastEditTime': datetime(1998, 1, 1), 'safety': 'safe', 'source': '4gag', 'type': 'image', 'checksum': 'deadbeef', 'fileSize': 100, 'canvasWidth': 200, 'canvasHeight': 300, 'contentUrl': 'http://example.com/posts/1.jpg', 'thumbnailUrl': 'http://example.com/generated-thumbnails/1.jpg', 'flags': ['loop'], 'tags': ['tag1', 'tag3'], 'relations': [], 'notes': [], 'user': '******', 'score': 1, 'ownFavorite': False, 'ownScore': -1, 'tagCount': 2, 'favoriteCount': 1, 'commentCount': 2, 'noteCount': 0, 'featureCount': 1, 'relationCount': 0, 'lastFeatureTime': datetime(1999, 1, 1), 'favoritedBy': ['fav1'], 'hasCustomThumbnail': True, 'mimeType': 'image/jpeg', 'comments': ['commenter1', 'commenter2'], }
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