def test_attempt_setting_tags_when_some_tags_have_been_restricted(): """ Verify that tags are excluded from being added to a submission's tags if the tag is restricted """ userid_owner = db_utils.create_user() userid_tag_adder = db_utils.create_user() journalid = db_utils.create_journal(userid_owner) charid = db_utils.create_character(userid_owner) submitid = db_utils.create_submission(userid_owner) restricted_tag = searchtag.parse_restricted_tags("pearl") searchtag.edit_user_tag_restrictions(userid_owner, restricted_tag) searchtag.associate(userid_tag_adder, tags, submitid=submitid) searchtag.associate(userid_tag_adder, tags, charid=charid) searchtag.associate(userid_tag_adder, tags, journalid=journalid) # Verify that the "pearl" tag was not added submission_tags = searchtag.select(submitid=submitid) assert tags_two == set(submission_tags) character_tags = searchtag.select(charid=charid) assert tags_two == set(character_tags) journal_tags = searchtag.select(journalid=journalid) assert tags_two == set(journal_tags)
def test_moderators_and_above_can_add_restricted_tags_successfully(monkeypatch): """ Moderators (and admins, technical, and directors) can add restricted tags to content. Developers are not included in this test, as they are for all intents and purposes just normal user accounts. """ userid_owner = db_utils.create_user() mod_tag_adder = db_utils.create_user() monkeypatch.setattr(staff, 'MODS', frozenset([mod_tag_adder])) journalid = db_utils.create_journal(userid_owner) charid = db_utils.create_character(userid_owner) submitid = db_utils.create_submission(userid_owner) restricted_tag = searchtag.parse_restricted_tags("pearl") searchtag.edit_user_tag_restrictions(userid_owner, restricted_tag) searchtag.associate(mod_tag_adder, tags, submitid=submitid) searchtag.associate(mod_tag_adder, tags, charid=charid) searchtag.associate(mod_tag_adder, tags, journalid=journalid) # Verify that all tags were added successfully. 'pearl' is restricted. submission_tags = searchtag.select(submitid=submitid) assert tags == set(submission_tags) character_tags = searchtag.select(charid=charid) assert tags == set(character_tags) journal_tags = searchtag.select(journalid=journalid) assert tags == set(journal_tags)
def select_view_api(userid, journalid, anyway=False, increment_views=False): rating = d.get_rating(userid) journal = _select_journal_and_check( userid, journalid, rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views) return { 'journalid': journalid, 'title': journal['title'], 'owner': journal['username'], 'owner_login': d.get_sysname(journal['username']), 'owner_media': api.tidy_all_media( media.get_user_media(journal['userid'])), 'content': text.markdown(journal['content']), 'tags': searchtag.select(journalid=journalid), 'link': d.absolutify_url('/journal/%d/%s' % (journalid, text.slug_for(journal['title']))), 'type': 'journal', 'rating': ratings.CODE_TO_NAME[journal['rating']], 'views': journal['page_views'], 'favorites': favorite.count(journalid, 'journal'), 'comments': comment.count(journalid, 'journal'), 'favorited': favorite.check(userid, journalid=journalid), 'friends_only': 'f' in journal['settings'], 'posted_at': d.iso8601(journal['unixtime']), }
def select_view(userid, charid, rating, ignore=True, anyway=None): query = _select_character_and_check( userid, charid, rating=rating, ignore=ignore, anyway=anyway == "true") login = define.get_sysname(query['username']) return { 'charid': charid, 'userid': query['userid'], 'username': query['username'], 'user_media': media.get_user_media(query['userid']), 'mine': userid == query['userid'], 'unixtime': query['unixtime'], 'title': query['char_name'], 'age': query['age'], 'gender': query['gender'], 'height': query['height'], 'weight': query['weight'], 'species': query['species'], 'content': query['content'], 'rating': query['rating'], 'settings': query['settings'], 'reported': report.check(charid=charid), 'favorited': favorite.check(userid, charid=charid), 'page_views': query['page_views'], 'friends_only': 'f' in query['settings'], 'hidden_submission': 'h' in query['settings'], 'fave_count': favorite.count(charid, 'character'), 'comments': comment.select(userid, charid=charid), 'sub_media': fake_media_items( charid, query['userid'], login, query['settings']), 'tags': searchtag.select(charid=charid), }
def select_view_api(userid, journalid, anyway=False, increment_views=False): rating = d.get_rating(userid) journal = _select_journal_and_check( userid, journalid, rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views) return { 'journalid': journalid, 'title': journal['title'], 'owner': journal['username'], 'owner_login': d.get_sysname(journal['username']), 'owner_media': api.tidy_all_media( media.get_user_media(journal['userid'])), 'content': text.markdown(journal['content']), 'tags': searchtag.select(journalid=journalid), 'link': d.absolutify_url('/journal/%d/%s' % (journalid, text.slug_for(journal['title']))), 'type': 'journal', 'rating': ratings.CODE_TO_NAME[journal['rating']], 'views': journal['page_views'], 'favorites': favorite.count(journalid, 'journal'), 'comments': comment.count(journalid, 'journal'), 'favorited': favorite.check(userid, journalid=journalid), 'friends_only': 'f' in journal['settings'], 'posted_at': d.iso8601(journal['unixtime']), }
def select_view(userid, charid, rating, ignore=True, anyway=None): query = _select_character_and_check( userid, charid, rating=rating, ignore=ignore, anyway=anyway == 'anyway') login = define.get_sysname(query['username']) return { 'charid': charid, 'userid': query['userid'], 'username': query['username'], 'user_media': media.get_user_media(query['userid']), 'mine': userid == query['userid'], 'unixtime': query['unixtime'], 'title': query['char_name'], 'age': query['age'], 'gender': query['gender'], 'height': query['height'], 'weight': query['weight'], 'species': query['species'], 'content': query['content'], 'rating': query['rating'], 'settings': query['settings'], 'reported': report.check(charid=charid), 'favorited': favorite.check(userid, charid=charid), 'page_views': query['page_views'], 'friends_only': 'f' in query['settings'], 'hidden_submission': 'h' in query['settings'], 'fave_count': favorite.count(charid, 'character'), 'comments': comment.select(userid, charid=charid), 'sub_media': fake_media_items( charid, query['userid'], login, query['settings']), 'tags': searchtag.select(charid=charid), }
def select_view(userid, rating, journalid, ignore=True, anyway=None): journal = _select_journal_and_check(userid, journalid, rating=rating, ignore=ignore, anyway=anyway == "true") return { 'journalid': journalid, 'userid': journal['userid'], 'username': journal['username'], 'user_media': media.get_user_media(journal['userid']), 'mine': userid == journal['userid'], 'unixtime': journal['unixtime'], 'title': journal['title'], 'content': journal['content'], 'rating': journal['rating'], 'settings': journal['settings'], 'page_views': journal['page_views'], 'reported': report.check(journalid=journalid), 'favorited': favorite.check(userid, journalid=journalid), 'friends_only': 'f' in journal['settings'], 'hidden_submission': 'h' in journal['settings'], 'fave_count': favorite.count(journalid, 'journal'), 'tags': searchtag.select(journalid=journalid), 'comments': comment.select(userid, journalid=journalid), }
def test_adding_tags_when_no_tags_previously_existed(): userid_owner = db_utils.create_user() userid_tag_adder = db_utils.create_user() journalid = db_utils.create_journal(userid_owner) charid = db_utils.create_character(userid_owner) submitid = db_utils.create_submission(userid_owner) searchtag.associate(userid_tag_adder, tags, submitid=submitid) searchtag.associate(userid_tag_adder, tags, charid=charid) searchtag.associate(userid_tag_adder, tags, journalid=journalid) submission_tags = searchtag.select(submitid=submitid) assert tags == set(submission_tags) character_tags = searchtag.select(charid=charid) assert tags == set(character_tags) journal_tags = searchtag.select(journalid=journalid) assert tags == set(journal_tags)
def select_view_api(userid, submitid, anyway=False, increment_views=False): rating = d.get_rating(userid) db = d.connect() sub = db.query(orm.Submission).get(submitid) if sub is None or 'hidden' in sub.settings: raise WeasylError("submissionRecordMissing") sub_rating = sub.rating.code if 'friends-only' in sub.settings and not frienduser.check(userid, sub.userid): raise WeasylError("submissionRecordMissing") elif sub_rating > rating and userid != sub.userid: raise WeasylError("RatingExceeded") elif not anyway and ignoreuser.check(userid, sub.userid): raise WeasylError("UserIgnored") elif not anyway and blocktag.check(userid, submitid=submitid): raise WeasylError("TagBlocked") description = sub.content embedlink = None if 'embedded-content' in sub.settings: embedlink, _, description = description.partition('\n') elif 'gdocs-embed' in sub.settings: embedlink = sub.google_doc_embed.embed_url views = sub.page_views if increment_views and d.common_view_content(userid, submitid, 'submit'): views += 1 return { 'submitid': submitid, 'title': sub.title, 'owner': sub.owner.profile.username, 'owner_login': sub.owner.login_name, 'owner_media': api.tidy_all_media(media.get_user_media(sub.userid)), 'media': api.tidy_all_media(media.get_submission_media(submitid)), 'description': text.markdown(description), 'embedlink': embedlink, 'folderid': sub.folderid, 'folder_name': sub.folder.title if sub.folderid else None, 'posted_at': d.iso8601(sub.unixtime), 'tags': searchtag.select(submitid=submitid), 'link': d.absolutify_url("/submission/%d/%s" % (submitid, text.slug_for(sub.title))), 'type': 'submission', 'subtype': m.CATEGORY_PARSABLE_MAP[sub.subtype // 1000 * 1000], 'rating': sub.rating.name, 'views': views, 'favorites': favorite.count(submitid), 'comments': comment.count(submitid), 'favorited': favorite.check(userid, submitid=submitid), 'friends_only': 'friends-only' in sub.settings, }
def select_view_api(userid, submitid, anyway=False, increment_views=False): rating = d.get_rating(userid) db = d.connect() sub = db.query(orm.Submission).get(submitid) if sub is None or 'hidden' in sub.settings: raise WeasylError("submissionRecordMissing") sub_rating = sub.rating.code if 'friends-only' in sub.settings and not frienduser.check(userid, sub.userid): raise WeasylError("submissionRecordMissing") elif sub_rating > rating and userid != sub.userid: raise WeasylError("RatingExceeded") elif not anyway and ignoreuser.check(userid, sub.userid): raise WeasylError("UserIgnored") elif not anyway and blocktag.check(userid, submitid=submitid): raise WeasylError("TagBlocked") description = sub.content embedlink = None if 'embedded-content' in sub.settings: embedlink, _, description = description.partition('\n') elif 'gdocs-embed' in sub.settings: embedlink = sub.google_doc_embed.embed_url views = sub.page_views if increment_views and d.common_view_content(userid, submitid, 'submit'): views += 1 return { 'submitid': submitid, 'title': sub.title, 'owner': sub.owner.profile.username, 'owner_login': sub.owner.login_name, 'owner_media': api.tidy_all_media(media.get_user_media(sub.userid)), 'media': api.tidy_all_media(media.get_submission_media(submitid)), 'description': text.markdown(description), 'embedlink': embedlink, 'folderid': sub.folderid, 'folder_name': sub.folder.title if sub.folderid else None, 'posted_at': d.iso8601(sub.unixtime), 'tags': searchtag.select(submitid=submitid), 'link': d.absolutify_url("/submission/%d/%s" % (submitid, text.slug_for(sub.title))), 'type': 'submission', 'subtype': m.CATEGORY_PARSABLE_MAP[sub.subtype // 1000 * 1000], 'rating': sub.rating.name, 'views': views, 'favorites': favorite.count(submitid), 'comments': comment.count(submitid), 'favorited': favorite.check(userid, submitid=submitid), 'friends_only': 'friends-only' in sub.settings, }
def test_removing_tags(): userid_owner = db_utils.create_user() userid_tag_adder = db_utils.create_user() journalid = db_utils.create_journal(userid_owner) charid = db_utils.create_character(userid_owner) submitid = db_utils.create_submission(userid_owner) searchtag.associate(userid_tag_adder, tags, submitid=submitid) searchtag.associate(userid_tag_adder, tags, charid=charid) searchtag.associate(userid_tag_adder, tags, journalid=journalid) # Remove the 'pearl' tag searchtag.associate(userid_tag_adder, tags_two, submitid=submitid) searchtag.associate(userid_tag_adder, tags_two, charid=charid) searchtag.associate(userid_tag_adder, tags_two, journalid=journalid) submission_tags = searchtag.select(submitid=submitid) assert tags_two == set(submission_tags) character_tags = searchtag.select(charid=charid) assert tags_two == set(character_tags) journal_tags = searchtag.select(journalid=journalid) assert tags_two == set(journal_tags)
def test_clearing_all_tags(): userid_owner = db_utils.create_user() userid_tag_adder = db_utils.create_user() journalid = db_utils.create_journal(userid_owner) charid = db_utils.create_character(userid_owner) submitid = db_utils.create_submission(userid_owner) searchtag.associate(userid_tag_adder, tags, submitid=submitid) searchtag.associate(userid_tag_adder, tags, charid=charid) searchtag.associate(userid_tag_adder, tags, journalid=journalid) # Clear all tags now that they were initially set empty_tags = set() searchtag.associate(userid_tag_adder, empty_tags, submitid=submitid) searchtag.associate(userid_tag_adder, empty_tags, charid=charid) searchtag.associate(userid_tag_adder, empty_tags, journalid=journalid) submitid_tags = searchtag.select(submitid=submitid) assert submitid_tags == [] charid_tags = searchtag.select(charid=charid) assert charid_tags == [] journalid_tags = searchtag.select(journalid=journalid) assert journalid_tags == []
def select_view(userid, rating, journalid, ignore=True, anyway=None): journal = _select_journal_and_check( userid, journalid, rating=rating, ignore=ignore, anyway=anyway == "true") return { 'journalid': journalid, 'userid': journal['userid'], 'username': journal['username'], 'user_media': media.get_user_media(journal['userid']), 'mine': userid == journal['userid'], 'unixtime': journal['unixtime'], 'title': journal['title'], 'content': journal['content'], 'rating': journal['rating'], 'settings': journal['settings'], 'page_views': journal['page_views'], 'reported': report.check(journalid=journalid), 'favorited': favorite.check(userid, journalid=journalid), 'friends_only': 'f' in journal['settings'], 'hidden_submission': 'h' in journal['settings'], 'fave_count': favorite.count(journalid, 'journal'), 'tags': searchtag.select(journalid=journalid), 'comments': comment.select(userid, journalid=journalid), }
def select_view_api(userid, charid, anyway=False, increment_views=False): rating = define.get_rating(userid) query = _select_character_and_check( userid, charid, rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views) login = define.get_sysname(query['username']) return { 'charid': charid, 'owner': query['username'], 'owner_login': login, 'owner_media': api.tidy_all_media( media.get_user_media(query['userid'])), 'posted_at': define.iso8601(query['unixtime']), 'title': query['char_name'], 'age': query['age'], 'gender': query['gender'], 'height': query['height'], 'weight': query['weight'], 'species': query['species'], 'content': text.markdown(query['content']), 'rating': ratings.CODE_TO_NAME[query['rating']], 'favorited': favorite.check(userid, charid=charid), 'views': query['page_views'], 'friends_only': 'f' in query['settings'], 'favorites': favorite.count(charid, 'character'), 'comments': comment.count(charid, 'character'), 'media': api.tidy_all_media(fake_media_items( charid, query['userid'], login, query['settings'])), 'tags': searchtag.select(charid=charid), 'type': 'character', 'link': define.absolutify_url( '/character/%d/%s' % (charid, text.slug_for(query['char_name']))), }
def select_view_api(userid, charid, anyway=False, increment_views=False): rating = define.get_rating(userid) query = _select_character_and_check( userid, charid, rating=rating, ignore=anyway, anyway=anyway, increment_views=increment_views) login = define.get_sysname(query['username']) return { 'charid': charid, 'owner': query['username'], 'owner_login': login, 'owner_media': api.tidy_all_media( media.get_user_media(query['userid'])), 'posted_at': define.iso8601(query['unixtime']), 'title': query['char_name'], 'age': query['age'], 'gender': query['gender'], 'height': query['height'], 'weight': query['weight'], 'species': query['species'], 'content': text.markdown(query['content']), 'rating': ratings.CODE_TO_NAME[query['rating']], 'favorited': favorite.check(userid, charid=charid), 'views': query['page_views'], 'friends_only': 'f' in query['settings'], 'favorites': favorite.count(charid, 'character'), 'comments': comment.count(charid, 'character'), 'media': api.tidy_all_media(fake_media_items( charid, query['userid'], login, query['settings'])), 'tags': searchtag.select(charid=charid), 'type': 'character', 'link': define.absolutify_url( '/character/%d/%s' % (charid, text.slug_for(query['char_name']))), }