Commit a61707b8 by Ben Patterson

Merge pull request #12272 from edx/benp/shard4-lms

Create a 4th shard for lms unit tests
parents 265f2490 1db84e79
...@@ -8,6 +8,7 @@ import decimal ...@@ -8,6 +8,7 @@ import decimal
import ddt import ddt
import freezegun import freezegun
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -25,9 +26,13 @@ from course_modes.models import CourseMode, Mode ...@@ -25,9 +26,13 @@ from course_modes.models import CourseMode, Mode
from openedx.core.djangoapps.theming.test_util import with_is_edx_domain from openedx.core.djangoapps.theming.test_util import with_is_edx_domain
@attr('shard_3')
@ddt.ddt @ddt.ddt
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
class CourseModeViewTest(UrlResetMixin, ModuleStoreTestCase): class CourseModeViewTest(UrlResetMixin, ModuleStoreTestCase):
"""
Course Mode View tests
"""
@patch.dict(settings.FEATURES, {'MODE_CREATION_FOR_TESTING': True}) @patch.dict(settings.FEATURES, {'MODE_CREATION_FOR_TESTING': True})
def setUp(self): def setUp(self):
super(CourseModeViewTest, self).setUp('course_modes.urls') super(CourseModeViewTest, self).setUp('course_modes.urls')
......
...@@ -4,6 +4,7 @@ Tests for EmbargoMiddleware ...@@ -4,6 +4,7 @@ Tests for EmbargoMiddleware
from contextlib import contextmanager from contextlib import contextmanager
import mock import mock
from nose.plugins.attrib import attr
import unittest import unittest
import pygeoip import pygeoip
import ddt import ddt
...@@ -37,6 +38,7 @@ from mock import patch ...@@ -37,6 +38,7 @@ from mock import patch
MODULESTORE_CONFIG = mixed_store_config(settings.COMMON_TEST_DATA_ROOT, {}) MODULESTORE_CONFIG = mixed_store_config(settings.COMMON_TEST_DATA_ROOT, {})
@attr('shard_3')
@ddt.ddt @ddt.ddt
@override_settings(MODULESTORE=MODULESTORE_CONFIG) @override_settings(MODULESTORE=MODULESTORE_CONFIG)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
......
...@@ -4,6 +4,7 @@ Tests for EmbargoMiddleware with CountryAccessRules ...@@ -4,6 +4,7 @@ Tests for EmbargoMiddleware with CountryAccessRules
import unittest import unittest
from mock import patch from mock import patch
from nose.plugins.attrib import attr
import ddt import ddt
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -20,6 +21,7 @@ from embargo.models import RestrictedCourse, IPFilter ...@@ -20,6 +21,7 @@ from embargo.models import RestrictedCourse, IPFilter
from embargo.test_utils import restrict_course from embargo.test_utils import restrict_course
@attr('shard_3')
@ddt.ddt @ddt.ddt
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
class EmbargoMiddlewareAccessTests(UrlResetMixin, ModuleStoreTestCase): class EmbargoMiddlewareAccessTests(UrlResetMixin, ModuleStoreTestCase):
......
...@@ -9,6 +9,7 @@ import datetime ...@@ -9,6 +9,7 @@ import datetime
import ddt import ddt
from django.core.cache import cache from django.core.cache import cache
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from django.test import Client from django.test import Client
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -125,6 +126,7 @@ class EnrollmentTestMixin(object): ...@@ -125,6 +126,7 @@ class EnrollmentTestMixin(object):
self.assertEqual(actual_mode, expected_mode) self.assertEqual(actual_mode, expected_mode)
@attr('shard_3')
@override_settings(EDX_API_KEY="i am a key") @override_settings(EDX_API_KEY="i am a key")
@ddt.ddt @ddt.ddt
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
......
...@@ -20,6 +20,7 @@ from external_auth.views import ( ...@@ -20,6 +20,7 @@ from external_auth.views import (
shib_login, course_specific_login, course_specific_register, _flatten_to_ascii shib_login, course_specific_login, course_specific_register, _flatten_to_ascii
) )
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from urllib import urlencode from urllib import urlencode
from student.views import create_account, change_enrollment from student.views import create_account, change_enrollment
...@@ -72,6 +73,7 @@ def gen_all_identities(): ...@@ -72,6 +73,7 @@ def gen_all_identities():
yield _build_identity_dict(mail, display_name, given_name, surname) yield _build_identity_dict(mail, display_name, given_name, surname)
@attr('shard_3')
@ddt @ddt
@override_settings(SESSION_ENGINE='django.contrib.sessions.backends.cache') @override_settings(SESSION_ENGINE='django.contrib.sessions.backends.cache')
class ShibSPTest(SharedModuleStoreTestCase): class ShibSPTest(SharedModuleStoreTestCase):
......
...@@ -4,6 +4,7 @@ Tests for student enrollment. ...@@ -4,6 +4,7 @@ Tests for student enrollment.
import ddt import ddt
import unittest import unittest
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -20,6 +21,7 @@ from student.roles import ( ...@@ -20,6 +21,7 @@ from student.roles import (
) )
@attr('shard_3')
@ddt.ddt @ddt.ddt
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
class EnrollmentTest(UrlResetMixin, SharedModuleStoreTestCase): class EnrollmentTest(UrlResetMixin, SharedModuleStoreTestCase):
......
...@@ -6,6 +6,7 @@ from django.conf import settings ...@@ -6,6 +6,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from opaque_keys.edx import locator from opaque_keys.edx import locator
from pytz import UTC from pytz import UTC
from nose.plugins.attrib import attr
import unittest import unittest
import ddt import ddt
from shoppingcart.models import DonationConfiguration from shoppingcart.models import DonationConfiguration
...@@ -19,6 +20,7 @@ from student.views import get_course_enrollments, _get_recently_enrolled_courses ...@@ -19,6 +20,7 @@ from student.views import get_course_enrollments, _get_recently_enrolled_courses
from common.test.utils import XssTestMixin from common.test.utils import XssTestMixin
@attr('shard_3')
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
@ddt.ddt @ddt.ddt
class TestRecentEnrollments(ModuleStoreTestCase, XssTestMixin): class TestRecentEnrollments(ModuleStoreTestCase, XssTestMixin):
......
...@@ -4,6 +4,7 @@ from datetime import datetime, timedelta ...@@ -4,6 +4,7 @@ from datetime import datetime, timedelta
import unittest import unittest
import ddt import ddt
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from pytz import UTC from pytz import UTC
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.conf import settings from django.conf import settings
...@@ -24,6 +25,7 @@ from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareS ...@@ -24,6 +25,7 @@ from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareS
from util.testing import UrlResetMixin from util.testing import UrlResetMixin
@attr('shard_3')
@patch.dict(settings.FEATURES, {'AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING': True}) @patch.dict(settings.FEATURES, {'AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING': True})
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
@ddt.ddt @ddt.ddt
......
...@@ -11,6 +11,7 @@ from urlparse import urljoin ...@@ -11,6 +11,7 @@ from urlparse import urljoin
import pytz import pytz
from markupsafe import escape from markupsafe import escape
from mock import Mock, patch from mock import Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from pyquery import PyQuery as pq from pyquery import PyQuery as pq
...@@ -888,6 +889,7 @@ class AnonymousLookupTable(ModuleStoreTestCase): ...@@ -888,6 +889,7 @@ class AnonymousLookupTable(ModuleStoreTestCase):
# TODO: Clean up these tests so that they use the ProgramsDataMixin. # TODO: Clean up these tests so that they use the ProgramsDataMixin.
@attr('shard_3')
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
@ddt.ddt @ddt.ddt
class DashboardTestXSeriesPrograms(ModuleStoreTestCase, ProgramsApiConfigMixin): class DashboardTestXSeriesPrograms(ModuleStoreTestCase, ProgramsApiConfigMixin):
......
...@@ -5,6 +5,7 @@ import json ...@@ -5,6 +5,7 @@ import json
from ddt import ddt, data, unpack from ddt import ddt, data, unpack
from mock import sentinel from mock import sentinel
from nose.plugins.attrib import attr
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.test.client import RequestFactory from django.test.client import RequestFactory
...@@ -36,6 +37,7 @@ def expect_failure_with_message(message): ...@@ -36,6 +37,7 @@ def expect_failure_with_message(message):
return test_decorator return test_decorator
@attr('shard_3')
@ddt @ddt
@override_settings( @override_settings(
TRACKING_SEGMENTIO_WEBHOOK_SECRET=SECRET, TRACKING_SEGMENTIO_WEBHOOK_SECRET=SECRET,
......
...@@ -4,6 +4,7 @@ Tests for the badges API views. ...@@ -4,6 +4,7 @@ Tests for the badges API views.
from ddt import ddt, data, unpack from ddt import ddt, data, unpack
from django.conf import settings from django.conf import settings
from django.test.utils import override_settings from django.test.utils import override_settings
from nose.plugins.attrib import attr
from badges.tests.factories import BadgeAssertionFactory, BadgeClassFactory, RandomBadgeClassFactory from badges.tests.factories import BadgeAssertionFactory, BadgeClassFactory, RandomBadgeClassFactory
from openedx.core.lib.api.test_utils import ApiTestCase from openedx.core.lib.api.test_utils import ApiTestCase
...@@ -151,6 +152,7 @@ class TestUserCourseBadgeAssertions(UserAssertionTestCase): ...@@ -151,6 +152,7 @@ class TestUserCourseBadgeAssertions(UserAssertionTestCase):
self.check_assertion_structure(assertion, response['results'][0]) self.check_assertion_structure(assertion, response['results'][0])
@attr('shard_3')
@ddt @ddt
class TestUserBadgeAssertionsByClass(UserAssertionTestCase): class TestUserBadgeAssertionsByClass(UserAssertionTestCase):
""" """
......
...@@ -75,7 +75,7 @@ def my_update_subtask_status(entry_id, current_task_id, new_subtask_status): ...@@ -75,7 +75,7 @@ def my_update_subtask_status(entry_id, current_task_id, new_subtask_status):
update_subtask_status(entry_id, current_task_id, new_subtask_status) update_subtask_status(entry_id, current_task_id, new_subtask_status)
@attr('shard_1') @attr('shard_3')
@patch('bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True)) @patch('bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True))
class TestBulkEmailInstructorTask(InstructorTaskCourseTestCase): class TestBulkEmailInstructorTask(InstructorTaskCourseTestCase):
"""Tests instructor task that send bulk email.""" """Tests instructor task that send bulk email."""
......
...@@ -30,7 +30,7 @@ from ccx_keys.locator import CCXLocator ...@@ -30,7 +30,7 @@ from ccx_keys.locator import CCXLocator
from lms.djangoapps.ccx.tests.factories import CcxFactory from lms.djangoapps.ccx.tests.factories import CcxFactory
@attr('shard_1') @attr('shard_3')
@mock.patch.dict( @mock.patch.dict(
'django.conf.settings.FEATURES', 'django.conf.settings.FEATURES',
{ {
......
...@@ -97,6 +97,7 @@ class CourseListViewTests(CourseApiViewTestMixin, ModuleStoreTestCase): ...@@ -97,6 +97,7 @@ class CourseListViewTests(CourseApiViewTestMixin, ModuleStoreTestCase):
self.assertListEqual(actual, expected) self.assertListEqual(actual, expected)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase): class CourseRetrieveUpdateViewTests(CourseApiViewTestMixin, ModuleStoreTestCase):
""" Tests for CourseRetrieveUpdateView. """ """ Tests for CourseRetrieveUpdateView. """
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Tests for ProctoredExamTransformer. Tests for ProctoredExamTransformer.
""" """
from mock import patch from mock import patch
from nose.plugins.attrib import attr
import ddt import ddt
from edx_proctoring.api import ( from edx_proctoring.api import (
...@@ -19,6 +20,7 @@ from ..proctored_exam import ProctoredExamTransformer ...@@ -19,6 +20,7 @@ from ..proctored_exam import ProctoredExamTransformer
from ...api import get_course_blocks from ...api import get_course_blocks
@attr('shard_3')
@ddt.ddt @ddt.ddt
@patch.dict('django.conf.settings.FEATURES', {'ENABLE_PROCTORED_EXAMS': True}) @patch.dict('django.conf.settings.FEATURES', {'ENABLE_PROCTORED_EXAMS': True})
class ProctoredExamTransformerTestCase(CourseStructureTestCase): class ProctoredExamTransformerTestCase(CourseStructureTestCase):
......
...@@ -6,6 +6,7 @@ from __future__ import unicode_literals ...@@ -6,6 +6,7 @@ from __future__ import unicode_literals
from datetime import datetime from datetime import datetime
import ddt import ddt
from nose.plugins.attrib import attr
from openedx.core.djangoapps.models.course_details import CourseDetails from openedx.core.djangoapps.models.course_details import CourseDetails
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from rest_framework.test import APIRequestFactory from rest_framework.test import APIRequestFactory
...@@ -20,6 +21,7 @@ from ..serializers import CourseSerializer, CourseDetailSerializer ...@@ -20,6 +21,7 @@ from ..serializers import CourseSerializer, CourseDetailSerializer
from .mixins import CourseApiFactoryMixin from .mixins import CourseApiFactoryMixin
@attr('shard_3')
@ddt.ddt @ddt.ddt
class TestCourseSerializer(CourseApiFactoryMixin, ModuleStoreTestCase): class TestCourseSerializer(CourseApiFactoryMixin, ModuleStoreTestCase):
""" """
......
...@@ -5,6 +5,7 @@ from hashlib import md5 ...@@ -5,6 +5,7 @@ from hashlib import md5
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import RequestFactory from django.test import RequestFactory
from nose.plugins.attrib import attr
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from .mixins import CourseApiFactoryMixin, TEST_PASSWORD from .mixins import CourseApiFactoryMixin, TEST_PASSWORD
...@@ -46,6 +47,7 @@ class CourseApiTestViewMixin(CourseApiFactoryMixin): ...@@ -46,6 +47,7 @@ class CourseApiTestViewMixin(CourseApiFactoryMixin):
return response return response
@attr('shard_3')
class CourseListViewTestCase(CourseApiTestViewMixin, SharedModuleStoreTestCase): class CourseListViewTestCase(CourseApiTestViewMixin, SharedModuleStoreTestCase):
""" """
Test responses returned from CourseListView. Test responses returned from CourseListView.
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Tests for SplitTestTransformer. Tests for SplitTestTransformer.
""" """
import ddt import ddt
from nose.plugins.attrib import attr
import openedx.core.djangoapps.user_api.course_tag.api as course_tag_api import openedx.core.djangoapps.user_api.course_tag.api as course_tag_api
from openedx.core.djangoapps.user_api.partition_schemes import RandomUserPartitionScheme from openedx.core.djangoapps.user_api.partition_schemes import RandomUserPartitionScheme
...@@ -14,6 +15,7 @@ from ..user_partitions import UserPartitionTransformer, _get_user_partition_grou ...@@ -14,6 +15,7 @@ from ..user_partitions import UserPartitionTransformer, _get_user_partition_grou
from .helpers import CourseStructureTestCase, create_location from .helpers import CourseStructureTestCase, create_location
@attr('shard_3')
@ddt.ddt @ddt.ddt
class SplitTestTransformerTestCase(CourseStructureTestCase): class SplitTestTransformerTestCase(CourseStructureTestCase):
""" """
......
...@@ -5,12 +5,14 @@ import ddt ...@@ -5,12 +5,14 @@ import ddt
from datetime import timedelta from datetime import timedelta
from django.utils.timezone import now from django.utils.timezone import now
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from courseware.tests.factories import BetaTesterFactory from courseware.tests.factories import BetaTesterFactory
from ..start_date import StartDateTransformer, DEFAULT_START_DATE from ..start_date import StartDateTransformer, DEFAULT_START_DATE
from .helpers import BlockParentsMapTestCase, update_block from .helpers import BlockParentsMapTestCase, update_block
@attr('shard_3')
@ddt.ddt @ddt.ddt
class StartDateTransformerTestCase(BlockParentsMapTestCase): class StartDateTransformerTestCase(BlockParentsMapTestCase):
""" """
......
...@@ -4,6 +4,7 @@ Tests for UserPartitionTransformer. ...@@ -4,6 +4,7 @@ Tests for UserPartitionTransformer.
""" """
from collections import namedtuple from collections import namedtuple
import ddt import ddt
from nose.plugins.attrib import attr
from openedx.core.djangoapps.course_groups.partition_scheme import CohortPartitionScheme from openedx.core.djangoapps.course_groups.partition_scheme import CohortPartitionScheme
from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory, config_course_cohorts from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory, config_course_cohorts
...@@ -65,6 +66,7 @@ class UserPartitionTestMixin(object): ...@@ -65,6 +66,7 @@ class UserPartitionTestMixin(object):
self.partition_cohorts.append(partition_cohorts) self.partition_cohorts.append(partition_cohorts)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class UserPartitionTransformerTestCase(UserPartitionTestMixin, CourseStructureTestCase): class UserPartitionTransformerTestCase(UserPartitionTestMixin, CourseStructureTestCase):
""" """
...@@ -212,6 +214,7 @@ class UserPartitionTransformerTestCase(UserPartitionTestMixin, CourseStructureTe ...@@ -212,6 +214,7 @@ class UserPartitionTransformerTestCase(UserPartitionTestMixin, CourseStructureTe
) )
@attr('shard_3')
@ddt.ddt @ddt.ddt
class MergedGroupAccessTestData(UserPartitionTestMixin, CourseStructureTestCase): class MergedGroupAccessTestData(UserPartitionTestMixin, CourseStructureTestCase):
""" """
......
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
Tests for VisibilityTransformer. Tests for VisibilityTransformer.
""" """
import ddt import ddt
from nose.plugins.attrib import attr
from ..visibility import VisibilityTransformer from ..visibility import VisibilityTransformer
from .helpers import BlockParentsMapTestCase, update_block from .helpers import BlockParentsMapTestCase, update_block
@attr('shard_3')
@ddt.ddt @ddt.ddt
class VisibilityTransformerTestCase(BlockParentsMapTestCase): class VisibilityTransformerTestCase(BlockParentsMapTestCase):
""" """
......
...@@ -676,6 +676,7 @@ class UserRoleTestCase(TestCase): ...@@ -676,6 +676,7 @@ class UserRoleTestCase(TestCase):
) )
@attr('shard_3')
@ddt.ddt @ddt.ddt
class CourseOverviewAccessTestCase(ModuleStoreTestCase): class CourseOverviewAccessTestCase(ModuleStoreTestCase):
""" """
......
...@@ -38,7 +38,7 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase ...@@ -38,7 +38,7 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
@attr('shard_1') @attr('shard_2')
@patch.dict('django.conf.settings.FEATURES', {'ENTRANCE_EXAMS': True, 'MILESTONES_APP': True}) @patch.dict('django.conf.settings.FEATURES', {'ENTRANCE_EXAMS': True, 'MILESTONES_APP': True})
class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, MilestonesTestCaseMixin): class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, MilestonesTestCaseMixin):
""" """
......
...@@ -51,7 +51,7 @@ def resolve_attrs(test_method): ...@@ -51,7 +51,7 @@ def resolve_attrs(test_method):
return _wrapper return _wrapper
@attr('shard_1') @attr('shard_2')
@ddt.ddt @ddt.ddt
class GroupAccessTestCase(ModuleStoreTestCase): class GroupAccessTestCase(ModuleStoreTestCase):
""" """
......
...@@ -316,7 +316,7 @@ class TestSubmittingProblems(ModuleStoreTestCase, LoginEnrollmentTestCase, Probl ...@@ -316,7 +316,7 @@ class TestSubmittingProblems(ModuleStoreTestCase, LoginEnrollmentTestCase, Probl
return [s.earned for s in hw_section['scores']] return [s.earned for s in hw_section['scores']]
@attr('shard_1') @attr('shard_3')
class TestCourseGrader(TestSubmittingProblems): class TestCourseGrader(TestSubmittingProblems):
""" """
Suite of tests for the course grader. Suite of tests for the course grader.
......
...@@ -184,7 +184,7 @@ class TestJumpTo(ModuleStoreTestCase): ...@@ -184,7 +184,7 @@ class TestJumpTo(ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
@attr('shard_1') @attr('shard_2')
@ddt.ddt @ddt.ddt
class ViewsTestCase(ModuleStoreTestCase): class ViewsTestCase(ModuleStoreTestCase):
""" """
......
...@@ -8,6 +8,8 @@ import StringIO ...@@ -8,6 +8,8 @@ import StringIO
import subprocess import subprocess
import unittest import unittest
from nose.plugins.attrib import attr
from django.conf import settings from django.conf import settings
from django.core.management import call_command from django.core.management import call_command
from django.core.management.base import CommandError from django.core.management.base import CommandError
...@@ -34,6 +36,7 @@ FEATURES_WITH_SSL_AUTH = settings.FEATURES.copy() ...@@ -34,6 +36,7 @@ FEATURES_WITH_SSL_AUTH = settings.FEATURES.copy()
FEATURES_WITH_SSL_AUTH['AUTH_USE_CERTIFICATES'] = True FEATURES_WITH_SSL_AUTH['AUTH_USE_CERTIFICATES'] = True
@attr('shard_3')
@override_settings(MONGODB_LOG=TEST_MONGODB_LOG) @override_settings(MONGODB_LOG=TEST_MONGODB_LOG)
@unittest.skipUnless(settings.FEATURES.get('ENABLE_SYSADMIN_DASHBOARD'), @unittest.skipUnless(settings.FEATURES.get('ENABLE_SYSADMIN_DASHBOARD'),
"ENABLE_SYSADMIN_DASHBOARD not set") "ENABLE_SYSADMIN_DASHBOARD not set")
......
...@@ -4,6 +4,7 @@ Tests for discussion API permission logic ...@@ -4,6 +4,7 @@ Tests for discussion API permission logic
import itertools import itertools
import ddt import ddt
from nose.plugins.attrib import attr
from discussion_api.permissions import ( from discussion_api.permissions import (
can_delete, can_delete,
...@@ -64,6 +65,7 @@ class GetInitializableFieldsTest(ModuleStoreTestCase): ...@@ -64,6 +65,7 @@ class GetInitializableFieldsTest(ModuleStoreTestCase):
self.assertEqual(actual, expected) self.assertEqual(actual, expected)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class GetEditableFieldsTest(ModuleStoreTestCase): class GetEditableFieldsTest(ModuleStoreTestCase):
"""Tests for get_editable_fields""" """Tests for get_editable_fields"""
......
...@@ -7,6 +7,7 @@ from urlparse import urlparse ...@@ -7,6 +7,7 @@ from urlparse import urlparse
import ddt import ddt
import httpretty import httpretty
import mock import mock
from nose.plugins.attrib import attr
from django.test.client import RequestFactory from django.test.client import RequestFactory
...@@ -132,6 +133,7 @@ class SerializerTestMixin(CommentsServiceMockMixin, UrlResetMixin): ...@@ -132,6 +133,7 @@ class SerializerTestMixin(CommentsServiceMockMixin, UrlResetMixin):
self.assertEqual(serialized["voted"], True) self.assertEqual(serialized["voted"], True)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class ThreadSerializerSerializationTest(SerializerTestMixin, SharedModuleStoreTestCase): class ThreadSerializerSerializationTest(SerializerTestMixin, SharedModuleStoreTestCase):
"""Tests for ThreadSerializer serialization.""" """Tests for ThreadSerializer serialization."""
......
...@@ -8,6 +8,7 @@ from urlparse import urlparse ...@@ -8,6 +8,7 @@ from urlparse import urlparse
import ddt import ddt
import httpretty import httpretty
import mock import mock
from nose.plugins.attrib import attr
from pytz import UTC from pytz import UTC
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -225,6 +226,7 @@ class CourseTopicsViewTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase): ...@@ -225,6 +226,7 @@ class CourseTopicsViewTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase):
self.client.get(course_url) self.client.get(course_url)
@attr('shard_3')
@ddt.ddt @ddt.ddt
@httpretty.activate @httpretty.activate
@mock.patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True}) @mock.patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True})
...@@ -615,6 +617,7 @@ class ThreadViewSetCreateTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase): ...@@ -615,6 +617,7 @@ class ThreadViewSetCreateTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase):
self.assertEqual(response_data, expected_response_data) self.assertEqual(response_data, expected_response_data)
@attr('shard_3')
@ddt.ddt @ddt.ddt
@httpretty.activate @httpretty.activate
@disable_signal(api, 'thread_edited') @disable_signal(api, 'thread_edited')
...@@ -864,6 +867,7 @@ class ThreadViewSetDeleteTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase): ...@@ -864,6 +867,7 @@ class ThreadViewSetDeleteTest(DiscussionAPIViewTestMixin, ModuleStoreTestCase):
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
@attr('shard_3')
@ddt.ddt @ddt.ddt
@httpretty.activate @httpretty.activate
@mock.patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True}) @mock.patch.dict("django.conf.settings.FEATURES", {"ENABLE_DISCUSSION_SERVICE": True})
......
...@@ -200,6 +200,7 @@ class CoursewareContextTestCase(ModuleStoreTestCase): ...@@ -200,6 +200,7 @@ class CoursewareContextTestCase(ModuleStoreTestCase):
self.assertEqual(len(utils.get_accessible_discussion_modules(course, self.user)), expected_discussion_modules) self.assertEqual(len(utils.get_accessible_discussion_modules(course, self.user)), expected_discussion_modules)
@attr('shard_3')
class CachedDiscussionIdMapTestCase(ModuleStoreTestCase): class CachedDiscussionIdMapTestCase(ModuleStoreTestCase):
""" """
Tests that using the cache of discussion id mappings has the same behavior as searching through the course. Tests that using the cache of discussion id mappings has the same behavior as searching through the course.
......
...@@ -6,6 +6,7 @@ import ddt ...@@ -6,6 +6,7 @@ import ddt
import json import json
import jwt import jwt
from mock import patch, MagicMock from mock import patch, MagicMock
from nose.plugins.attrib import attr
from unittest import skipUnless from unittest import skipUnless
from datetime import datetime from datetime import datetime
import urlparse import urlparse
...@@ -86,6 +87,7 @@ class TestProblem(object): ...@@ -86,6 +87,7 @@ class TestProblem(object):
return "original_get_html" return "original_get_html"
@attr('shard_3')
@skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.") @skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.")
class EdxNotesDecoratorTest(ModuleStoreTestCase): class EdxNotesDecoratorTest(ModuleStoreTestCase):
""" """
...@@ -169,6 +171,7 @@ class EdxNotesDecoratorTest(ModuleStoreTestCase): ...@@ -169,6 +171,7 @@ class EdxNotesDecoratorTest(ModuleStoreTestCase):
self.assertEqual("original_get_html", self.problem.get_html()) self.assertEqual("original_get_html", self.problem.get_html())
@attr('shard_3')
@skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.") @skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.")
@ddt.ddt @ddt.ddt
class EdxNotesHelpersTest(ModuleStoreTestCase): class EdxNotesHelpersTest(ModuleStoreTestCase):
...@@ -941,6 +944,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): ...@@ -941,6 +944,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase):
verify_url(previous_url, previous_api_url) verify_url(previous_url, previous_api_url)
@attr('shard_3')
@skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.") @skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.")
@ddt.ddt @ddt.ddt
class EdxNotesViewsTest(ModuleStoreTestCase): class EdxNotesViewsTest(ModuleStoreTestCase):
...@@ -1136,6 +1140,7 @@ class EdxNotesViewsTest(ModuleStoreTestCase): ...@@ -1136,6 +1140,7 @@ class EdxNotesViewsTest(ModuleStoreTestCase):
self.assertEqual(response.status_code, 400) self.assertEqual(response.status_code, 400)
@attr('shard_3')
@skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.") @skipUnless(settings.FEATURES["ENABLE_EDXNOTES"], "EdxNotes feature needs to be enabled.")
@ddt.ddt @ddt.ddt
class EdxNotesPluginTest(ModuleStoreTestCase): class EdxNotesPluginTest(ModuleStoreTestCase):
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Unit tests for gating.signals module Unit tests for gating.signals module
""" """
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from ddt import ddt, data, unpack from ddt import ddt, data, unpack
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
...@@ -114,6 +115,7 @@ class TestGetXBlockParent(GatingTestCase): ...@@ -114,6 +115,7 @@ class TestGetXBlockParent(GatingTestCase):
self.assertIsNone(result) self.assertIsNone(result)
@attr('shard_3')
@ddt @ddt
class TestEvaluatePrerequisite(GatingTestCase, MilestonesTestCaseMixin): class TestEvaluatePrerequisite(GatingTestCase, MilestonesTestCaseMixin):
""" """
......
...@@ -4,6 +4,7 @@ Unit tests for instructor_dashboard.py. ...@@ -4,6 +4,7 @@ Unit tests for instructor_dashboard.py.
import ddt import ddt
import datetime import datetime
from mock import patch from mock import patch
from nose.plugins.attrib import attr
from pytz import UTC from pytz import UTC
from django.conf import settings from django.conf import settings
...@@ -42,6 +43,7 @@ def intercept_renderer(path, context): ...@@ -42,6 +43,7 @@ def intercept_renderer(path, context):
return response return response
@attr('shard_3')
@ddt.ddt @ddt.ddt
class TestInstructorDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase, XssTestMixin): class TestInstructorDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase, XssTestMixin):
""" """
......
...@@ -6,6 +6,7 @@ import datetime ...@@ -6,6 +6,7 @@ import datetime
import json import json
import pytz import pytz
from mock import MagicMock, Mock, patch from mock import MagicMock, Mock, patch
from nose.plugins.attrib import attr
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q from django.db.models import Q
...@@ -31,6 +32,7 @@ from edx_proctoring.api import create_exam ...@@ -31,6 +32,7 @@ from edx_proctoring.api import create_exam
from edx_proctoring.models import ProctoredExamStudentAttempt from edx_proctoring.models import ProctoredExamStudentAttempt
@attr('shard_3')
class TestAnalyticsBasic(ModuleStoreTestCase): class TestAnalyticsBasic(ModuleStoreTestCase):
""" Test basic analytics functions. """ """ Test basic analytics functions. """
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Test for LMS instructor background task queue management Test for LMS instructor background task queue management
""" """
from mock import patch, Mock, MagicMock from mock import patch, Mock, MagicMock
from nose.plugins.attrib import attr
from bulk_email.models import CourseEmail, SEND_TO_ALL from bulk_email.models import CourseEmail, SEND_TO_ALL
from courseware.tests.factories import UserFactory from courseware.tests.factories import UserFactory
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
...@@ -82,6 +83,7 @@ class InstructorTaskReportTest(InstructorTaskTestCase): ...@@ -82,6 +83,7 @@ class InstructorTaskReportTest(InstructorTaskTestCase):
self.assertEquals(set(task_ids), set()) self.assertEquals(set(task_ids), set())
@attr('shard_3')
class InstructorTaskModuleSubmitTest(InstructorTaskModuleTestCase): class InstructorTaskModuleSubmitTest(InstructorTaskModuleTestCase):
"""Tests API methods that involve the submission of module-based background tasks.""" """Tests API methods that involve the submission of module-based background tasks."""
...@@ -172,6 +174,7 @@ class InstructorTaskModuleSubmitTest(InstructorTaskModuleTestCase): ...@@ -172,6 +174,7 @@ class InstructorTaskModuleSubmitTest(InstructorTaskModuleTestCase):
self._test_submit_task(submit_delete_problem_state_for_all_students) self._test_submit_task(submit_delete_problem_state_for_all_students)
@attr('shard_3')
@patch('bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True)) @patch('bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True))
class InstructorTaskCourseSubmitTest(TestReportMixin, InstructorTaskCourseTestCase): class InstructorTaskCourseSubmitTest(TestReportMixin, InstructorTaskCourseTestCase):
"""Tests API methods that involve the submission of course-based background tasks.""" """Tests API methods that involve the submission of course-based background tasks."""
......
...@@ -8,6 +8,7 @@ paths actually work. ...@@ -8,6 +8,7 @@ paths actually work.
import json import json
import logging import logging
from mock import patch from mock import patch
from nose.plugins.attrib import attr
import textwrap import textwrap
from celery.states import SUCCESS, FAILURE from celery.states import SUCCESS, FAILURE
...@@ -63,6 +64,7 @@ class TestIntegrationTask(InstructorTaskModuleTestCase): ...@@ -63,6 +64,7 @@ class TestIntegrationTask(InstructorTaskModuleTestCase):
self.assertEqual(status['message'], expected_message) self.assertEqual(status['message'], expected_message)
@attr('shard_3')
class TestRescoringTask(TestIntegrationTask): class TestRescoringTask(TestIntegrationTask):
""" """
Integration-style tests for rescoring problems in a background task. Integration-style tests for rescoring problems in a background task.
......
...@@ -9,6 +9,7 @@ import json ...@@ -9,6 +9,7 @@ import json
from uuid import uuid4 from uuid import uuid4
from mock import Mock, MagicMock, patch from mock import Mock, MagicMock, patch
from nose.plugins.attrib import attr
from celery.states import SUCCESS, FAILURE from celery.states import SUCCESS, FAILURE
from django.utils.translation import ugettext_noop from django.utils.translation import ugettext_noop
...@@ -213,6 +214,7 @@ class TestInstructorTasks(InstructorTaskModuleTestCase): ...@@ -213,6 +214,7 @@ class TestInstructorTasks(InstructorTaskModuleTestCase):
self.assertEquals(output['traceback'][-3:], "...") self.assertEquals(output['traceback'][-3:], "...")
@attr('shard_3')
class TestRescoreInstructorTask(TestInstructorTasks): class TestRescoreInstructorTask(TestInstructorTasks):
"""Tests problem-rescoring instructor task.""" """Tests problem-rescoring instructor task."""
...@@ -315,6 +317,7 @@ class TestRescoreInstructorTask(TestInstructorTasks): ...@@ -315,6 +317,7 @@ class TestRescoreInstructorTask(TestInstructorTasks):
self.assertGreater(output.get('duration_ms'), 0) self.assertGreater(output.get('duration_ms'), 0)
@attr('shard_3')
class TestResetAttemptsInstructorTask(TestInstructorTasks): class TestResetAttemptsInstructorTask(TestInstructorTasks):
"""Tests instructor task that resets problem attempts.""" """Tests instructor task that resets problem attempts."""
...@@ -413,6 +416,7 @@ class TestResetAttemptsInstructorTask(TestInstructorTasks): ...@@ -413,6 +416,7 @@ class TestResetAttemptsInstructorTask(TestInstructorTasks):
self._test_reset_with_student(True) self._test_reset_with_student(True)
@attr('shard_3')
class TestDeleteStateInstructorTask(TestInstructorTasks): class TestDeleteStateInstructorTask(TestInstructorTasks):
"""Tests instructor task that deletes problem state.""" """Tests instructor task that deletes problem state."""
......
...@@ -16,6 +16,7 @@ import urllib ...@@ -16,6 +16,7 @@ import urllib
import ddt import ddt
from freezegun import freeze_time from freezegun import freeze_time
from mock import Mock, patch from mock import Mock, patch
from nose.plugins.attrib import attr
import tempfile import tempfile
from openedx.core.djangoapps.course_groups import cohorts from openedx.core.djangoapps.course_groups import cohorts
import unicodecsv import unicodecsv
...@@ -666,6 +667,7 @@ class TestProblemGradeReport(TestReportMixin, InstructorTaskModuleTestCase): ...@@ -666,6 +667,7 @@ class TestProblemGradeReport(TestReportMixin, InstructorTaskModuleTestCase):
]) ])
@attr('shard_3')
class TestProblemReportSplitTestContent(TestReportMixin, TestConditionalContent, InstructorTaskModuleTestCase): class TestProblemReportSplitTestContent(TestReportMixin, TestConditionalContent, InstructorTaskModuleTestCase):
""" """
Test the problem report on a course that has split tests. Test the problem report on a course that has split tests.
...@@ -1674,6 +1676,7 @@ class TestGradeReportEnrollmentAndCertificateInfo(TestReportMixin, InstructorTas ...@@ -1674,6 +1676,7 @@ class TestGradeReportEnrollmentAndCertificateInfo(TestReportMixin, InstructorTas
self._verify_csv_data(user.username, expected_output) self._verify_csv_data(user.username, expected_output)
@attr('shard_3')
@ddt.ddt @ddt.ddt
@override_settings(CERT_QUEUE='test-queue') @override_settings(CERT_QUEUE='test-queue')
class TestCertificateGeneration(InstructorTaskModuleTestCase): class TestCertificateGeneration(InstructorTaskModuleTestCase):
......
...@@ -6,6 +6,7 @@ from django.core.urlresolvers import reverse ...@@ -6,6 +6,7 @@ from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from mock import patch, MagicMock from mock import patch, MagicMock
from nose.plugins.attrib import attr
from courseware.testutils import RenderXBlockTestMixin from courseware.testutils import RenderXBlockTestMixin
from lti_provider import views, models from lti_provider import views, models
...@@ -157,6 +158,7 @@ class LtiLaunchTest(LtiTestMixin, TestCase): ...@@ -157,6 +158,7 @@ class LtiLaunchTest(LtiTestMixin, TestCase):
self.assertEqual(consumer.instance_guid, u'consumer instance guid') self.assertEqual(consumer.instance_guid, u'consumer instance guid')
@attr('shard_3')
class LtiLaunchTestRender(LtiTestMixin, RenderXBlockTestMixin, ModuleStoreTestCase): class LtiLaunchTestRender(LtiTestMixin, RenderXBlockTestMixin, ModuleStoreTestCase):
""" """
Tests for the rendering returned by lti_launch view. Tests for the rendering returned by lti_launch view.
......
...@@ -4,6 +4,7 @@ Tests for course_info ...@@ -4,6 +4,7 @@ Tests for course_info
import ddt import ddt
from django.conf import settings from django.conf import settings
from nose.plugins.attrib import attr
from xmodule.html_module import CourseInfoModule from xmodule.html_module import CourseInfoModule
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
...@@ -16,6 +17,7 @@ from ..testutils import ( ...@@ -16,6 +17,7 @@ from ..testutils import (
) )
@attr('shard_3')
@ddt.ddt @ddt.ddt
class TestUpdates(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTestMixin, MilestonesTestCaseMixin): class TestUpdates(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTestMixin, MilestonesTestCaseMixin):
""" """
...@@ -83,6 +85,7 @@ class TestUpdates(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTest ...@@ -83,6 +85,7 @@ class TestUpdates(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTest
self.assertIn("Update" + str(num), update_data['content']) self.assertIn("Update" + str(num), update_data['content'])
@attr('shard_3')
@ddt.ddt @ddt.ddt
class TestHandouts(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTestMixin, MilestonesTestCaseMixin): class TestHandouts(MobileAPITestCase, MobileAuthTestMixin, MobileCourseAccessTestMixin, MilestonesTestCaseMixin):
""" """
......
...@@ -11,6 +11,7 @@ import smtplib ...@@ -11,6 +11,7 @@ import smtplib
from boto.exception import BotoServerError # this is a super-class of SESError and catches connection errors from boto.exception import BotoServerError # this is a super-class of SESError and catches connection errors
from mock import patch, MagicMock from mock import patch, MagicMock
from nose.plugins.attrib import attr
import pytz import pytz
import ddt import ddt
from django.core import mail from django.core import mail
...@@ -46,8 +47,14 @@ from shoppingcart.exceptions import ( ...@@ -46,8 +47,14 @@ from shoppingcart.exceptions import (
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
@attr('shard_3')
@ddt.ddt @ddt.ddt
class OrderTest(ModuleStoreTestCase): class OrderTest(ModuleStoreTestCase):
"""
Test shopping cart orders (e.g., cart contains various items,
order is taken through various pieces of cart state, etc.)
"""
def setUp(self): def setUp(self):
super(OrderTest, self).setUp() super(OrderTest, self).setUp()
...@@ -477,6 +484,7 @@ class OrderItemTest(TestCase): ...@@ -477,6 +484,7 @@ class OrderItemTest(TestCase):
self.assertEqual(item.get_list_price(), item.list_price) self.assertEqual(item.get_list_price(), item.list_price)
@attr('shard_3')
@patch.dict('django.conf.settings.FEATURES', {'ENABLE_PAID_COURSE_REGISTRATION': True}) @patch.dict('django.conf.settings.FEATURES', {'ENABLE_PAID_COURSE_REGISTRATION': True})
class PaidCourseRegistrationTest(ModuleStoreTestCase): class PaidCourseRegistrationTest(ModuleStoreTestCase):
""" """
......
...@@ -22,6 +22,7 @@ from pytz import UTC ...@@ -22,6 +22,7 @@ from pytz import UTC
from freezegun import freeze_time from freezegun import freeze_time
from datetime import datetime, timedelta from datetime import datetime, timedelta
from mock import patch, Mock from mock import patch, Mock
from nose.plugins.attrib import attr
import ddt import ddt
from common.test.utils import XssTestMixin from common.test.utils import XssTestMixin
...@@ -64,9 +65,14 @@ render_mock = Mock(side_effect=mock_render_to_response) ...@@ -64,9 +65,14 @@ render_mock = Mock(side_effect=mock_render_to_response)
postpay_mock = Mock() postpay_mock = Mock()
@attr('shard_3')
@patch.dict('django.conf.settings.FEATURES', {'ENABLE_PAID_COURSE_REGISTRATION': True}) @patch.dict('django.conf.settings.FEATURES', {'ENABLE_PAID_COURSE_REGISTRATION': True})
@ddt.ddt @ddt.ddt
class ShoppingCartViewsTests(SharedModuleStoreTestCase, XssTestMixin): class ShoppingCartViewsTests(SharedModuleStoreTestCase, XssTestMixin):
"""
Test shopping cart view under various states
"""
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
super(ShoppingCartViewsTests, cls).setUpClass() super(ShoppingCartViewsTests, cls).setUpClass()
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
""" Tests for student account views. """ """ Tests for student account views. """
import re import re
from nose.plugins.attrib import attr
from unittest import skipUnless from unittest import skipUnless
from urllib import urlencode from urllib import urlencode
...@@ -203,6 +204,7 @@ class StudentAccountUpdateTest(UrlResetMixin, TestCase): ...@@ -203,6 +204,7 @@ class StudentAccountUpdateTest(UrlResetMixin, TestCase):
return self.client.post(path=reverse('password_change_request'), data=data) return self.client.post(path=reverse('password_change_request'), data=data)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class StudentAccountLoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleStoreTestCase): class StudentAccountLoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleStoreTestCase):
""" Tests for the student account views that update the user's account information. """ """ Tests for the student account views that update the user's account information. """
......
...@@ -10,6 +10,7 @@ import re ...@@ -10,6 +10,7 @@ import re
import ddt import ddt
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from nose.plugins.attrib import attr
from pytz import UTC from pytz import UTC
from course_modes.models import CourseMode from course_modes.models import CourseMode
...@@ -40,6 +41,7 @@ class SupportViewTestCase(ModuleStoreTestCase): ...@@ -40,6 +41,7 @@ class SupportViewTestCase(ModuleStoreTestCase):
self.assertTrue(success, msg="Could not log in") self.assertTrue(success, msg="Could not log in")
@attr('shard_3')
@ddt.ddt @ddt.ddt
class SupportViewAccessTests(SupportViewTestCase): class SupportViewAccessTests(SupportViewTestCase):
""" """
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Tests of the LMS XBlock Mixin Tests of the LMS XBlock Mixin
""" """
import ddt import ddt
from nose.plugins.attrib import attr
from xblock.validation import ValidationMessage from xblock.validation import ValidationMessage
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
...@@ -151,6 +152,7 @@ class OpenAssessmentBlockMixinTestCase(ModuleStoreTestCase): ...@@ -151,6 +152,7 @@ class OpenAssessmentBlockMixinTestCase(ModuleStoreTestCase):
self.assertTrue(self.open_assessment.has_score) self.assertTrue(self.open_assessment.has_score)
@attr('shard_3')
@ddt.ddt @ddt.ddt
class XBlockGetParentTest(LmsXBlockMixinTestCase): class XBlockGetParentTest(LmsXBlockMixinTestCase):
""" """
...@@ -243,6 +245,7 @@ def ddt_named(parent, child): ...@@ -243,6 +245,7 @@ def ddt_named(parent, child):
return args return args
@attr('shard_3')
@ddt.ddt @ddt.ddt
class XBlockMergedGroupAccessTest(LmsXBlockMixinTestCase): class XBlockMergedGroupAccessTest(LmsXBlockMixinTestCase):
""" """
......
...@@ -7,6 +7,7 @@ import ddt ...@@ -7,6 +7,7 @@ import ddt
import itertools import itertools
import math import math
import mock import mock
from nose.plugins.attrib import attr
import pytz import pytz
from django.conf import settings from django.conf import settings
...@@ -36,6 +37,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls ...@@ -36,6 +37,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls
from .models import CourseOverview, CourseOverviewImageSet, CourseOverviewImageConfig from .models import CourseOverview, CourseOverviewImageSet, CourseOverviewImageConfig
@attr('shard_3')
@ddt.ddt @ddt.ddt
class CourseOverviewTestCase(ModuleStoreTestCase): class CourseOverviewTestCase(ModuleStoreTestCase):
""" """
...@@ -516,6 +518,7 @@ class CourseOverviewTestCase(ModuleStoreTestCase): ...@@ -516,6 +518,7 @@ class CourseOverviewTestCase(ModuleStoreTestCase):
) )
@attr('shard_3')
@ddt.ddt @ddt.ddt
class CourseOverviewImageSetTestCase(ModuleStoreTestCase): class CourseOverviewImageSetTestCase(ModuleStoreTestCase):
""" """
......
...@@ -108,7 +108,10 @@ case "$TEST_SUITE" in ...@@ -108,7 +108,10 @@ case "$TEST_SUITE" in
paver test_system -s lms --extra_args="--attr='shard_2' --with-flaky" --cov_args="-p" paver test_system -s lms --extra_args="--attr='shard_2' --with-flaky" --cov_args="-p"
;; ;;
"3") "3")
paver test_system -s lms --extra_args="--attr='shard_1=False,shard_2=False' --with-flaky" --cov_args="-p" paver test_system -s lms --extra_args="--attr='shard_3' --with-flaky" --cov_args="-p"
;;
"4")
paver test_system -s lms --extra_args="--attr='shard_1=False,shard_2=False,shard_3=False' --with-flaky" --cov_args="-p"
;; ;;
*) *)
# If no shard is specified, rather than running all tests, create an empty xunit file. This is a # If no shard is specified, rather than running all tests, create an empty xunit file. This is a
......
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