Commit d9f7b6f3 by E. Kolpakov

Copied discussion tests from upstream

parent 72ccb87d
"""
Helper functions and classes for discussion tests.
"""
from uuid import uuid4
from ...fixtures.discussion import (
SingleThreadViewFixture,
Thread,
Response,
)
class BaseDiscussionMixin(object):
"""
A mixin containing methods common to discussion tests.
"""
def setup_thread(self, num_responses, **thread_kwargs):
"""
Create a test thread with the given number of responses, passing all
keyword arguments through to the Thread fixture, then invoke
setup_thread_page.
"""
thread_id = "test_thread_{}".format(uuid4().hex)
thread_fixture = SingleThreadViewFixture(
Thread(id=thread_id, commentable_id=self.discussion_id, **thread_kwargs)
)
for i in range(num_responses):
thread_fixture.addResponse(Response(id=str(i), body=str(i)))
thread_fixture.push()
self.setup_thread_page(thread_id)
return thread_id
...@@ -7,10 +7,10 @@ from pytz import UTC ...@@ -7,10 +7,10 @@ from pytz import UTC
from uuid import uuid4 from uuid import uuid4
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from .helpers import UniqueCourseTest from ..helpers import UniqueCourseTest
from ..pages.lms.auto_auth import AutoAuthPage from ...pages.lms.auto_auth import AutoAuthPage
from ..pages.lms.courseware import CoursewarePage from ...pages.lms.courseware import CoursewarePage
from ..pages.lms.discussion import ( from ...pages.lms.discussion import (
DiscussionTabSingleThreadPage, DiscussionTabSingleThreadPage,
InlineDiscussionPage, InlineDiscussionPage,
InlineDiscussionThreadPage, InlineDiscussionThreadPage,
...@@ -18,8 +18,8 @@ from ..pages.lms.discussion import ( ...@@ -18,8 +18,8 @@ from ..pages.lms.discussion import (
DiscussionTabHomePage, DiscussionTabHomePage,
DiscussionSortPreferencePage, DiscussionSortPreferencePage,
) )
from ..fixtures.course import CourseFixture, XBlockFixtureDesc from ...fixtures.course import CourseFixture, XBlockFixtureDesc
from ..fixtures.discussion import ( from ...fixtures.discussion import (
SingleThreadViewFixture, SingleThreadViewFixture,
UserProfileViewFixture, UserProfileViewFixture,
SearchResultFixture, SearchResultFixture,
...@@ -29,28 +29,14 @@ from ..fixtures.discussion import ( ...@@ -29,28 +29,14 @@ from ..fixtures.discussion import (
SearchResult, SearchResult,
) )
from .helpers import BaseDiscussionMixin
class DiscussionResponsePaginationTestMixin(object):
class DiscussionResponsePaginationTestMixin(BaseDiscussionMixin):
""" """
A mixin containing tests for response pagination for use by both inline A mixin containing tests for response pagination for use by both inline
discussion and the discussion tab discussion and the discussion tab
""" """
def setup_thread(self, num_responses, **thread_kwargs):
"""
Create a test thread with the given number of responses, passing all
keyword arguments through to the Thread fixture, then invoke
setup_thread_page.
"""
thread_id = "test_thread_{}".format(uuid4().hex)
thread_fixture = SingleThreadViewFixture(
Thread(id=thread_id, commentable_id=self.discussion_id, **thread_kwargs)
)
for i in range(num_responses):
thread_fixture.addResponse(Response(id=str(i), body=str(i)))
thread_fixture.push()
self.setup_thread_page(thread_id)
def assert_response_display_correct(self, response_total, displayed_responses): def assert_response_display_correct(self, response_total, displayed_responses):
""" """
Assert that various aspects of the display of responses are all correct: Assert that various aspects of the display of responses are all correct:
...@@ -300,24 +286,34 @@ class DiscussionCommentEditTest(UniqueCourseTest): ...@@ -300,24 +286,34 @@ class DiscussionCommentEditTest(UniqueCourseTest):
self.assertTrue(page.is_add_comment_visible("response1")) self.assertTrue(page.is_add_comment_visible("response1"))
@attr('shard_1') class InlineDiscussionTestMixin(BaseDiscussionMixin):
class InlineDiscussionTest(UniqueCourseTest, DiscussionResponsePaginationTestMixin):
""" """
Tests for inline discussions Tests for inline discussions
""" """
def _get_xblock_fixture_desc(self):
""" Returns Discussion XBlockFixtureDescriptor """
raise NotImplementedError()
def _initial_discussion_id(self):
""" Returns initial discussion_id for InlineDiscussionPage """
raise NotImplementedError()
@property
def discussion_id(self):
""" Returns selected discussion_id """
raise NotImplementedError()
def __init__(self, *args, **kwargs):
self._discussion_id = None
super(InlineDiscussionTestMixin, self).__init__(*args, **kwargs)
def setUp(self): def setUp(self):
super(InlineDiscussionTest, self).setUp() super(InlineDiscussionTestMixin, self).setUp()
self.discussion_id = "test_discussion_{}".format(uuid4().hex)
self.course_fix = CourseFixture(**self.course_info).add_children( self.course_fix = CourseFixture(**self.course_info).add_children(
XBlockFixtureDesc("chapter", "Test Section").add_children( XBlockFixtureDesc("chapter", "Test Section").add_children(
XBlockFixtureDesc("sequential", "Test Subsection").add_children( XBlockFixtureDesc("sequential", "Test Subsection").add_children(
XBlockFixtureDesc("vertical", "Test Unit").add_children( XBlockFixtureDesc("vertical", "Test Unit").add_children(
XBlockFixtureDesc( self._get_xblock_fixture_desc()
"discussion",
"Test Discussion",
metadata={"discussion_id": self.discussion_id}
)
) )
) )
) )
...@@ -327,7 +323,7 @@ class InlineDiscussionTest(UniqueCourseTest, DiscussionResponsePaginationTestMix ...@@ -327,7 +323,7 @@ class InlineDiscussionTest(UniqueCourseTest, DiscussionResponsePaginationTestMix
self.courseware_page = CoursewarePage(self.browser, self.course_id) self.courseware_page = CoursewarePage(self.browser, self.course_id)
self.courseware_page.visit() self.courseware_page.visit()
self.discussion_page = InlineDiscussionPage(self.browser, self.discussion_id) self.discussion_page = InlineDiscussionPage(self.browser, self._initial_discussion_id())
def setup_thread_page(self, thread_id): def setup_thread_page(self, thread_id):
self.discussion_page.expand_discussion() self.discussion_page.expand_discussion()
...@@ -391,6 +387,49 @@ class InlineDiscussionTest(UniqueCourseTest, DiscussionResponsePaginationTestMix ...@@ -391,6 +387,49 @@ class InlineDiscussionTest(UniqueCourseTest, DiscussionResponsePaginationTestMix
@attr('shard_1') @attr('shard_1')
class DiscussionXModuleInlineTest(InlineDiscussionTestMixin, UniqueCourseTest, DiscussionResponsePaginationTestMixin):
""" Discussion XModule inline mode tests """
def _get_xblock_fixture_desc(self):
""" Returns Discussion XBlockFixtureDescriptor """
return XBlockFixtureDesc(
'discussion',
"Test Discussion",
metadata={"discussion_id": self.discussion_id}
)
def _initial_discussion_id(self):
""" Returns initial discussion_id for InlineDiscussionPage """
return self.discussion_id
@property
def discussion_id(self):
""" Returns selected discussion_id """
if getattr(self, '_discussion_id', None) is None:
self._discussion_id = "test_discussion_{}".format(uuid4().hex)
return self._discussion_id
@attr('shard_1')
class DiscussionXBlockInlineTest(InlineDiscussionTestMixin, UniqueCourseTest, DiscussionResponsePaginationTestMixin):
""" Discussion XBlock inline mode tests """
def _get_xblock_fixture_desc(self):
""" Returns Discussion XBlockFixtureDescriptor """
return XBlockFixtureDesc(
'discussion-forum',
"Test Discussion"
)
def _initial_discussion_id(self):
""" Returns initial discussion_id for InlineDiscussionPage """
return None
@property
def discussion_id(self):
""" Returns selected discussion_id """
return self.discussion_page.get_discussion_id()
@attr('shard_1')
class DiscussionUserProfileTest(UniqueCourseTest): class DiscussionUserProfileTest(UniqueCourseTest):
""" """
Tests for user profile page in discussion tab. Tests for user profile page in discussion tab.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment