Commit 0eedab67 by Awais

Update publisher models

Adding new migration.
ECOM-5802
parent b6ed9e1c
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import stdimage.models
import django.db.models.deletion
from django.conf import settings
import course_discovery.apps.course_metadata.utils
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ietf_language_tags', '0005_fix_language_tag_names_again'),
('publisher', '0008_auto_20160928_1015'),
]
operations = [
migrations.RemoveField(
model_name='courserun',
name='seo_review',
),
migrations.RemoveField(
model_name='historicalcourserun',
name='seo_review',
),
migrations.AddField(
model_name='course',
name='image',
field=stdimage.models.StdImageField(null=True, blank=True, upload_to=course_discovery.apps.course_metadata.utils.UploadToFieldNamePath('number', path='media/publisher/courses/images')),
),
migrations.AddField(
model_name='course',
name='team_admin',
field=models.ForeignKey(related_name='team_admin_user', null=True, to=settings.AUTH_USER_MODEL, blank=True),
),
migrations.AddField(
model_name='courserun',
name='is_seo_review',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='courserun',
name='video_language',
field=models.ForeignKey(related_name='video_language', null=True, to='ietf_language_tags.LanguageTag', blank=True),
),
migrations.AddField(
model_name='historicalcourse',
name='image',
field=models.TextField(max_length=100, null=True, blank=True),
),
migrations.AddField(
model_name='historicalcourse',
name='team_admin',
field=models.ForeignKey(related_name='+', null=True, db_constraint=False, to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.DO_NOTHING, blank=True),
),
migrations.AddField(
model_name='historicalcourserun',
name='is_seo_review',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalcourserun',
name='video_language',
field=models.ForeignKey(related_name='+', null=True, db_constraint=False, to='ietf_language_tags.LanguageTag', on_delete=django.db.models.deletion.DO_NOTHING, blank=True),
),
]
......@@ -10,10 +10,12 @@ from django_fsm import FSMField, transition
from guardian.shortcuts import assign_perm
from simple_history.models import HistoricalRecords
from sortedm2m.fields import SortedManyToManyField
from stdimage.models import StdImageField
from course_discovery.apps.core.models import User, Currency
from course_discovery.apps.course_metadata.choices import CourseRunPacing
from course_discovery.apps.course_metadata.models import LevelType, Subject, Person, Organization
from course_discovery.apps.course_metadata.utils import UploadToFieldNamePath
from course_discovery.apps.ietf_language_tags.models import LanguageTag
logger = logging.getLogger(__name__)
......@@ -112,6 +114,21 @@ class Course(TimeStampedModel, ChangedByMixin):
Subject, default=None, null=True, blank=True, related_name='publisher_courses_tertiary'
)
team_admin = models.ForeignKey(User, null=True, blank=True, related_name='team_admin_user')
image = StdImageField(
upload_to=UploadToFieldNamePath(
populate_from='number',
path='media/publisher/courses/images'
),
blank=True,
null=True,
variations={
'large': (2120, 1192),
'medium': (1440, 480),
'thumbnail': (100, 100, True),
}
)
history = HistoricalRecords()
def __str__(self):
......@@ -183,9 +200,8 @@ class CourseRun(TimeStampedModel, ChangedByMixin):
is_micromasters = models.BooleanField(default=False)
micromasters_name = models.CharField(max_length=255, null=True, blank=True)
contacted_partner_manager = models.BooleanField(default=False)
seo_review = models.TextField(
default=None, null=True, blank=True, help_text=_("SEO review on your course title and short description")
)
is_seo_review = models.BooleanField(default=False)
keywords = models.TextField(
default=None, blank=True, help_text=_("Please add top 10 comma separated keywords for your course content")
)
......@@ -206,6 +222,7 @@ class CourseRun(TimeStampedModel, ChangedByMixin):
"Comma separated list of edX usernames or emails of additional staff."
)
)
video_language = models.ForeignKey(LanguageTag, null=True, blank=True, related_name='video_language')
history = HistoricalRecords()
......
......@@ -51,7 +51,6 @@ class CourseRunFactory(factory.DjangoModelFactory):
language = factory.Iterator(LanguageTag.objects.all())
pacing_type = FuzzyChoice([name for name, __ in CourseRunPacing.choices])
length = FuzzyInteger(1, 10)
seo_review = "test-seo-review"
keywords = "Test1, Test2, Test3"
notes = "Testing notes"
......
......@@ -9,6 +9,7 @@ from django.test import TestCase
from guardian.shortcuts import assign_perm
from course_discovery.apps.core.tests.factories import UserFactory, USER_PASSWORD
from course_discovery.apps.core.tests.helpers import make_image_file
from course_discovery.apps.publisher.models import Course, CourseRun, Seat, State
from course_discovery.apps.publisher.tests import factories
from course_discovery.apps.publisher.tests.utils import create_non_staff_user_and_login
......@@ -17,6 +18,7 @@ from course_discovery.apps.publisher.wrappers import CourseRunWrapper
from course_discovery.apps.publisher_comments.tests.factories import CommentFactory
@ddt.ddt
class CreateUpdateCourseViewTests(TestCase):
""" Tests for the publisher `CreateCourseView` and `UpdateCourseView`. """
......@@ -44,13 +46,23 @@ class CreateUpdateCourseViewTests(TestCase):
target_status_code=302
)
def test_create_course(self):
""" Verify that we can create a new course. """
# Create unique course number
course_number = '{}.1.456'.format(self.course.number)
@ddt.data(
{'number': 'course_1', 'image': '', 'team_admin': False},
{'number': 'course_2', 'image': make_image_file('test_banner.jpg'), 'team_admin': False},
{'number': 'course_3', 'image': make_image_file('test_banner1.jpg'), 'team_admin': True}
)
def test_create_course(self, data):
""" Verify that new course can be created with different data sets. """
course_dict = model_to_dict(self.course)
course_dict.pop('verification_deadline')
course_dict['number'] = course_number
course_dict.update(**data)
if data['team_admin']:
course_dict['team_admin'] = self.user.id
else:
course_dict['team_admin'] = ''
course_number = course_dict['number']
response = self.client.post(reverse('publisher:publisher_courses_new'), course_dict)
course = Course.objects.get(number=course_number)
......@@ -71,6 +83,9 @@ class CreateUpdateCourseViewTests(TestCase):
""" Verify that staff user can update an existing course. """
course_dict = model_to_dict(self.course)
course_dict.pop('verification_deadline')
course_dict.pop('image')
course_dict.pop('team_admin')
updated_course_title = 'Updated {}'.format(self.course.title)
course_dict['title'] = updated_course_title
self.assertNotEqual(self.course.title, updated_course_title)
......@@ -126,9 +141,11 @@ class CreateUpdateCourseViewTests(TestCase):
def test_update_course_with_non_staff(self):
""" Tests for update course with non staff user. """
non_staff_user, group = create_non_staff_user_and_login(self)
course_dict = model_to_dict(self.course)
course_dict.pop('verification_deadline')
course_dict.pop('image')
course_dict.pop('team_admin')
updated_course_title = 'Updated {}'.format(self.course.title)
course_dict['title'] = updated_course_title
self.assertNotEqual(self.course.title, updated_course_title)
......@@ -148,7 +165,6 @@ class CreateUpdateCourseViewTests(TestCase):
reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}),
course_dict
)
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}),
......@@ -177,7 +193,10 @@ class CreateUpdateCourseRunViewTests(TestCase):
self.course_run_dict = model_to_dict(self.course_run)
self._pop_valuse_from_dict(
self.course_run_dict,
['start', 'end', 'enrollment_start', 'enrollment_end', 'priority', 'certificate_generation']
[
'start', 'end', 'enrollment_start', 'enrollment_end',
'priority', 'certificate_generation', 'video_language'
]
)
self.user = UserFactory(is_staff=True, is_superuser=True)
self.site = Site.objects.get(pk=settings.SITE_ID)
......
......@@ -9,7 +9,7 @@
<div class="publisher-container">
<div class="course-information">
<h4 class="hd-4">{% trans "Course Form" %}</h4>
<form class="form" method="post" action="">
<form class="form" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
{% for field in form %}
......
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