Merge pull request #23153 from edx/ddumesnil/subscribe-to-calendar-AA-35

AA-35: Adds functions to subscribe and unsubscribe from a calendar sync
This commit is contained in:
Dillon Dumesnil
2020-02-24 08:19:31 -05:00
committed by GitHub
2 changed files with 69 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
""" API for the Calendar Sync Application """
from .models import UserCalendarSyncConfig
def subscribe_user_to_calendar(user, course_key):
"""
Enables the Calendar Sync config for a particular user and course.
Will create if needed.
Parameters:
user (User): The user to subscribe
course_key (CourseKey): The course key for the subscription
"""
defaults = {'enabled': True}
UserCalendarSyncConfig.objects.update_or_create(user=user, course_key=course_key, defaults=defaults)
def unsubscribe_user_to_calendar(user, course_key):
"""
Disables the Calendar Sync config for a particular user and course.
If the instance does not exist, this function will do nothing.
Parameters:
user (User): The user to subscribe
course_key (CourseKey): The course key for the subscription
"""
UserCalendarSyncConfig.objects.filter(user=user, course_key=course_key).update(enabled=False)

View File

@@ -0,0 +1,40 @@
""" Tests for the Calendar Sync API """
from openedx.features.calendar_sync.api import subscribe_user_to_calendar, unsubscribe_user_to_calendar
from openedx.features.calendar_sync.models import UserCalendarSyncConfig
from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
TEST_PASSWORD = 'test'
class TestCalendarSyncAPI(SharedModuleStoreTestCase):
""" Tests for the Calendar Sync API """
@classmethod
def setUpClass(cls):
""" Set up any course data """
super(TestCalendarSyncAPI, cls).setUpClass()
cls.course = CourseFactory.create()
cls.course_key = cls.course.id
def setUp(self):
super(TestCalendarSyncAPI, self).setUp()
self.user = UserFactory(password=TEST_PASSWORD)
def test_subscribe_to_calendar(self):
self.assertEqual(UserCalendarSyncConfig.objects.count(), 0)
subscribe_user_to_calendar(self.user, self.course_key)
self.assertEqual(UserCalendarSyncConfig.objects.count(), 1)
self.assertTrue(UserCalendarSyncConfig.is_enabled_for_course(self.user, self.course_key))
def test_unsubscribe_to_calendar(self):
self.assertEqual(UserCalendarSyncConfig.objects.count(), 0)
unsubscribe_user_to_calendar(self.user, self.course_key)
self.assertEqual(UserCalendarSyncConfig.objects.count(), 0)
UserCalendarSyncConfig.objects.create(user=self.user, course_key=self.course_key, enabled=True)
self.assertTrue(UserCalendarSyncConfig.is_enabled_for_course(self.user, self.course_key))
unsubscribe_user_to_calendar(self.user, self.course_key)
self.assertFalse(UserCalendarSyncConfig.is_enabled_for_course(self.user, self.course_key))