Commit 7cf8aa25 by Bill DeRusha Committed by Bill DeRusha

Add language typeahead to new course form

ECOM-6636
parent c41456c5
from django.db.models import Q
from dal import autocomplete
from course_discovery.apps.ietf_language_tags.models import LanguageTag
class LanguageTagAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if self.request.user.is_authenticated():
qs = LanguageTag.objects.all()
if self.q:
qs = qs.filter(Q(code__icontains=self.q) | Q(name__icontains=self.q))
return qs
return []
import json
import ddt
from django.core.urlresolvers import reverse
from django.test import TestCase
from course_discovery.apps.core.tests.factories import UserFactory, USER_PASSWORD
from course_discovery.apps.ietf_language_tags.models import LanguageTag
# pylint: disable=no-member
@ddt.ddt
class AutocompleteTests(TestCase):
""" Tests for autocomplete lookups."""
def setUp(self):
super(AutocompleteTests, self).setUp()
self.user = UserFactory(is_staff=True)
self.client.login(username=self.user.username, password=USER_PASSWORD)
self.language_tag_test = LanguageTag.objects.create(code='xx-xx', name='Test LanguageTag')
@ddt.data('xx', 'languagetag')
def test_language_tag_autocomplete(self, query):
""" Verify course autocomplete returns the queried data. """
response = self.client.get(
reverse('language_tags:language-tag-autocomplete') + '?q={query}'.format(query=query)
)
data = json.loads(response.content.decode('utf-8'))
self.assertEqual(data['results'][0]['text'], str(self.language_tag_test))
def test_language_tag_autocomplete_no_query(self):
""" Verify course autocomplete returns all the data. """
response = self.client.get(reverse('language_tags:language-tag-autocomplete'))
data = json.loads(response.content.decode('utf-8'))
self.assertEqual(response.status_code, 200)
# Lookup returns top 10 results by default
self.assertEqual(len(data['results']), 10)
def test_language_tag_autocomplete_no_data(self):
""" Verify course autocomplete returns the data. """
response = self.client.get(
reverse('language_tags:language-tag-autocomplete') + '?q={query}'.format(query='no results query')
)
data = json.loads(response.content.decode('utf-8'))
self.assertEqual(response.status_code, 200)
self.assertEqual(len(data['results']), 0)
"""
URLs for autocomplete lookups.
"""
from django.conf.urls import url
from course_discovery.apps.ietf_language_tags.lookups import LanguageTagAutocomplete
urlpatterns = [
url(r'^language-tag-autocomplete/$', LanguageTagAutocomplete.as_view(), name='language-tag-autocomplete',),
]
"""
Course publisher forms.
"""
from dal import autocomplete
from django import forms
from django.utils.translation import ugettext_lazy as _
from course_discovery.apps.course_metadata.choices import CourseRunPacing
from course_discovery.apps.course_metadata.models import Person, Organization
from course_discovery.apps.ietf_language_tags.models import LanguageTag
from course_discovery.apps.publisher.models import Course, CourseRun, Seat, User, OrganizationExtension
......@@ -150,6 +152,18 @@ class CustomCourseRunForm(CourseRunForm):
required=True
)
transcript_languages = forms.ModelMultipleChoiceField(
queryset=LanguageTag.objects.all(),
widget=autocomplete.ModelSelect2Multiple(
url='language_tags:language-tag-autocomplete',
attrs={
'data-minimum-input-length': 2
}
),
required=False,
)
class Meta(CourseRunForm.Meta):
fields = (
'length', 'transcript_languages', 'language', 'min_effort', 'max_effort',
......
......@@ -458,4 +458,5 @@
{% block extra_js %}
<script src="{% static 'js/publisher/publisher.js' %}"></script>
<script src="{% static 'js/publisher/seat-type-change.js' %}"></script>
{{ run_form.media }}
{% endblock %}
......@@ -49,6 +49,7 @@
{% compress js %}
<script src="{% static 'bower_components/jquery/dist/jquery.js' %}"></script>
<script src="{% static 'admin/js/jquery.init.js' %}"></script>
<script src="{% static 'bower_components/js-cookie/src/js.cookie.js' %}"></script>
<script src="{% static 'bower_components/underscore/underscore.js' %}"></script>
<script src="{% static 'bower_components/moment/moment.js' %}"></script>
......
......@@ -42,6 +42,7 @@ urlpatterns = auth_urlpatterns + [
'course_discovery.apps.publisher_comments.urls', namespace='publisher_comments'
)
),
url(r'^language-tags/', include('course_discovery.apps.ietf_language_tags.urls', namespace='language_tags')),
url(r'^comments/', include('django_comments.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', name='javascript-catalog'),
......
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