Commit 14c5ef93 by Awais Committed by Awais Qureshi

Add new field in the partner config.

Add migration.
Update django-admin.

ECOM-6932
parent 0848250a
......@@ -40,7 +40,7 @@ class CurrencyAdmin(admin.ModelAdmin):
class PartnerAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('name', 'short_code',)
'fields': ('name', 'short_code', 'studio_url',)
}),
(_('OpenID Connect'), {
'description': _(
......
# -*- coding: utf-8 -*-
# Generated by Django 1.9.11 on 2017-01-26 13:31
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0001_squashed_0011_auto_20161101_2207'),
]
operations = [
migrations.AddField(
model_name='partner',
name='studio_url',
field=models.URLField(blank=True, max_length=255, null=True, verbose_name='Studio URL'),
),
]
......@@ -77,6 +77,7 @@ class Partner(TimeStampedModel):
oidc_url_root = models.CharField(max_length=255, null=True, verbose_name=_('OpenID Connect URL'))
oidc_key = models.CharField(max_length=255, null=True, verbose_name=_('OpenID Connect Key'))
oidc_secret = models.CharField(max_length=255, null=True, verbose_name=_('OpenID Connect Secret'))
studio_url = models.URLField(max_length=255, null=True, blank=True, verbose_name=_('Studio URL'))
def __str__(self):
return self.name
......
......@@ -36,6 +36,7 @@ class PartnerFactory(factory.DjangoModelFactory):
oidc_url_root = '{root}'.format(root=FuzzyUrlRoot().fuzz())
oidc_key = FuzzyText().fuzz()
oidc_secret = FuzzyText().fuzz()
studio_url = FuzzyUrlRoot().fuzz()
class Meta(object):
model = Partner
import logging
from urllib.parse import urljoin
from django.contrib.auth.models import Group
from django.core.urlresolvers import reverse
......@@ -193,6 +194,11 @@ class Course(TimeStampedModel, ChangedByMixin):
except CourseUserRole.DoesNotExist:
return None
@property
def partner(self):
organization = self.organizations.all().first()
return organization.partner if organization else None
class CourseRun(TimeStampedModel, ChangedByMixin):
""" Publisher CourseRun model. It contains fields related to the course run intake form."""
......@@ -307,6 +313,14 @@ class CourseRun(TimeStampedModel, ChangedByMixin):
def created_by(self):
return self.history.order_by('history_date').first().history_user # pylint: disable=no-member
@property
def studio_url(self):
if self.lms_course_id and self.course.partner.studio_url:
path = 'course/{lms_course_id}'.format(lms_course_id=self.lms_course_id)
return urljoin(self.course.partner.studio_url, path)
return None
class Seat(TimeStampedModel, ChangedByMixin):
""" Seat model. """
......
......@@ -7,6 +7,7 @@ from django_fsm import TransitionNotAllowed
from guardian.shortcuts import assign_perm
from course_discovery.apps.core.tests.factories import UserFactory
from course_discovery.apps.course_metadata.tests.factories import OrganizationFactory
from course_discovery.apps.publisher.choices import PublisherUserRole
from course_discovery.apps.publisher.mixins import check_course_organization_permission
from course_discovery.apps.publisher.models import (
......@@ -70,6 +71,22 @@ class CourseRunTests(TestCase):
self.assertEqual(self.course_run.created_by, user)
def test_studio_url(self):
""" Verify that property returns studio url. """
self.assertFalse(self.course_run.studio_url)
# save the lms course id and save the organization.
self.course_run.lms_course_id = 'test'
self.course_run.save()
organization = OrganizationFactory()
self.course_run.course.organizations.add(organization)
self.assertEqual(self.course_run.course.partner, organization.partner)
self.assertEqual(
'{url}/course/{id}'.format(url=self.course_run.course.partner.studio_url, id='test'),
self.course_run.studio_url
)
class CourseTests(TestCase):
""" Tests for the publisher `Course` model. """
......@@ -226,6 +243,10 @@ class CourseTests(TestCase):
self.assertEqual(self.user1, self.course2.course_team_admin)
def test_partner(self):
""" Verify that the partner property returns organization partner if exist. """
self.assertEqual(self.course.partner, self.org_extension_1.organization.partner)
class SeatTests(TestCase):
""" Tests for the publisher `Seat` model. """
......
......@@ -1508,6 +1508,16 @@ class CourseDetailViewTests(TestCase):
self.assertContains(response, self.course.full_description)
self.assertContains(response, self.course.expected_learnings)
def test_details_page_with_course_runs_lms_id(self):
""" Test that user can see course runs with lms-id on course detail page. """
self.user.groups.add(self.organization_extension.group)
assign_perm(OrganizationExtension.VIEW_COURSE, self.organization_extension.group, self.organization_extension)
lms_course_id = 'test/id'
factories.CourseRunFactory(course=self.course, lms_course_id=lms_course_id)
response = self.client.get(self.detail_page_url)
self.assertContains(response, 'course/{}'.format(lms_course_id))
class CourseEditViewTests(TestCase):
""" Tests for the course edit view. """
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-31 13:03-0500\n"
"POT-Creation-Date: 2017-02-01 11:44+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: apps/api/filters.py
#, python-brace-format
......@@ -188,6 +188,10 @@ msgstr ""
msgid "OpenID Connect Secret"
msgstr ""
#: apps/core/models.py
msgid "Studio URL"
msgstr ""
#: apps/core/models.py templates/publisher/course_runs_list.html
msgid "Partner"
msgstr ""
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-31 13:03-0500\n"
"POT-Creation-Date: 2017-02-01 11:44+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: static/js/catalogs-change-form.js
msgid "Preview"
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-31 13:03-0500\n"
"POT-Creation-Date: 2017-02-01 11:44+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps/api/filters.py
......@@ -229,6 +229,10 @@ msgstr "ÖpénÌD Çönnéçt Kéý Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт
msgid "OpenID Connect Secret"
msgstr "ÖpénÌD Çönnéçt Séçrét Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
#: apps/core/models.py
msgid "Studio URL"
msgstr "Stüdïö ÛRL Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: apps/core/models.py templates/publisher/course_runs_list.html
msgid "Partner"
msgstr "Pärtnér Ⱡ'σяєм ιρѕυм #"
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-31 13:03-0500\n"
"POT-Creation-Date: 2017-02-01 11:44+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/js/catalogs-change-form.js
......
......@@ -198,8 +198,8 @@
{% else %}
<div class="studio-url">
<span class="studio-url-heading">{% trans "STUDIO URL" %} - </span>
{% if run_form.lms_course_id.value %}
<a class="studio-link" href="#" target="_blank">{{ course_run.lms_course_id }}</a>
{% if course_run.studio_url %}
<a class="studio-link" href="{{ course_run.studio_url }}" target="_blank">{{ course_run.lms_course_id }}</a>
{% else %}
{% trans "Not yet created" %}
{% endif %}
......
......@@ -29,8 +29,8 @@
</div>
<div class="studio-url">
<span class="studio-url-heading">{% trans "STUDIO URL" %} - </span>
{% if course_run.lms_course_id %}
<a class="studio-link" href="#" target="_blank">{{ course_run.lms_course_id }}</a>
{% if course_run.studio_url %}
<a class="studio-link" href="{{ course_run.studio_url }}" target="_blank">{{ course_run.lms_course_id }}</a>
{% else %}
{% trans "Not yet created" %}
{% endif %}
......
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