Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
course-discovery
Commits
0eedab67
Commit
0eedab67
authored
Sep 27, 2016
by
Awais
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update publisher models
Adding new migration. ECOM-5802
parent
b6ed9e1c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
116 additions
and
13 deletions
+116
-13
course_discovery/apps/publisher/migrations/0009_auto_20160929_1927.py
+68
-0
course_discovery/apps/publisher/models.py
+20
-3
course_discovery/apps/publisher/tests/factories.py
+0
-1
course_discovery/apps/publisher/tests/test_views.py
+27
-8
course_discovery/templates/publisher/course_form.html
+1
-1
No files found.
course_discovery/apps/publisher/migrations/0009_auto_20160929_1927.py
0 → 100644
View file @
0eedab67
# -*- 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
),
),
]
course_discovery/apps/publisher/models.py
View file @
0eedab67
...
...
@@ -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
()
...
...
course_discovery/apps/publisher/tests/factories.py
View file @
0eedab67
...
...
@@ -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"
...
...
course_discovery/apps/publisher/tests/test_views.py
View file @
0eedab67
...
...
@@ -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
)
...
...
course_discovery/templates/publisher/course_form.html
View file @
0eedab67
...
...
@@ -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 %}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment