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
6bf86e89
Commit
6bf86e89
authored
Apr 17, 2018
by
Ibrahim
Committed by
Matt Tuchfarber
Jun 05, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test cases for whitelabel journal
parent
d4d9eea3
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
202 additions
and
26 deletions
+202
-26
course_discovery/apps/core/tests/factories.py
+9
-1
course_discovery/apps/journal/admin.py
+2
-1
course_discovery/apps/journal/api/filters.py
+3
-2
course_discovery/apps/journal/api/serializers.py
+1
-1
course_discovery/apps/journal/api/v1/tests/__init__.py
+0
-0
course_discovery/apps/journal/api/v1/tests/test_views.py
+56
-0
course_discovery/apps/journal/api/v1/urls.py
+1
-1
course_discovery/apps/journal/api/v1/views.py
+4
-4
course_discovery/apps/journal/choices.py
+1
-0
course_discovery/apps/journal/migrations/0001_initial.py
+3
-2
course_discovery/apps/journal/migrations/0002_auto_20180322_1823.py
+3
-2
course_discovery/apps/journal/migrations/0004_journalbundle_partner.py
+1
-1
course_discovery/apps/journal/migrations/0005_auto_20180329_2009.py
+1
-1
course_discovery/apps/journal/migrations/0006_auto_20180403_1927.py
+2
-1
course_discovery/apps/journal/migrations/0010_journal_status.py
+1
-1
course_discovery/apps/journal/models.py
+3
-2
course_discovery/apps/journal/tests.py
+0
-3
course_discovery/apps/journal/tests/__init__.py
+0
-0
course_discovery/apps/journal/tests/factories.py
+50
-0
course_discovery/apps/journal/tests/test_models.py
+29
-0
course_discovery/apps/journal/views.py
+0
-2
course_discovery/conf/locale/en/LC_MESSAGES/django.po
+14
-0
course_discovery/conf/locale/eo/LC_MESSAGES/django.po
+18
-1
No files found.
course_discovery/apps/core/tests/factories.py
View file @
6bf86e89
import
factory
from
django.contrib.sites.models
import
Site
from
course_discovery.apps.core.models
import
Partner
,
User
from
course_discovery.apps.core.models
import
Currency
,
Partner
,
User
from
course_discovery.apps.core.tests.utils
import
FuzzyUrlRoot
USER_PASSWORD
=
'password'
...
...
@@ -60,3 +60,11 @@ class PartnerFactory(factory.DjangoModelFactory):
class
Meta
(
object
):
model
=
Partner
class
CurrencyFactory
(
factory
.
DjangoModelFactory
):
code
=
factory
.
fuzzy
.
FuzzyText
()
name
=
factory
.
fuzzy
.
FuzzyText
()
class
Meta
(
object
):
model
=
Currency
course_discovery/apps/journal/admin.py
View file @
6bf86e89
from
django.contrib
import
admin
from
.models
import
JournalBundle
,
Journal
from
.models
import
Journal
,
JournalBundle
@admin.register
(
Journal
)
...
...
course_discovery/apps/journal/api/filters.py
View file @
6bf86e89
'''Filter class for Journals'''
from
course_discovery.apps.journal.models
import
Journal
from
course_discovery.apps.journal.choices
import
JournalStatus
from
django_filters
import
rest_framework
as
filters
from
course_discovery.apps.journal.choices
import
JournalStatus
from
course_discovery.apps.journal.models
import
Journal
class
CharListFilter
(
filters
.
CharFilter
):
""" Filters a field via a comma-delimited list of values. """
...
...
course_discovery/apps/journal/api/serializers.py
View file @
6bf86e89
...
...
@@ -2,9 +2,9 @@
from
rest_framework
import
serializers
from
course_discovery.apps.api.serializers
import
MinimalCourseSerializer
from
course_discovery.apps.journal.models
import
Journal
,
JournalBundle
from
course_discovery.apps.core.models
import
Currency
,
Partner
from
course_discovery.apps.course_metadata.models
import
Organization
from
course_discovery.apps.journal.models
import
Journal
,
JournalBundle
class
JournalSerializer
(
serializers
.
ModelSerializer
):
...
...
course_discovery/apps/journal/api/v1/tests/__init__.py
0 → 100644
View file @
6bf86e89
course_discovery/apps/journal/api/v1/tests/test_views.py
0 → 100644
View file @
6bf86e89
from
pytest
import
mark
from
rest_framework.reverse
import
reverse
from
rest_framework.test
import
APITestCase
from
course_discovery.apps.core.tests.factories
import
USER_PASSWORD
,
UserFactory
from
course_discovery.apps.journal.tests.factories
import
JournalBundleFactory
,
JournalFactory
@mark.django_db
class
JournalViewSetTests
(
APITestCase
):
""" Tests for the JournalViewSet. """
def
setUp
(
self
):
super
(
JournalViewSetTests
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
is_staff
=
True
)
self
.
journal
=
JournalFactory
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
USER_PASSWORD
)
self
.
journal_url
=
reverse
(
'journal:api:v1:journal-list'
)
def
test_without_authentication
(
self
):
""" Verify authentication is required when accessing the endpoint. """
self
.
client
.
logout
()
response
=
self
.
client
.
get
(
self
.
journal_url
)
self
.
assertEqual
(
response
.
status_code
,
403
)
def
test_list
(
self
):
""" Verify response on list view. """
response
=
self
.
client
.
get
(
self
.
journal_url
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]),
1
)
self
.
assertTrue
(
'partner'
in
response
.
data
[
'results'
][
0
])
@mark.django_db
class
JournalBundleViewSetTests
(
APITestCase
):
""" Tests for the JournalBundleViewSet. """
def
setUp
(
self
):
super
(
JournalBundleViewSetTests
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
is_staff
=
True
)
self
.
journal_bundle
=
JournalBundleFactory
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
USER_PASSWORD
)
self
.
journal_bundle_url
=
reverse
(
'journal:api:v1:journal_bundle-list'
)
def
test_without_authentication
(
self
):
""" Verify authentication is required when accessing the endpoint. """
self
.
client
.
logout
()
response
=
self
.
client
.
get
(
self
.
journal_bundle_url
)
self
.
assertEqual
(
response
.
status_code
,
403
)
def
test_list
(
self
):
""" Verify response on list view. """
response
=
self
.
client
.
get
(
self
.
journal_bundle_url
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]),
1
)
self
.
assertTrue
(
'journals'
in
response
.
data
[
'results'
][
0
])
course_discovery/apps/journal/api/v1/urls.py
View file @
6bf86e89
""" API v1 URLs. """
from
rest_framework.routers
import
DefaultRouter
from
.views
import
Journal
ViewSet
,
JournalBundle
ViewSet
from
.views
import
Journal
BundleViewSet
,
Journal
ViewSet
router
=
DefaultRouter
()
router
.
register
(
r'journals'
,
JournalViewSet
,
base_name
=
'journal'
)
...
...
course_discovery/apps/journal/api/v1/views.py
View file @
6bf86e89
'''JournalViewSet'''
from
django_filters.rest_framework
import
DjangoFilterBackend
from
rest_framework
import
viewsets
from
rest_framework_extensions.cache.mixins
import
CacheResponseMixin
from
rest_framework.permissions
import
IsAdminUser
from
rest_framework_extensions.cache.mixins
import
CacheResponseMixin
from
course_discovery.apps.journal.models
import
Journal
,
JournalBundle
from
course_discovery.apps.journal.api.filters
import
JournalFilter
from
course_discovery.apps.journal.api.serializers
import
JournalSerializer
,
JournalBundleSerializer
from
course_discovery.apps.journal
import
constants
as
journal_constants
from
course_discovery.apps.journal.api.filters
import
JournalFilter
from
course_discovery.apps.journal.api.serializers
import
JournalBundleSerializer
,
JournalSerializer
from
course_discovery.apps.journal.models
import
Journal
,
JournalBundle
class
JournalViewSet
(
viewsets
.
ModelViewSet
):
...
...
course_discovery/apps/journal/choices.py
View file @
6bf86e89
from
django.utils.translation
import
ugettext_lazy
as
_
from
djchoices
import
ChoiceItem
,
DjangoChoices
class
JournalStatus
(
DjangoChoices
):
Active
=
ChoiceItem
(
'active'
,
_
(
'Active'
))
Inactive
=
ChoiceItem
(
'inactive'
,
_
(
'Inactive'
))
course_discovery/apps/journal/migrations/0001_initial.py
View file @
6bf86e89
...
...
@@ -2,10 +2,11 @@
# Generated by Django 1.11.3 on 2018-03-21 20:02
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
uuid
import
django.db.models.deletion
import
django_extensions.db.fields
import
uuid
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/migrations/0002_auto_20180322_1823.py
View file @
6bf86e89
...
...
@@ -2,10 +2,11 @@
# Generated by Django 1.11.3 on 2018-03-22 18:23
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
django_extensions.db.fields
import
uuid
import
django_extensions.db.fields
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/migrations/0004_journalbundle_partner.py
View file @
6bf86e89
...
...
@@ -2,8 +2,8 @@
# Generated by Django 1.11.3 on 2018-03-22 20:17
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
django.db.models.deletion
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/migrations/0005_auto_20180329_2009.py
View file @
6bf86e89
...
...
@@ -2,8 +2,8 @@
# Generated by Django 1.11.11 on 2018-03-29 20:09
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
django.db.models.deletion
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/migrations/0006_auto_20180403_1927.py
View file @
6bf86e89
...
...
@@ -2,9 +2,10 @@
# Generated by Django 1.11.11 on 2018-04-03 19:27
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
uuid
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/migrations/0010_journal_status.py
View file @
6bf86e89
...
...
@@ -2,8 +2,8 @@
# Generated by Django 1.11.3 on 2018-04-11 20:03
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
djchoices.choices
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
...
...
course_discovery/apps/journal/models.py
View file @
6bf86e89
from
uuid
import
uuid4
from
django.db
import
models
from
django_extensions.db.models
import
TimeStampedModel
from
django.utils.translation
import
ugettext_lazy
as
_
from
uuid
import
uuid4
from
django_extensions.db.models
import
TimeStampedModel
from
course_discovery.apps.core.models
import
Currency
,
Partner
from
course_discovery.apps.course_metadata.models
import
Course
,
Organization
,
SeatType
...
...
course_discovery/apps/journal/tests.py
deleted
100644 → 0
View file @
d4d9eea3
from
django.test
import
TestCase
# Create your tests here.
course_discovery/apps/journal/tests/__init__.py
0 → 100644
View file @
6bf86e89
course_discovery/apps/journal/tests/factories.py
0 → 100644
View file @
6bf86e89
import
uuid
import
factory
from
factory.fuzzy
import
FuzzyDecimal
,
FuzzyText
from
course_discovery.apps.core.tests.factories
import
CurrencyFactory
,
PartnerFactory
,
add_m2m_data
from
course_discovery.apps.course_metadata.tests.factories
import
OrganizationFactory
from
course_discovery.apps.journal.models
import
Journal
,
JournalBundle
class
JournalFactory
(
factory
.
DjangoModelFactory
):
uuid
=
uuid
.
uuid4
()
title
=
FuzzyText
()
price
=
FuzzyDecimal
(
0.0
,
650.0
)
short_description
=
FuzzyText
()
full_description
=
FuzzyText
()
status
=
"active"
currency
=
factory
.
SubFactory
(
CurrencyFactory
)
partner
=
factory
.
SubFactory
(
PartnerFactory
)
organization
=
factory
.
SubFactory
(
OrganizationFactory
)
class
Meta
:
model
=
Journal
class
JournalBundleFactory
(
factory
.
DjangoModelFactory
):
uuid
=
uuid
.
uuid4
()
title
=
FuzzyText
()
partner
=
factory
.
SubFactory
(
PartnerFactory
)
class
Meta
:
model
=
JournalBundle
@factory.post_generation
def
journals
(
self
,
create
,
extracted
,
**
kwargs
):
# pylint: disable=unused-argument
if
create
:
# pragma: no cover
add_m2m_data
(
self
.
journals
,
extracted
)
@factory.post_generation
def
courses
(
self
,
create
,
extracted
,
**
kwargs
):
# pylint: disable=unused-argument
if
create
:
# pragma: no cover
add_m2m_data
(
self
.
courses
,
extracted
)
@factory.post_generation
def
applicable_seat_types
(
self
,
create
,
extracted
,
**
kwargs
):
# pylint: disable=unused-argument
if
create
:
# pragma: no cover
add_m2m_data
(
self
.
applicable_seat_types
,
extracted
)
course_discovery/apps/journal/tests/test_models.py
0 → 100644
View file @
6bf86e89
""" Tests for core models. """
from
django.test
import
TestCase
from
pytest
import
mark
from
course_discovery.apps.journal.tests.factories
import
JournalBundleFactory
,
JournalFactory
@mark.django_db
class
JournalTests
(
TestCase
):
""" Journal model tests. """
def
setUp
(
self
):
super
(
JournalTests
,
self
)
.
setUp
()
self
.
journal
=
JournalFactory
()
def
test_str
(
self
):
self
.
assertTrue
(
self
.
journal
,
self
.
journal
.
title
)
@mark.django_db
class
JournalBundleTests
(
TestCase
):
""" JournalBundle model tests. """
def
setUp
(
self
):
super
(
JournalBundleTests
,
self
)
.
setUp
()
self
.
journal_bundle
=
JournalBundleFactory
()
def
test_str
(
self
):
self
.
assertTrue
(
self
.
journal_bundle
,
self
.
journal_bundle
.
title
)
course_discovery/apps/journal/views.py
View file @
6bf86e89
from
django.shortcuts
import
render
# Create your views here.
course_discovery/conf/locale/en/LC_MESSAGES/django.po
View file @
6bf86e89
...
...
@@ -248,6 +248,7 @@ msgid "Self-paced"
msgstr ""
#: apps/course_metadata/choices.py:20
#: apps/course_metadata/choices.py apps/journal/choices.py
msgid "Active"
msgstr ""
...
...
@@ -283,6 +284,7 @@ msgstr ""
#: apps/course_metadata/models.py:217 apps/course_metadata/models.py:262
#: apps/course_metadata/models.py:340 apps/course_metadata/models.py:456
#: apps/course_metadata/models.py:933
#: apps/course_metadata/models.py apps/journal/models.py
msgid "UUID"
msgstr ""
...
...
@@ -522,6 +524,18 @@ msgstr ""
msgid "The program was changed successfully."
msgstr ""
#: apps/journal/choices.py
msgid "Inactive"
msgstr ""
#: apps/journal/models.py
msgid "Used to determine whether journal is marketed or not."
msgstr ""
#: apps/journal/models.py
msgid "The user-facing display title for this Journal Bundle"
msgstr ""
#: apps/publisher/api/serializers.py:81
#, python-brace-format
msgid "Invalid course key \"{lms_course_id}\""
...
...
course_discovery/conf/locale/eo/LC_MESSAGES/django.po
View file @
6bf86e89
...
...
@@ -299,7 +299,7 @@ msgstr "Ìnstrüçtör-päçéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#
msgid "Self-paced"
msgstr "Sélf-päçéd Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: apps/course_metadata/choices.py
#: apps/course_metadata/choices.py
apps/journal/choices.py
msgid "Active"
msgstr "Àçtïvé Ⱡ'σяєм ιρѕυ#"
...
...
@@ -337,6 +337,7 @@ msgstr "Öthérs Ⱡ'σяєм ιρѕυ#"
#: apps/course_metadata/models.py apps/course_metadata/models.py
#: apps/course_metadata/models.py apps/course_metadata/models.py
#: apps/course_metadata/models.py
#: apps/course_metadata/models.py apps/journal/models.py
msgid "UUID"
msgstr "ÛÛÌD Ⱡ'σяєм ι#"
...
...
@@ -665,6 +666,22 @@ msgstr ""
"Thé prögräm wäs çhängéd süççéssfüllý. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυ#"
#: apps/journal/choices.py
msgid "Inactive"
msgstr "Ìnäçtïvé Ⱡ'σяєм ιρѕυм ∂#"
#: apps/journal/models.py
msgid "Used to determine whether journal is marketed or not."
msgstr ""
"Ûséd tö détérmïné whéthér jöürnäl ïs märkétéd ör nöt. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт"
" αмєт, ¢σηѕє¢тєтυя α#"
#: apps/journal/models.py
msgid "The user-facing display title for this Journal Bundle"
msgstr ""
"Thé üsér-fäçïng dïspläý tïtlé för thïs Jöürnäl Bündlé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт"
" αмєт, ¢σηѕє¢тєтυя α#"
#: apps/publisher/api/serializers.py
#, python-brace-format
msgid "Invalid course key \"{lms_course_id}\""
...
...
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