add an additional tag so we can route zendesk tickets better for white label sites
add tests fix use org
This commit is contained in:
@@ -10,6 +10,8 @@ from django.contrib.auth.models import User
|
||||
|
||||
FAKE_MICROSITE = {
|
||||
"SITE_NAME": "openedx.localhost",
|
||||
"university": "fakeuniversity",
|
||||
"course_org_filter": "fakeorg",
|
||||
"REGISTRATION_EXTRA_FIELDS": {
|
||||
"address1": "required",
|
||||
"city": "required",
|
||||
|
||||
@@ -11,6 +11,8 @@ from zendesk import ZendeskError
|
||||
import json
|
||||
import mock
|
||||
|
||||
from student.tests.test_microsite import fake_microsite_get_value
|
||||
|
||||
|
||||
@mock.patch.dict("django.conf.settings.FEATURES", {"ENABLE_FEEDBACK_SUBMISSION": True})
|
||||
@override_settings(ZENDESK_URL="dummy", ZENDESK_USER="dummy", ZENDESK_API_KEY="dummy")
|
||||
@@ -51,7 +53,7 @@ class SubmitFeedbackTest(TestCase):
|
||||
HTTP_REFERER="test_referer",
|
||||
HTTP_USER_AGENT="test_user_agent",
|
||||
REMOTE_ADDR="1.2.3.4",
|
||||
SERVER_NAME="test_server"
|
||||
SERVER_NAME="test_server",
|
||||
)
|
||||
req.user = user
|
||||
return views.submit_feedback(req)
|
||||
@@ -189,6 +191,49 @@ class SubmitFeedbackTest(TestCase):
|
||||
self.assertEqual(zendesk_mock_instance.mock_calls, expected_zendesk_calls)
|
||||
self._assert_datadog_called(datadog_mock, with_tags=True)
|
||||
|
||||
@mock.patch("microsite_configuration.microsite.get_value", fake_microsite_get_value)
|
||||
def test_valid_request_anon_user_microsite(self, zendesk_mock_class, datadog_mock):
|
||||
"""
|
||||
Test a valid request from an anonymous user to a mocked out microsite
|
||||
|
||||
The response should have a 200 (success) status code, and a ticket with
|
||||
the given information should have been submitted via the Zendesk API with the additional
|
||||
tag that will come from microsite configuration
|
||||
"""
|
||||
zendesk_mock_instance = zendesk_mock_class.return_value
|
||||
zendesk_mock_instance.create_ticket.return_value = 42
|
||||
self._test_success(self._anon_user, self._anon_fields)
|
||||
expected_zendesk_calls = [
|
||||
mock.call.create_ticket(
|
||||
{
|
||||
"ticket": {
|
||||
"requester": {"name": "Test User", "email": "test@edx.org"},
|
||||
"subject": "a subject",
|
||||
"comment": {"body": "some details"},
|
||||
"tags": ["test_course", "test_issue", "LMS", "whitelabel_fakeorg"]
|
||||
}
|
||||
}
|
||||
),
|
||||
mock.call.update_ticket(
|
||||
42,
|
||||
{
|
||||
"ticket": {
|
||||
"comment": {
|
||||
"public": False,
|
||||
"body":
|
||||
"Additional information:\n\n"
|
||||
"Client IP: 1.2.3.4\n"
|
||||
"Host: test_server\n"
|
||||
"Page: test_referer\n"
|
||||
"Browser: test_user_agent"
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
]
|
||||
self.assertEqual(zendesk_mock_instance.mock_calls, expected_zendesk_calls)
|
||||
self._assert_datadog_called(datadog_mock, with_tags=True)
|
||||
|
||||
def test_bad_request_auth_user_no_subject(self, zendesk_mock_class, datadog_mock):
|
||||
"""Test a request from an authenticated user not specifying `subject`."""
|
||||
self._test_bad_request_omit_field(self._auth_user, self._auth_fields, "subject", zendesk_mock_class, datadog_mock)
|
||||
|
||||
@@ -11,6 +11,7 @@ from django.http import (Http404, HttpResponse, HttpResponseNotAllowed,
|
||||
from dogapi import dog_stats_api
|
||||
from edxmako.shortcuts import render_to_response
|
||||
import zendesk
|
||||
from microsite_configuration import microsite
|
||||
|
||||
import calc
|
||||
import track.views
|
||||
@@ -100,6 +101,13 @@ def _record_feedback_in_zendesk(realname, email, subject, details, tags, additio
|
||||
|
||||
# Tag all issues with LMS to distinguish channel in Zendesk; requested by student support team
|
||||
zendesk_tags = list(tags.values()) + ["LMS"]
|
||||
|
||||
# Per edX support, we would like to be able to route white label feedback items
|
||||
# via tagging
|
||||
white_label_org = microsite.get_value('course_org_filter')
|
||||
if white_label_org:
|
||||
zendesk_tags = zendesk_tags + ["whitelabel_{org}".format(org=white_label_org)]
|
||||
|
||||
new_ticket = {
|
||||
"ticket": {
|
||||
"requester": {"name": realname, "email": email},
|
||||
|
||||
@@ -3,6 +3,7 @@ Tests related to the Microsites feature
|
||||
"""
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.test.utils import override_settings
|
||||
from django.conf import settings
|
||||
|
||||
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
@@ -10,8 +11,6 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from helpers import LoginEnrollmentTestCase
|
||||
from courseware.tests.modulestore_config import TEST_DATA_MIXED_MODULESTORE
|
||||
|
||||
MICROSITE_TEST_HOSTNAME = 'testmicrosite.testserver'
|
||||
|
||||
|
||||
@override_settings(MODULESTORE=TEST_DATA_MIXED_MODULESTORE)
|
||||
class TestMicrosites(ModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
@@ -51,14 +50,14 @@ class TestMicrosites(ModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
self.create_account(username, email, password)
|
||||
self.activate_user(email)
|
||||
|
||||
@override_settings(SITE_NAME=MICROSITE_TEST_HOSTNAME)
|
||||
@override_settings(SITE_NAME=settings.MICROSITE_TEST_HOSTNAME)
|
||||
def test_microsite_anonymous_homepage_content(self):
|
||||
"""
|
||||
Verify that the homepage, when accessed via a Microsite domain, returns
|
||||
HTML that reflects the Microsite branding elements
|
||||
"""
|
||||
|
||||
resp = self.client.get('/', HTTP_HOST=MICROSITE_TEST_HOSTNAME)
|
||||
resp = self.client.get('/', HTTP_HOST=settings.MICROSITE_TEST_HOSTNAME)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# assert various branding definitions on this Microsite
|
||||
@@ -116,7 +115,7 @@ class TestMicrosites(ModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
|
||||
email, password = self.STUDENT_INFO[0]
|
||||
self.login(email, password)
|
||||
resp = self.client.get(reverse('root'), HTTP_HOST=MICROSITE_TEST_HOSTNAME)
|
||||
resp = self.client.get(reverse('root'), HTTP_HOST=settings.MICROSITE_TEST_HOSTNAME)
|
||||
self.assertEquals(resp.status_code, 200)
|
||||
|
||||
def test_redirect_on_homepage_when_has_enrollments(self):
|
||||
@@ -130,7 +129,7 @@ class TestMicrosites(ModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
self.login(email, password)
|
||||
self.enroll(self.course, True)
|
||||
|
||||
resp = self.client.get(reverse('root'), HTTP_HOST=MICROSITE_TEST_HOSTNAME)
|
||||
resp = self.client.get(reverse('root'), HTTP_HOST=settings.MICROSITE_TEST_HOSTNAME)
|
||||
self.assertEquals(resp.status_code, 302)
|
||||
|
||||
def test_microsite_course_enrollment(self):
|
||||
@@ -146,7 +145,7 @@ class TestMicrosites(ModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
self.enroll(self.course_outside_microsite, True)
|
||||
|
||||
# Access the microsite dashboard and make sure the right courses appear
|
||||
resp = self.client.get(reverse('dashboard'), HTTP_HOST=MICROSITE_TEST_HOSTNAME)
|
||||
resp = self.client.get(reverse('dashboard'), HTTP_HOST=settings.MICROSITE_TEST_HOSTNAME)
|
||||
self.assertContains(resp, 'Robot_Super_Course')
|
||||
self.assertNotContains(resp, 'Robot_Course_Outside_Microsite')
|
||||
|
||||
|
||||
@@ -342,6 +342,8 @@ MICROSITE_CONFIGURATION = {
|
||||
}
|
||||
}
|
||||
MICROSITE_ROOT_DIR = COMMON_ROOT / 'test' / 'test_microsites'
|
||||
MICROSITE_TEST_HOSTNAME = 'testmicrosite.testserver'
|
||||
|
||||
FEATURES['USE_MICROSITES'] = True
|
||||
|
||||
# add extra template directory for test-only templates
|
||||
|
||||
Reference in New Issue
Block a user