"""Unit tests for parental controls.""" import datetime from django.test import TestCase from django.test.utils import override_settings from student.models import UserProfile from student.tests.factories import UserFactory class ProfileParentalControlsTest(TestCase): """Unit tests for requires_parental_consent.""" password = "test" def setUp(self): super(ProfileParentalControlsTest, self).setUp() self.user = UserFactory.create(password=self.password) self.profile = UserProfile.objects.get(id=self.user.id) def set_year_of_birth(self, year_of_birth): """ Helper method that creates a mock profile for the specified user. """ self.profile.year_of_birth = year_of_birth self.profile.save() def test_no_year_of_birth(self): """Verify the behavior for users with no specified year of birth.""" self.assertTrue(self.profile.requires_parental_consent()) self.assertTrue(self.profile.requires_parental_consent(default_requires_consent=True)) self.assertFalse(self.profile.requires_parental_consent(default_requires_consent=False)) @override_settings(PARENTAL_CONSENT_AGE_LIMIT=None) def test_no_parental_controls(self): """Verify the behavior for all users when parental controls are not enabled.""" self.assertFalse(self.profile.requires_parental_consent()) self.assertFalse(self.profile.requires_parental_consent(default_requires_consent=True)) self.assertFalse(self.profile.requires_parental_consent(default_requires_consent=False)) # Verify that even a child does not require parental consent current_year = datetime.datetime.now().year self.set_year_of_birth(current_year - 10) self.assertFalse(self.profile.requires_parental_consent()) def test_adult_user(self): """Verify the behavior for an adult.""" current_year = datetime.datetime.now().year self.set_year_of_birth(current_year - 20) self.assertFalse(self.profile.requires_parental_consent()) self.assertTrue(self.profile.requires_parental_consent(age_limit=21)) def test_child_user(self): """Verify the behavior for a child.""" current_year = datetime.datetime.now().year # Verify for a child born 13 years agp self.set_year_of_birth(current_year - 13) self.assertTrue(self.profile.requires_parental_consent()) self.assertTrue(self.profile.requires_parental_consent(date=datetime.date(current_year, 12, 31))) self.assertFalse(self.profile.requires_parental_consent(date=datetime.date(current_year + 1, 1, 1))) # Verify for a child born 14 years ago self.set_year_of_birth(current_year - 14) self.assertFalse(self.profile.requires_parental_consent()) self.assertFalse(self.profile.requires_parental_consent(date=datetime.date(current_year, 1, 1))) def test_profile_image(self): """Verify that a profile's image obeys parental controls.""" # Verify that an image cannot be set for a user with no year of birth set self.profile.profile_image_uploaded_at = datetime.datetime.now() self.profile.save() self.assertFalse(self.profile.has_profile_image) # Verify that an image can be set for an adult user current_year = datetime.datetime.now().year self.set_year_of_birth(current_year - 20) self.profile.profile_image_uploaded_at = datetime.datetime.now() self.profile.save() self.assertTrue(self.profile.has_profile_image) # verify that a user's profile image is removed when they switch to requiring parental controls self.set_year_of_birth(current_year - 10) self.profile.save() self.assertFalse(self.profile.has_profile_image)