diff options
Diffstat (limited to 'tests/test_websupport.py')
-rw-r--r-- | tests/test_websupport.py | 244 |
1 files changed, 3 insertions, 241 deletions
diff --git a/tests/test_websupport.py b/tests/test_websupport.py index 91f67bf72..ea5777c77 100644 --- a/tests/test_websupport.py +++ b/tests/test_websupport.py @@ -10,14 +10,7 @@ """ from sphinx.websupport import WebSupport -from sphinx.websupport.errors import DocumentNotFoundError, \ - CommentNotAllowedError, UserNotAuthorizedError -from sphinx.websupport.storage import StorageBackend -from sphinx.websupport.storage.differ import CombinedHtmlDiff try: - from sphinx.websupport.storage.sqlalchemystorage import Session, \ - Comment, CommentVote - from sphinx.websupport.storage.sqlalchemy_db import Node sqlalchemy_missing = False except ImportError: sqlalchemy_missing = True @@ -26,10 +19,10 @@ import pytest from util import rootdir, tempdir -@pytest.fixture -def support(request): +@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') +def test_build(request): settings = { - 'srcdir': rootdir / 'root', + 'srcdir': rootdir / 'roots' / 'test-basic', # to use same directory for 'builddir' in each 'support' fixture, using # 'tempdir' (static) value instead of 'tempdir' fixture value. # each test expect result of db value at previous test case. @@ -40,235 +33,4 @@ def support(request): settings.update(marker.kwargs) support = WebSupport(**settings) - yield support - - -with_support = pytest.mark.support - - -class NullStorage(StorageBackend): - pass - - -@with_support(storage=NullStorage()) -def test_no_srcdir(support): - # make sure the correct exception is raised if srcdir is not given. - with pytest.raises(RuntimeError): - support.build() - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_build(support): support.build() - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_get_document(support): - with pytest.raises(DocumentNotFoundError): - support.get_document('nonexisting') - - contents = support.get_document('contents') - assert contents['title'] and contents['body'] \ - and contents['sidebar'] and contents['relbar'] - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_comments(support): - session = Session() - nodes = session.query(Node).all() - first_node = nodes[0] - second_node = nodes[1] - - # Create a displayed comment and a non displayed comment. - comment = support.add_comment('First test comment', - node_id=first_node.id, - username='user_one') - hidden_comment = support.add_comment('Hidden comment', - node_id=first_node.id, - displayed=False) - # Make sure that comments can't be added to a comment where - # displayed == False, since it could break the algorithm that - # converts a nodes comments to a tree. - with pytest.raises(CommentNotAllowedError): - support.add_comment('Not allowed', parent_id=str(hidden_comment['id'])) - # Add a displayed and not displayed child to the displayed comment. - support.add_comment('Child test comment', parent_id=str(comment['id']), - username='user_one') - support.add_comment('Hidden child test comment', - parent_id=str(comment['id']), displayed=False) - # Add a comment to another node to make sure it isn't returned later. - support.add_comment('Second test comment', - node_id=second_node.id, - username='user_two') - - # Access the comments as a moderator. - data = support.get_data(first_node.id, moderator=True) - comments = data['comments'] - children = comments[0]['children'] - assert len(comments) == 2 - assert comments[1]['text'] == '<p>Hidden comment</p>\n' - assert len(children) == 2 - assert children[1]['text'] == '<p>Hidden child test comment</p>\n' - - # Access the comments without being a moderator. - data = support.get_data(first_node.id) - comments = data['comments'] - children = comments[0]['children'] - assert len(comments) == 1 - assert comments[0]['text'] == '<p>First test comment</p>\n' - assert len(children) == 1 - assert children[0]['text'] == '<p>Child test comment</p>\n' - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_user_delete_comments(support): - def get_comment(): - session = Session() - node = session.query(Node).first() - session.close() - return support.get_data(node.id)['comments'][0] - - comment = get_comment() - assert comment['username'] == 'user_one' - # Make sure other normal users can't delete someone elses comments. - with pytest.raises(UserNotAuthorizedError): - support.delete_comment(comment['id'], username='user_two') - # Now delete the comment using the correct username. - support.delete_comment(comment['id'], username='user_one') - comment = get_comment() - assert comment['username'] == '[deleted]' - assert comment['text'] == '[deleted]' - - -called = False - - -def moderation_callback(comment): - global called - called = True - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support(moderation_callback=moderation_callback) -def test_moderation(support): - session = Session() - nodes = session.query(Node).all() - node = nodes[7] - session.close() - accepted = support.add_comment('Accepted Comment', node_id=node.id, - displayed=False) - deleted = support.add_comment('Comment to delete', node_id=node.id, - displayed=False) - # Make sure the moderation_callback is called. - assert called - # Make sure the user must be a moderator. - with pytest.raises(UserNotAuthorizedError): - support.accept_comment(accepted['id']) - with pytest.raises(UserNotAuthorizedError): - support.delete_comment(deleted['id']) - support.accept_comment(accepted['id'], moderator=True) - support.delete_comment(deleted['id'], moderator=True) - comments = support.get_data(node.id)['comments'] - assert len(comments) == 1 - comments = support.get_data(node.id, moderator=True)['comments'] - assert len(comments) == 1 - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_moderator_delete_comments(support): - def get_comment(): - session = Session() - node = session.query(Node).first() - session.close() - return support.get_data(node.id, moderator=True)['comments'][1] - - comment = get_comment() - support.delete_comment(comment['id'], username='user_two', - moderator=True) - with pytest.raises(IndexError): - get_comment() - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_update_username(support): - support.update_username('user_two', 'new_user_two') - session = Session() - comments = session.query(Comment).\ - filter(Comment.username == 'user_two').all() - assert len(comments) == 0 - votes = session.query(CommentVote).\ - filter(CommentVote.username == 'user_two').all() - assert len(votes) == 0 - comments = session.query(Comment).\ - filter(Comment.username == 'new_user_two').all() - assert len(comments) == 1 - votes = session.query(CommentVote).\ - filter(CommentVote.username == 'new_user_two').all() - assert len(votes) == 0 - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_proposals(support): - session = Session() - node = session.query(Node).first() - - data = support.get_data(node.id) - - source = data['source'] - proposal = source[:5] + source[10:15] + 'asdf' + source[15:] - - support.add_comment('Proposal comment', - node_id=node.id, - proposal=proposal) - - -@pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') -@with_support() -def test_voting(support): - session = Session() - nodes = session.query(Node).all() - node = nodes[0] - - comment = support.get_data(node.id)['comments'][0] - - def check_rating(val): - data = support.get_data(node.id) - comment = data['comments'][0] - assert comment['rating'] == val, '%s != %s' % (comment['rating'], val) - - support.process_vote(comment['id'], 'user_one', '1') - support.process_vote(comment['id'], 'user_two', '1') - support.process_vote(comment['id'], 'user_three', '1') - check_rating(3) - support.process_vote(comment['id'], 'user_one', '-1') - check_rating(1) - support.process_vote(comment['id'], 'user_one', '0') - check_rating(2) - - # Make sure a vote with value > 1 or < -1 can't be cast. - with pytest.raises(ValueError): - support.process_vote(comment['id'], 'user_one', '2') - with pytest.raises(ValueError): - support.process_vote(comment['id'], 'user_one', '-2') - - # Make sure past voting data is associated with comments when they are - # fetched. - data = support.get_data(str(node.id), username='user_two') - comment = data['comments'][0] - assert comment['vote'] == 1, '%s != 1' % comment['vote'] - - -def test_differ(): - source = 'Lorem ipsum dolor sit amet,\nconsectetur adipisicing elit,\n' \ - 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' - prop = 'Lorem dolor sit amet,\nconsectetur nihil adipisicing elit,\n' \ - 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' - differ = CombinedHtmlDiff(source, prop) - differ.make_html() |