Conflicts: cms/djangoapps/contentstore/tests/test_contentstore.py cms/djangoapps/contentstore/views/component.py cms/djangoapps/contentstore/views/item.py cms/djangoapps/contentstore/views/preview.py cms/djangoapps/contentstore/views/tests/test_container.py cms/static/js/spec/views/unit_spec.js cms/static/js/utils/module.js cms/templates/container.html cms/templates/studio_vertical_wrapper.html cms/templates/studio_xblock_wrapper.html common/djangoapps/student/views.py lms/templates/notes.html lms/templates/textannotation.html lms/templates/videoannotation.html
213 lines
9.1 KiB
Python
213 lines
9.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Unit tests for embargo app admin forms.
|
|
"""
|
|
|
|
from django.test import TestCase
|
|
from django.test.utils import override_settings
|
|
|
|
# Explicitly import the cache from ConfigurationModel so we can reset it after each test
|
|
from config_models.models import cache
|
|
from embargo.forms import EmbargoedCourseForm, EmbargoedStateForm, IPFilterForm
|
|
from embargo.models import EmbargoedCourse, EmbargoedState, IPFilter
|
|
|
|
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
|
from xmodule.modulestore.tests.factories import CourseFactory
|
|
from courseware.tests.tests import TEST_DATA_MONGO_MODULESTORE
|
|
|
|
|
|
@override_settings(MODULESTORE=TEST_DATA_MONGO_MODULESTORE)
|
|
class EmbargoCourseFormTest(ModuleStoreTestCase):
|
|
"""Test the course form properly validates course IDs"""
|
|
|
|
def setUp(self):
|
|
self.course = CourseFactory.create()
|
|
self.true_form_data = {'course_id': self.course.id.to_deprecated_string(), 'embargoed': True}
|
|
self.false_form_data = {'course_id': self.course.id.to_deprecated_string(), 'embargoed': False}
|
|
|
|
def test_embargo_course(self):
|
|
self.assertFalse(EmbargoedCourse.is_embargoed(self.course.id))
|
|
# Test adding embargo to this course
|
|
form = EmbargoedCourseForm(data=self.true_form_data)
|
|
# Validation should work
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
# Check that this course is embargoed
|
|
self.assertTrue(EmbargoedCourse.is_embargoed(self.course.id))
|
|
|
|
def test_repeat_course(self):
|
|
# Initially course shouldn't be authorized
|
|
self.assertFalse(EmbargoedCourse.is_embargoed(self.course.id))
|
|
# Test authorizing the course, which should totally work
|
|
form = EmbargoedCourseForm(data=self.true_form_data)
|
|
# Validation should work
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
# Check that this course is authorized
|
|
self.assertTrue(EmbargoedCourse.is_embargoed(self.course.id))
|
|
|
|
# Now make a new course authorization with the same course id that tries to turn email off
|
|
form = EmbargoedCourseForm(data=self.false_form_data)
|
|
# Validation should not work because course_id field is unique
|
|
self.assertFalse(form.is_valid())
|
|
self.assertEquals(
|
|
"Embargoed course with this Course id already exists.",
|
|
form._errors['course_id'][0] # pylint: disable=protected-access
|
|
)
|
|
with self.assertRaisesRegexp(ValueError, "The EmbargoedCourse could not be created because the data didn't validate."):
|
|
form.save()
|
|
|
|
# Course should still be authorized (invalid attempt had no effect)
|
|
self.assertTrue(EmbargoedCourse.is_embargoed(self.course.id))
|
|
|
|
def test_form_typo(self):
|
|
# Munge course id
|
|
bad_id = self.course.id.to_deprecated_string() + '_typo'
|
|
|
|
form_data = {'course_id': bad_id, 'embargoed': True}
|
|
form = EmbargoedCourseForm(data=form_data)
|
|
# Validation shouldn't work
|
|
self.assertFalse(form.is_valid())
|
|
|
|
msg = 'COURSE NOT FOUND'
|
|
msg += u' --- Entered course id was: "{0}". '.format(bad_id)
|
|
msg += 'Please recheck that you have supplied a valid course id.'
|
|
self.assertEquals(msg, form._errors['course_id'][0]) # pylint: disable=protected-access
|
|
|
|
with self.assertRaisesRegexp(ValueError, "The EmbargoedCourse could not be created because the data didn't validate."):
|
|
form.save()
|
|
|
|
def test_invalid_location(self):
|
|
# Munge course id
|
|
bad_id = self.course.id.to_deprecated_string().split('/')[-1]
|
|
|
|
form_data = {'course_id': bad_id, 'embargoed': True}
|
|
form = EmbargoedCourseForm(data=form_data)
|
|
# Validation shouldn't work
|
|
self.assertFalse(form.is_valid())
|
|
|
|
msg = 'COURSE NOT FOUND'
|
|
msg += u' --- Entered course id was: "{0}". '.format(bad_id)
|
|
msg += 'Please recheck that you have supplied a valid course id.'
|
|
self.assertEquals(msg, form._errors['course_id'][0]) # pylint: disable=protected-access
|
|
|
|
with self.assertRaisesRegexp(ValueError, "The EmbargoedCourse could not be created because the data didn't validate."):
|
|
form.save()
|
|
|
|
|
|
class EmbargoedStateFormTest(TestCase):
|
|
"""Test form for adding new states"""
|
|
|
|
def setUp(self):
|
|
# Explicitly clear the cache, since ConfigurationModel relies on the cache
|
|
cache.clear()
|
|
|
|
def tearDown(self):
|
|
# Explicitly clear ConfigurationModel's cache so tests have a clear cache
|
|
# and don't interfere with each other
|
|
cache.clear()
|
|
|
|
def test_add_valid_states(self):
|
|
# test adding valid two letter states
|
|
# case and spacing should not matter
|
|
form_data = {'embargoed_countries': 'cu, Sy , US'}
|
|
form = EmbargoedStateForm(data=form_data)
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
current_embargoes = EmbargoedState.current().embargoed_countries_list
|
|
for country in ["CU", "SY", "US"]:
|
|
self.assertIn(country, current_embargoes)
|
|
# Test clearing by adding an empty list is OK too
|
|
form_data = {'embargoed_countries': ''}
|
|
form = EmbargoedStateForm(data=form_data)
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
self.assertTrue(len(EmbargoedState.current().embargoed_countries_list) == 0)
|
|
|
|
def test_add_invalid_states(self):
|
|
# test adding invalid codes
|
|
# xx is not valid
|
|
# usa is not valid
|
|
form_data = {'embargoed_countries': 'usa, xx'}
|
|
form = EmbargoedStateForm(data=form_data)
|
|
self.assertFalse(form.is_valid())
|
|
|
|
msg = 'COULD NOT PARSE COUNTRY CODE(S) FOR: {0}'.format([u'USA', u'XX'])
|
|
msg += ' Please check the list of country codes and verify your entries.'
|
|
self.assertEquals(msg, form._errors['embargoed_countries'][0]) # pylint: disable=protected-access
|
|
|
|
with self.assertRaisesRegexp(ValueError, "The EmbargoedState could not be created because the data didn't validate."):
|
|
form.save()
|
|
|
|
self.assertFalse('USA' in EmbargoedState.current().embargoed_countries_list)
|
|
self.assertFalse('XX' in EmbargoedState.current().embargoed_countries_list)
|
|
|
|
|
|
class IPFilterFormTest(TestCase):
|
|
"""Test form for adding [black|white]list IP addresses"""
|
|
|
|
def tearDown(self):
|
|
# Explicitly clear ConfigurationModel's cache so tests have a clear cache
|
|
# and don't interfere with each other
|
|
cache.clear()
|
|
|
|
def test_add_valid_ips(self):
|
|
# test adding valid ip addresses
|
|
# should be able to do both ipv4 and ipv6
|
|
# spacing should not matter
|
|
form_data = {
|
|
'whitelist': '127.0.0.1, 2003:dead:beef:4dad:23:46:bb:101, 1.1.0.1/32, 1.0.0.0/24',
|
|
'blacklist': ' 18.244.1.5 , 2002:c0a8:101::42, 18.36.22.1, 1.0.0.0/16'
|
|
}
|
|
form = IPFilterForm(data=form_data)
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
whitelist = IPFilter.current().whitelist_ips
|
|
blacklist = IPFilter.current().blacklist_ips
|
|
for addr in '127.0.0.1, 2003:dead:beef:4dad:23:46:bb:101'.split(','):
|
|
self.assertIn(addr.strip(), whitelist)
|
|
for addr in '18.244.1.5, 2002:c0a8:101::42, 18.36.22.1'.split(','):
|
|
self.assertIn(addr.strip(), blacklist)
|
|
|
|
# Network tests
|
|
# ips not in whitelist network
|
|
for addr in ['1.1.0.2', '1.0.1.0']:
|
|
self.assertNotIn(addr.strip(), whitelist)
|
|
# ips in whitelist network
|
|
for addr in ['1.1.0.1', '1.0.0.100']:
|
|
self.assertIn(addr.strip(), whitelist)
|
|
# ips not in blacklist network
|
|
for addr in ['2.0.0.0', '1.1.0.0']:
|
|
self.assertNotIn(addr.strip(), blacklist)
|
|
# ips in blacklist network
|
|
for addr in ['1.0.100.0', '1.0.0.10']:
|
|
self.assertIn(addr.strip(), blacklist)
|
|
|
|
# Test clearing by adding an empty list is OK too
|
|
form_data = {
|
|
'whitelist': '',
|
|
'blacklist': ''
|
|
}
|
|
form = IPFilterForm(data=form_data)
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|
|
self.assertTrue(len(IPFilter.current().whitelist) == 0)
|
|
self.assertTrue(len(IPFilter.current().blacklist) == 0)
|
|
|
|
def test_add_invalid_ips(self):
|
|
# test adding invalid ip addresses
|
|
form_data = {
|
|
'whitelist': '.0.0.1, :dead:beef:::, 1.0.0.0/55',
|
|
'blacklist': ' 18.244.* , 999999:c0a8:101::42, 1.0.0.0/'
|
|
}
|
|
form = IPFilterForm(data=form_data)
|
|
self.assertFalse(form.is_valid())
|
|
|
|
wmsg = "Invalid IP Address(es): [u'.0.0.1', u':dead:beef:::', u'1.0.0.0/55'] Please fix the error(s) and try again."
|
|
self.assertEquals(wmsg, form._errors['whitelist'][0]) # pylint: disable=protected-access
|
|
bmsg = "Invalid IP Address(es): [u'18.244.*', u'999999:c0a8:101::42', u'1.0.0.0/'] Please fix the error(s) and try again."
|
|
self.assertEquals(bmsg, form._errors['blacklist'][0]) # pylint: disable=protected-access
|
|
|
|
with self.assertRaisesRegexp(ValueError, "The IPFilter could not be created because the data didn't validate."):
|
|
form.save()
|