From eab8001ad30b6f1887089e332262cc507cf478db Mon Sep 17 00:00:00 2001 From: Dillon Dumesnil Date: Thu, 20 Feb 2020 14:27:29 -0500 Subject: [PATCH] AA-35: Adds functions to subscribe and unsubscribe from a calendar sync --- openedx/features/calendar_sync/api.py | 29 ++++++++++++++ .../features/calendar_sync/tests/test_api.py | 40 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 openedx/features/calendar_sync/api.py create mode 100644 openedx/features/calendar_sync/tests/test_api.py diff --git a/openedx/features/calendar_sync/api.py b/openedx/features/calendar_sync/api.py new file mode 100644 index 0000000000..4f8ac91a31 --- /dev/null +++ b/openedx/features/calendar_sync/api.py @@ -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) diff --git a/openedx/features/calendar_sync/tests/test_api.py b/openedx/features/calendar_sync/tests/test_api.py new file mode 100644 index 0000000000..d238374b8c --- /dev/null +++ b/openedx/features/calendar_sync/tests/test_api.py @@ -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))