""" 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))
