Commit 85109386 by tasawernawaz Committed by Tasawer Nawaz

added support for different date formats in datetime fields

ECOM- 7725
parent 8b05d8db
""" Tests publisher.utils"""
from datetime import datetime
import ddt
from django.contrib.auth.models import Group
from django.core.urlresolvers import reverse
......@@ -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,
is_email_notification_enabled, is_internal_user,
is_project_coordinator_user, is_publisher_admin, is_publisher_user,
make_bread_crumbs)
make_bread_crumbs, parse_datetime_field)
@ddt.ddt
......@@ -204,3 +206,26 @@ class PublisherUtilsTests(TestCase):
self.assertFalse(has_role_for_course(self.course, self.user))
factories.CourseUserRoleFactory(course=self.course, user=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."""
from dateutil import parser
from course_discovery.apps.core.models import User
from course_discovery.apps.publisher.constants import (ADMIN_GROUP_NAME, INTERNAL_USER_GROUP_NAME,
PROJECT_COORDINATOR_GROUP_NAME)
......@@ -107,3 +108,23 @@ def has_role_for_course(course, user):
bool: True, if user has a role for course; otherwise, False.
"""
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
from course_discovery.apps.publisher.models import (Course, CourseRun, CourseRunState, CourseState, CourseUserRole,
OrganizationExtension, UserAttributes)
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
logger = logging.getLogger(__name__)
......@@ -237,6 +238,10 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
# choices into institution admin field
user = self.request.user
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(
request.POST, request.FILES, user=user, organization=organization
)
......@@ -484,6 +489,10 @@ class CreateCourseRunView(mixins.LoginRequiredMixin, CreateView):
def post(self, request, *args, **kwargs):
user = request.user
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})
seat_form = self.seat_form(request.POST)
......@@ -573,6 +582,10 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
context = self.get_context_data()
course_run = context.get('course_run')
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(
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