diff --git a/openedx/core/djangoapps/user_api/models.py b/openedx/core/djangoapps/user_api/models.py index 5b824139bb..0ae3b9d6c8 100644 --- a/openedx/core/djangoapps/user_api/models.py +++ b/openedx/core/djangoapps/user_api/models.py @@ -8,6 +8,7 @@ from django.db.models.signals import post_delete, post_save, pre_delete, pre_sav from django.dispatch import receiver from model_utils.models import TimeStampedModel from opaque_keys.edx.django.models import CourseKeyField +from openedx.core.djangolib.model_mixins import DeletableByUserValue # Currently, the "student" app is responsible for # accounts, profiles, enrollments, and the student dashboard. @@ -121,7 +122,7 @@ class UserCourseTag(models.Model): unique_together = ("user", "course_id", "key") -class UserOrgTag(TimeStampedModel): +class UserOrgTag(TimeStampedModel, DeletableByUserValue): # pylint: disable=model-missing-unicode """ Per-Organization user tags. diff --git a/openedx/core/djangoapps/user_api/tests/test_models.py b/openedx/core/djangoapps/user_api/tests/test_models.py index ba23299bf4..7af667054e 100644 --- a/openedx/core/djangoapps/user_api/tests/test_models.py +++ b/openedx/core/djangoapps/user_api/tests/test_models.py @@ -10,7 +10,7 @@ from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from ..tests.factories import UserPreferenceFactory, UserCourseTagFactory, UserOrgTagFactory -from ..models import UserPreference +from ..models import UserPreference, UserOrgTag from ..preferences.api import set_user_preference @@ -77,6 +77,30 @@ class UserPreferenceModelTest(ModuleStoreTestCase): self.assertEquals(tag.value, "barfoo") self.assertNotEqual(original_modified, tag.modified) + def test_retire_user_org_tags_by_user_value(self): + """Create org specific user tags and confirm all properties are set """ + user = UserFactory.create() + course = CourseFactory.create() + UserOrgTagFactory.create(user=user, org=course.id.org, key="testkey", value="foobar") + UserOrgTagFactory.create(user=user, org=course.id.org + "x", key="testkey", value="foobar") + self.assertEqual(len(UserOrgTag.objects.filter(user_id=user.id)), 2) + # Delete the tags by user value. Ensure the rows no longer exist. + UserOrgTag.delete_by_user_value(user.id, "user_id") + + self.assertEqual(len(UserOrgTag.objects.filter(user_id=user.id)), 0) + + def test_retire_user_org_tags_only_deletes_user(self): + """Create org specific user tags and confirm all properties are set """ + user = UserFactory.create() + other_user = UserFactory.create() + course = CourseFactory.create() + UserOrgTagFactory.create(user=user, org=course.id.org, key="testkey", value="foobar") + UserOrgTagFactory.create(user=other_user, org=course.id.org, key="testkey", value="foobar") + # Delete the tags by user value. Ensure the other user's row is still present. + UserOrgTag.delete_by_user_value(user.id, "user_id") + + self.assertEqual(len(UserOrgTag.objects.filter(user_id=other_user.id)), 1) + def test_get_value(self): """Verifies the behavior of get_value."""