diff --git a/lms/djangoapps/static_template_view/tests.py b/lms/djangoapps/static_template_view/tests.py
index 501deb776c..9cd5502d5d 100644
--- a/lms/djangoapps/static_template_view/tests.py
+++ b/lms/djangoapps/static_template_view/tests.py
@@ -1,16 +1,61 @@
-"""
-This file demonstrates writing tests using the unittest module. These will pass
-when you run "manage.py test".
-
-Replace this with more appropriate tests for your application.
-"""
-
from django.test import TestCase
+from django.test.client import Client
class SimpleTest(TestCase):
- def test_basic_addition(self):
+
+ def setUp(self):
+ self.client = Client()
+
+ def test_render(self):
"""
- Tests that 1 + 1 always equals 2.
+ Render a normal page, like jobs
"""
- self.assertEqual(1 + 1, 2)
+ response = self.client.get("/jobs")
+ self.assertEquals(response.status_code, 200)
+
+
+ def test_render_press_release(self):
+ """
+ Render press releases from generic URL match
+ """
+ # since I had to remap files, pedantically test all press releases
+ # published to date. Decent positive test while we're at it.
+ all_releases = ["/press/mit-and-harvard-announce-edx",
+ "/press/uc-berkeley-joins-edx",
+ "/press/edX-announces-proctored-exam-testing",
+ "/press/elsevier-collaborates-with-edx",
+ "/press/ut-joins-edx",
+ "/press/cengage-to-provide-book-content",
+ "/press/gates-foundation-announcement",
+ "/press/wellesley-college-joins-edx",
+ "/press/georgetown-joins-edx",
+ "/press/spring-courses",
+ "/press/lewin-course-announcement",
+ "/press/bostonx-announcement",
+ "/press/eric-lander-secret-of-life",
+ "/press/edx-expands-internationally",
+ "/press/xblock_announcement",
+ "/press/stanford-to-work-with-edx",
+ ]
+
+ for rel in all_releases:
+ response = self.client.get(rel)
+ self.assertNotContains(response, "PAGE NOT FOUND", status_code=200)
+
+ # should work with caps
+ response = self.client.get("/press/STANFORD-to-work-with-edx")
+ self.assertContains(response, "Stanford", status_code=200)
+
+ # negative test
+ response = self.client.get("/press/this-shouldnt-work")
+ self.assertEqual(response.status_code, 404)
+
+ # can someone do something fishy? no.
+ response = self.client.get("/press/../homework.html")
+ self.assertEqual(response.status_code, 404)
+
+ # "." in is ascii 2E
+ response = self.client.get("/press/%2E%2E/homework.html")
+ self.assertEqual(response.status_code, 404)
+
diff --git a/lms/djangoapps/static_template_view/views.py b/lms/djangoapps/static_template_view/views.py
index 022f12b148..56a7f32780 100644
--- a/lms/djangoapps/static_template_view/views.py
+++ b/lms/djangoapps/static_template_view/views.py
@@ -4,9 +4,10 @@
# security reasons.
from mitxmako.shortcuts import render_to_response, render_to_string
+from mako.exceptions import TopLevelLookupException
from django.shortcuts import redirect
from django.conf import settings
-from django.http import HttpResponseNotFound, HttpResponseServerError
+from django.http import HttpResponseNotFound, HttpResponseServerError, Http404
from django_future.csrf import ensure_csrf_cookie
from util.cache import cache_if_anonymous
@@ -40,6 +41,25 @@ def render(request, template):
return render_to_response('static_templates/' + template, {})
+@ensure_csrf_cookie
+@cache_if_anonymous
+def render_press_release(request, slug):
+ """
+ Render a press release given a slug. Similar to the "render" function above,
+ but takes a slug and does a basic conversion to convert it to a template file.
+ a) all lower case,
+ b) convert dashes to underscores, and
+ c) appending ".html"
+ """
+ template = slug.lower().replace('-', '_') + ".html"
+ try:
+ resp = render_to_response('static_templates/press_releases/' + template, {})
+ except TopLevelLookupException:
+ raise Http404
+ else:
+ return resp
+
+
def render_404(request):
return HttpResponseNotFound(render_to_string('static_templates/404.html', {}))
diff --git a/lms/templates/feed.rss b/lms/templates/feed.rss
index 73be4b6172..07335bd22a 100644
--- a/lms/templates/feed.rss
+++ b/lms/templates/feed.rss
@@ -11,7 +11,7 @@
tag:www.edx.org,2012:Post/17
2012-12-19T14:00:00-07:00
2012-12-19T14:00:00-07:00
-
+
Stanford University to Collaborate with edX on Development of Non-Profit Open Source edX Platform
<img src="${static.url('images/press/releases/stanford-university-m.png')}" />
<p></p>
@@ -20,7 +20,7 @@
tag:www.edx.org,2013:Post/16
2013-03-15T10:00:00-07:00
2013-03-15T10:00:00-07:00
-
+
edX releases XBlock SDK, first step toward open source vision
<img src="${static.url('images/press/releases/edx-logo_240x180.png')}" />
<p></p>
@@ -38,7 +38,7 @@
-
+
@@ -47,7 +47,7 @@
tag:www.edx.org,2013:Post/14
2013-01-30T10:00:00-07:00
2013-01-30T10:00:00-07:00
-
+
New biology course from human genome pioneer Eric Lander
<img src="${static.url('images/press/releases/eric-lander_240x180.jpg')}" />
<p></p>
@@ -56,7 +56,7 @@
tag:www.edx.org,2013:Post/12
2013-01-22T10:00:00-07:00
2013-01-22T10:00:00-07:00
-
+
New course from legendary MIT physics professor Walter Lewin
<img src="${static.url('images/press/releases/dr-lewin-316_240x180.jpg')}" />
<p></p>
@@ -65,7 +65,7 @@
tag:www.edx.org,2013:Post/11
2013-01-29T10:00:00-07:00
2013-01-29T10:00:00-07:00
-
+
City of Boston and edX partner to establish BostonX to improve educational access for residents
<img src="${static.url('images/press/releases/edx-logo_240x180.png')}" />
<p></p>
@@ -74,7 +74,7 @@
-
+
@@ -83,7 +83,7 @@
tag:www.edx.org,2012:Post/9
2012-12-10T14:00:00-07:00
2012-12-10T14:00:00-07:00
-
+
Georgetown University joins edX
<img src="${static.url('images/press/releases/georgetown-seal_240x180.png')}" />
<p>Sixth institution to join global movement in year one</p>
@@ -92,7 +92,7 @@
tag:www.edx.org,2012:Post/8
2012-12-04T14:00:00-07:00
2012-12-04T14:00:00-07:00
-
+
Wellesley College joins edX
<img src="${static.url('images/press/releases/wellesley-seal_240x180.png')}" />
<p>First liberal arts college to join edX</p>
@@ -101,7 +101,7 @@
tag:www.edx.org,2012:Post/7
2012-11-12T14:00:00-07:00
2012-11-12T14:00:00-07:00
-
+
edX and Massachusetts Community Colleges join in Gates-Funded educational initiative
<img src="${static.url('images/press/releases/mass-seal_240x180.png')}" />
<p></p>
@@ -110,7 +110,7 @@
tag:www.edx.org,2012:Post/6
2012-10-15T14:00:00-07:00
2012-10-14T14:00:00-07:00
-
+
The University of Texas System joins edX
<img src="${static.url('images/press/releases/utsys-seal_240x180.png')}" />
<p>Nine universities and six health institutions</p>
@@ -119,7 +119,7 @@
-
+
@@ -128,7 +128,7 @@
tag:www.edx.org,2012:Post/4
2012-09-06T14:00:00-07:00
2012-09-06T14:00:00-07:00
-
+
edX to offer learners option of taking proctored final exam
<img src="${static.url('images/press/releases/diploma_240x180.jpg')}" />
@@ -136,7 +136,7 @@
tag:www.edx.org,2012:Post/3
2012-07-16T14:08:12-07:00
2012-07-16T14:08:12-07:00
-
+
UC Berkeley joins edX
<img src="${static.url('images/press/releases/edx-logo_240x180.png')}" />
<p>edX broadens course offerings</p>
diff --git a/lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html b/lms/templates/static_templates/press_releases/cengage_to_provide_book_content.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html
rename to lms/templates/static_templates/press_releases/cengage_to_provide_book_content.html
diff --git a/lms/templates/static_templates/press_releases/edX_announces_proctored_exam_testing.html b/lms/templates/static_templates/press_releases/edx_announces_proctored_exam_testing.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/edX_announces_proctored_exam_testing.html
rename to lms/templates/static_templates/press_releases/edx_announces_proctored_exam_testing.html
diff --git a/lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html b/lms/templates/static_templates/press_releases/elsevier_collaborates_with_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html
rename to lms/templates/static_templates/press_releases/elsevier_collaborates_with_edx.html
diff --git a/lms/templates/static_templates/press_releases/Gates_Foundation_announcement.html b/lms/templates/static_templates/press_releases/gates_foundation_announcement.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Gates_Foundation_announcement.html
rename to lms/templates/static_templates/press_releases/gates_foundation_announcement.html
diff --git a/lms/templates/static_templates/press_releases/Georgetown_joins_edX.html b/lms/templates/static_templates/press_releases/georgetown_joins_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Georgetown_joins_edX.html
rename to lms/templates/static_templates/press_releases/georgetown_joins_edx.html
diff --git a/lms/templates/static_templates/press_releases/Lewin_course_announcement.html b/lms/templates/static_templates/press_releases/lewin_course_announcement.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Lewin_course_announcement.html
rename to lms/templates/static_templates/press_releases/lewin_course_announcement.html
diff --git a/lms/templates/static_templates/press_releases/MIT_and_Harvard_announce_edX.html b/lms/templates/static_templates/press_releases/mit_and_harvard_announce_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/MIT_and_Harvard_announce_edX.html
rename to lms/templates/static_templates/press_releases/mit_and_harvard_announce_edx.html
diff --git a/lms/templates/static_templates/press_releases/Spring_2013_course_announcements.html b/lms/templates/static_templates/press_releases/spring_courses.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Spring_2013_course_announcements.html
rename to lms/templates/static_templates/press_releases/spring_courses.html
diff --git a/lms/templates/static_templates/press_releases/stanford_announcement.html b/lms/templates/static_templates/press_releases/stanford_to_work_with_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/stanford_announcement.html
rename to lms/templates/static_templates/press_releases/stanford_to_work_with_edx.html
diff --git a/lms/templates/static_templates/press_releases/UC_Berkeley_joins_edX.html b/lms/templates/static_templates/press_releases/uc_berkeley_joins_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/UC_Berkeley_joins_edX.html
rename to lms/templates/static_templates/press_releases/uc_berkeley_joins_edx.html
diff --git a/lms/templates/static_templates/press_releases/UT_joins_edX.html b/lms/templates/static_templates/press_releases/ut_joins_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/UT_joins_edX.html
rename to lms/templates/static_templates/press_releases/ut_joins_edx.html
diff --git a/lms/templates/static_templates/press_releases/Wellesley_College_joins_edX.html b/lms/templates/static_templates/press_releases/wellesley_college_joins_edx.html
similarity index 100%
rename from lms/templates/static_templates/press_releases/Wellesley_College_joins_edX.html
rename to lms/templates/static_templates/press_releases/wellesley_college_joins_edx.html
diff --git a/lms/urls.py b/lms/urls.py
index 5a4d4fa852..0ebdad54d1 100644
--- a/lms/urls.py
+++ b/lms/urls.py
@@ -117,51 +117,9 @@ urlpatterns = ('',
{'template': 'honor.html'}, name="honor"),
#Press releases
- url(r'^press/mit-and-harvard-announce-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/MIT_and_Harvard_announce_edX.html'}, name="press/mit-and-harvard-announce-edx"),
- url(r'^press/uc-berkeley-joins-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/UC_Berkeley_joins_edX.html'}, name="press/uc-berkeley-joins-edx"),
- url(r'^press/edX-announces-proctored-exam-testing$', 'static_template_view.views.render',
- {'template': 'press_releases/edX_announces_proctored_exam_testing.html'}, name="press/edX-announces-proctored-exam-testing"),
- url(r'^press/elsevier-collaborates-with-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/Elsevier_collaborates_with_edX.html'}, name="press/elsevier-collaborates-with-edx"),
- url(r'^press/ut-joins-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/UT_joins_edX.html'}, name="press/ut-joins-edx"),
- url(r'^press/cengage-to-provide-book-content$', 'static_template_view.views.render',
- {'template': 'press_releases/Cengage_to_provide_book_content.html'}, name="press/cengage-to-provide-book-content"),
- url(r'^press/gates-foundation-announcement$', 'static_template_view.views.render',
- {'template': 'press_releases/Gates_Foundation_announcement.html'}, name="press/gates-foundation-announcement"),
- url(r'^press/wellesley-college-joins-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/Wellesley_College_joins_edX.html'}, name="press/wellesley-college-joins-edx"),
- url(r'^press/georgetown-joins-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/Georgetown_joins_edX.html'}, name="press/georgetown-joins-edx"),
- url(r'^press/spring-courses$', 'static_template_view.views.render',
- {'template': 'press_releases/Spring_2013_course_announcements.html'},
- name="press/spring-courses"),
- url(r'^press/lewin-course-announcement$', 'static_template_view.views.render',
- {'template': 'press_releases/Lewin_course_announcement.html'},
- name="press/lewin-course-announcement"),
- url(r'^press/bostonx-announcement$', 'static_template_view.views.render',
- {'template': 'press_releases/bostonx_announcement.html'},
- name="press/bostonx-announcement"),
- url(r'^press/eric-lander-secret-of-life$', 'static_template_view.views.render',
- {'template': 'press_releases/eric_lander_secret_of_life.html'},
- name="press/eric-lander-secret-of-life"),
- url(r'^press/edx-expands-internationally$', 'static_template_view.views.render',
- {'template': 'press_releases/edx_expands_internationally.html'},
- name="press/edx-expands-internationally"),
- url(r'^press/xblock_announcement$', 'static_template_view.views.render',
- {'template': 'press_releases/xblock_announcement.html'},
- name="press/xblock-announcement"),
- url(r'^press/stanford-to-work-with-edx$', 'static_template_view.views.render',
- {'template': 'press_releases/stanford_announcement.html'},
- name="press/stanford-to-work-with-edx"),
-
- # Should this always update to point to the latest press release?
- (r'^pressrelease$', 'django.views.generic.simple.redirect_to',
- {'url': '/press/xblock-announcement'}),
-
+ url(r'^press/([_a-zA-Z0-9-]+)$', 'static_template_view.views.render_press_release', name='press_release'),
+ # Favicon
(r'^favicon\.ico$', 'django.views.generic.simple.redirect_to', {'url': '/static/images/favicon.ico'}),
# TODO: These urls no longer work. They need to be updated before they are re-enabled