Commit 85109386 by tasawernawaz Committed by Tasawer Nawaz

added support for different date formats in datetime fields

ECOM- 7725
parent 8b05d8db
""" Tests publisher.utils""" """ Tests publisher.utils"""
from datetime import datetime
import ddt import ddt
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -16,7 +18,7 @@ from course_discovery.apps.publisher.tests import factories ...@@ -16,7 +18,7 @@ from course_discovery.apps.publisher.tests import factories
from course_discovery.apps.publisher.utils import (get_internal_users, has_role_for_course, from course_discovery.apps.publisher.utils import (get_internal_users, has_role_for_course,
is_email_notification_enabled, is_internal_user, is_email_notification_enabled, is_internal_user,
is_project_coordinator_user, is_publisher_admin, is_publisher_user, is_project_coordinator_user, is_publisher_admin, is_publisher_user,
make_bread_crumbs) make_bread_crumbs, parse_datetime_field)
@ddt.ddt @ddt.ddt
...@@ -204,3 +206,26 @@ class PublisherUtilsTests(TestCase): ...@@ -204,3 +206,26 @@ class PublisherUtilsTests(TestCase):
self.assertFalse(has_role_for_course(self.course, self.user)) self.assertFalse(has_role_for_course(self.course, self.user))
factories.CourseUserRoleFactory(course=self.course, user=self.user) factories.CourseUserRoleFactory(course=self.course, user=self.user)
self.assertTrue(has_role_for_course(self.course, self.user)) self.assertTrue(has_role_for_course(self.course, self.user))
@ddt.data(
'april 20, 2017',
'aug 20 2019',
'2020 may 20',
'09 04 2018',
'jan 20 2020'
)
def test_parse_datetime_field(self, date):
""" Verify that function return datetime after parsing different possible date format. """
parsed_date = parse_datetime_field(date)
self.assertTrue(isinstance(parsed_date, datetime))
@ddt.data(
None,
'jan 20 20203'
'invalid-date-string'
'jan 20'
)
def test_parse_datetime_field_with_invalid_date_format(self, invalid_date):
""" Verify that function return None if date string does not match any possible date format. """
parsed_date = parse_datetime_field(invalid_date)
self.assertIsNone(parsed_date)
""" Publisher Utils.""" """ Publisher Utils."""
from dateutil import parser
from course_discovery.apps.core.models import User from course_discovery.apps.core.models import User
from course_discovery.apps.publisher.constants import (ADMIN_GROUP_NAME, INTERNAL_USER_GROUP_NAME, from course_discovery.apps.publisher.constants import (ADMIN_GROUP_NAME, INTERNAL_USER_GROUP_NAME,
PROJECT_COORDINATOR_GROUP_NAME) PROJECT_COORDINATOR_GROUP_NAME)
...@@ -107,3 +108,23 @@ def has_role_for_course(course, user): ...@@ -107,3 +108,23 @@ def has_role_for_course(course, user):
bool: True, if user has a role for course; otherwise, False. bool: True, if user has a role for course; otherwise, False.
""" """
return course.course_user_roles.filter(user=user).exists() return course.course_user_roles.filter(user=user).exists()
def parse_datetime_field(date):
"""
Parse datetime field to make same format YYYY-MM-DD 00:00:00.
Arguments:
date (str): date string in any possible format
Returns:
datetime (object): returns datetime object after parsing
"""
if not date:
return
try:
return parser.parse(date)
except ValueError:
return
...@@ -25,7 +25,8 @@ from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourse ...@@ -25,7 +25,8 @@ from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourse
from course_discovery.apps.publisher.models import (Course, CourseRun, CourseRunState, CourseState, CourseUserRole, from course_discovery.apps.publisher.models import (Course, CourseRun, CourseRunState, CourseState, CourseUserRole,
OrganizationExtension, UserAttributes) OrganizationExtension, UserAttributes)
from course_discovery.apps.publisher.utils import (get_internal_users, has_role_for_course, is_internal_user, from course_discovery.apps.publisher.utils import (get_internal_users, has_role_for_course, is_internal_user,
is_project_coordinator_user, is_publisher_admin, make_bread_crumbs) is_project_coordinator_user, is_publisher_admin, make_bread_crumbs,
parse_datetime_field)
from course_discovery.apps.publisher.wrappers import CourseRunWrapper from course_discovery.apps.publisher.wrappers import CourseRunWrapper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -237,6 +238,10 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi ...@@ -237,6 +238,10 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
# choices into institution admin field # choices into institution admin field
user = self.request.user user = self.request.user
organization = self.request.POST.get('organization') organization = self.request.POST.get('organization')
self.request.POST['start'] = parse_datetime_field(self.request.POST.get('start'))
self.request.POST['end'] = parse_datetime_field(self.request.POST.get('end'))
course_form = self.course_form( course_form = self.course_form(
request.POST, request.FILES, user=user, organization=organization request.POST, request.FILES, user=user, organization=organization
) )
...@@ -484,6 +489,10 @@ class CreateCourseRunView(mixins.LoginRequiredMixin, CreateView): ...@@ -484,6 +489,10 @@ class CreateCourseRunView(mixins.LoginRequiredMixin, CreateView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
user = request.user user = request.user
parent_course = self.get_parent_course() parent_course = self.get_parent_course()
self.request.POST['start'] = parse_datetime_field(self.request.POST.get('start'))
self.request.POST['end'] = parse_datetime_field(self.request.POST.get('end'))
run_form = self.run_form(request.POST, initial={'contacted_partner_manager': False}) run_form = self.run_form(request.POST, initial={'contacted_partner_manager': False})
seat_form = self.seat_form(request.POST) seat_form = self.seat_form(request.POST)
...@@ -573,6 +582,10 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix ...@@ -573,6 +582,10 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
context = self.get_context_data() context = self.get_context_data()
course_run = context.get('course_run') course_run = context.get('course_run')
lms_course_id = course_run.lms_course_id lms_course_id = course_run.lms_course_id
self.request.POST['start'] = parse_datetime_field(self.request.POST.get('start'))
self.request.POST['end'] = parse_datetime_field(self.request.POST.get('end'))
run_form = self.run_form( run_form = self.run_form(
request.POST, instance=course_run, is_project_coordinator=context.get('is_project_coordinator') request.POST, instance=course_run, is_project_coordinator=context.get('is_project_coordinator')
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment