from django.contrib.auth.models import User, Group from django.core.urlresolvers import reverse from django.test import TestCase from django.test.client import RequestFactory from django.conf import settings from mock import Mock from override_settings import override_settings import xmodule.modulestore.django from student.models import CourseEnrollment from django.db.models.signals import m2m_changed, pre_delete, pre_save, post_delete, post_save from django.dispatch.dispatcher import _make_id import string import random from .permissions import has_permission from .models import Role, Permission from xmodule.modulestore.django import modulestore from xmodule.modulestore import Location from xmodule.modulestore.xml_importer import import_from_xml from xmodule.modulestore.xml import XMLModuleStore import comment_client from courseware.tests.tests import PageLoader, TEST_DATA_XML_MODULESTORE #@override_settings(MODULESTORE=TEST_DATA_XML_MODULESTORE) #class TestCohorting(PageLoader): # """Check that cohorting works properly""" # # def setUp(self): # xmodule.modulestore.django._MODULESTORES = {} # # # Assume courses are there # self.toy = modulestore().get_course("edX/toy/2012_Fall") # # # Create two accounts # self.student = 'view@test.com' # self.student2 = 'view2@test.com' # self.password = 'foo' # self.create_account('u1', self.student, self.password) # self.create_account('u2', self.student2, self.password) # self.activate_user(self.student) # self.activate_user(self.student2) # # def test_create_thread(self): # my_save = Mock() # comment_client.perform_request = my_save # # resp = self.client.post( # reverse('django_comment_client.base.views.create_thread', # kwargs={'course_id': 'edX/toy/2012_Fall', # 'commentable_id': 'General'}), # {'some': "some", # 'data': 'data'}) # self.assertTrue(my_save.called) # # #self.assertEqual(resp.status_code, 200) # #self.assertEqual(my_save.something, "expected", "complaint if not true") # # self.toy.metadata["cohort_config"] = {"cohorted": True} # # # call the view again ... # # # assert that different things happened class PermissionsTestCase(TestCase): def random_str(self, length=15, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for x in range(length)) def setUp(self): self.course_id = "edX/toy/2012_Fall" self.moderator_role = Role.objects.get_or_create(name="Moderator", course_id=self.course_id)[0] self.student_role = Role.objects.get_or_create(name="Student", course_id=self.course_id)[0] self.student = User.objects.create(username=self.random_str(), password="123456", email="john@yahoo.com") self.moderator = User.objects.create(username=self.random_str(), password="123456", email="staff@edx.org") self.moderator.is_staff = True self.moderator.save() self.student_enrollment = CourseEnrollment.objects.create(user=self.student, course_id=self.course_id) self.moderator_enrollment = CourseEnrollment.objects.create(user=self.moderator, course_id=self.course_id) def tearDown(self): self.student_enrollment.delete() self.moderator_enrollment.delete() # Do we need to have this? We shouldn't be deleting students, ever # self.student.delete() # self.moderator.delete() def testDefaultRoles(self): self.assertTrue(self.student_role in self.student.roles.all()) self.assertTrue(self.moderator_role in self.moderator.roles.all()) def testPermission(self): name = self.random_str() self.moderator_role.add_permission(name) self.assertTrue(has_permission(self.moderator, name, self.course_id)) self.student_role.add_permission(name) self.assertTrue(has_permission(self.student, name, self.course_id))