From 23544ccc2adfd65f9108c1975864b842b8889277 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 17 Mar 2020 14:01:31 -0400 Subject: [PATCH] Minor fixes to ics for events Updates to the description field in the ics file we generate for scheduled events. --- openedx/features/calendar_sync/ics.py | 16 ++++++++-------- openedx/features/calendar_sync/tests/test_ics.py | 9 ++++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/openedx/features/calendar_sync/ics.py b/openedx/features/calendar_sync/ics.py index d36078181c..706b092768 100644 --- a/openedx/features/calendar_sync/ics.py +++ b/openedx/features/calendar_sync/ics.py @@ -4,6 +4,7 @@ from datetime import datetime, timedelta import pytz from django.conf import settings +from django.utils.translation import gettext as _ from icalendar import Calendar, Event, vCalAddress, vText from lms.djangoapps.courseware.courses import get_course_assignments @@ -13,7 +14,7 @@ from openedx.core.djangolib.markup import HTML from . import get_calendar_event_id -def generate_ics_for_event(uid, summary, url, now, start, organizer_name, organizer_email): +def generate_ics_for_event(uid, title, course_name, now, start, organizer_name, organizer_email): """ Generates an ics-formatted bytestring for the given assignment information. @@ -30,9 +31,8 @@ def generate_ics_for_event(uid, summary, url, now, start, organizer_name, organi event.add('uid', uid) event.add('dtstamp', now) event.add('organizer', organizer, encode=0) - event.add('summary', summary) - # FIXME description should be translated if we use hardcoded text, once we finalize that text - event.add('description', HTML('Link').format(url=url)) + event.add('summary', title) + event.add('description', HTML(_('{assignment} is due for {course}.')).format(assignment=title, course=course_name)) event.add('dtstart', start) event.add('duration', timedelta(0)) event.add('transp', 'TRANSPARENT') # available, rather than busy @@ -46,7 +46,7 @@ def generate_ics_for_event(uid, summary, url, now, start, organizer_name, organi return cal.to_ical() -def generate_ics_for_user_course(course_key, user, request): +def generate_ics_for_user_course(course, user, request): """ Generates ics-formatted bytestrings of all assignments for a given course and user. @@ -54,7 +54,7 @@ def generate_ics_for_user_course(course_key, user, request): Returns an iterable of ics files, each one representing an assignment. """ - assignments = get_course_assignments(course_key, user, request) + assignments = get_course_assignments(course.id, user, request) platform_name = get_value('platform_name', settings.PLATFORM_NAME) platform_email = get_value('email_from_address', settings.DEFAULT_FROM_EMAIL) now = datetime.now(pytz.utc) @@ -65,9 +65,9 @@ def generate_ics_for_user_course(course_key, user, request): organizer_name=platform_name, organizer_email=platform_email, start=assignment.date, - summary=assignment.title, + title=assignment.title, + course_name=course.display_name_with_default, uid=get_calendar_event_id(user, str(assignment.block_key), 'due', request.site.domain), - url=assignment.url, ) for assignment in assignments ) diff --git a/openedx/features/calendar_sync/tests/test_ics.py b/openedx/features/calendar_sync/tests/test_ics.py index 9d70b38ea2..8fa356fba2 100644 --- a/openedx/features/calendar_sync/tests/test_ics.py +++ b/openedx/features/calendar_sync/tests/test_ics.py @@ -8,6 +8,7 @@ from freezegun import freeze_time from mock import patch from lms.djangoapps.courseware.courses import _Assignment +from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory from openedx.features.calendar_sync import get_calendar_event_id from openedx.features.calendar_sync.ics import generate_ics_for_user_course @@ -23,6 +24,8 @@ class TestIcsGeneration(TestCase): self.addCleanup(freezer.stop) freezer.start() + self.course = CourseOverviewFactory() + self.user = UserFactory() self.request = RequestFactory().request() self.request.site = SiteFactory() @@ -44,7 +47,7 @@ DTSTART;VALUE=DATE-TIME:{timedue} DURATION:P0D DTSTAMP;VALUE=DATE-TIME:20131003T082455Z UID:{uid} -DESCRIPTION:Link +DESCRIPTION:{summary} is due for {course}. ORGANIZER;CN=édX:mailto:registration@example.com TRANSP:TRANSPARENT END:VEVENT @@ -53,8 +56,8 @@ END:VCALENDAR return ( template.format( summary=assignment.title, + course=self.course.display_name_with_default, timedue=assignment.date.strftime('%Y%m%dT%H%M%SZ'), - url=assignment.url, uid=get_calendar_event_id(self.user, str(assignment.block_key), 'due', self.request.site.domain), ) for assignment in assignments @@ -64,7 +67,7 @@ END:VCALENDAR """ Uses generate_ics_for_user_course to create ics files for the given assignments """ with patch('openedx.features.calendar_sync.ics.get_course_assignments') as mock_get_assignments: mock_get_assignments.return_value = assignments - return generate_ics_for_user_course('a/b/c', self.user, self.request) + return generate_ics_for_user_course(self.course, self.user, self.request) def assert_ics(self, *assignments): """ Asserts that the generated and expected ics for the given assignments are equal """