diff --git a/docs/badges.rst b/docs/badges.rst
index 94939e8e6a7..fcdb8dc76c7 100644
--- a/docs/badges.rst
+++ b/docs/badges.rst
@@ -40,19 +40,11 @@ since it will stay up to date with your Read the Docs project::
https://readthedocs.org/projects/pip/badge/
-Style
------
-
-If you pass the ``style`` GET argument,
-we will pass it along to shields.io as is.
-This will allow you to have custom style badges.
-
.. _Read the Docs README: https://github.com/rtfd/readthedocs.org/blob/master/README.rst
.. _project page: https://readthedocs.org/projects/pip/
-.. |green| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat
-.. |red| image:: https://img.shields.io/badge/docs-release--1.6-red.svg?style=flat
-.. |yellow| image:: https://img.shields.io/badge/docs-no%20builds-yellow.svg?style=flat
-.. |nbsp| unicode:: 0xA0
+.. |green| image:: https://media.readthedocs.org/static/projects/badges/passing.svg
+.. |red| image:: https://media.readthedocs.org/static/projects/badges/failing.svg
+.. |yellow| image:: https://media.readthedocs.org/static/projects/badges/unknown.svg
+.. |nbsp| unicode:: 0xA0
:trim:
-
diff --git a/readthedocs/projects/static/projects/badges/failing.svg b/readthedocs/projects/static/projects/badges/failing.svg
new file mode 100644
index 00000000000..c9ff866c6f0
--- /dev/null
+++ b/readthedocs/projects/static/projects/badges/failing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/readthedocs/projects/static/projects/badges/passing.svg b/readthedocs/projects/static/projects/badges/passing.svg
new file mode 100644
index 00000000000..39ff2cbda3a
--- /dev/null
+++ b/readthedocs/projects/static/projects/badges/passing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/readthedocs/projects/static/projects/badges/unknown.svg b/readthedocs/projects/static/projects/badges/unknown.svg
new file mode 100644
index 00000000000..1514f0526ba
--- /dev/null
+++ b/readthedocs/projects/static/projects/badges/unknown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/readthedocs/projects/views/public.py b/readthedocs/projects/views/public.py
index 9c652b9f61a..86222dbd84f 100644
--- a/readthedocs/projects/views/public.py
+++ b/readthedocs/projects/views/public.py
@@ -13,6 +13,7 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.models import User
+from django.contrib.staticfiles.templatetags.staticfiles import static
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
@@ -105,36 +106,23 @@ def get_context_data(self, **kwargs):
@never_cache
def project_badge(request, project_slug):
"""Return a sweet badge for the project"""
+ badge_path = "projects/badges/%s.svg"
version_slug = request.GET.get('version', LATEST)
- style = request.GET.get('style', 'flat')
- # Default to 24 hour cache lifetime
- max_age = request.GET.get('maxAge', 86400)
try:
version = Version.objects.public(request.user).get(
project__slug=project_slug, slug=version_slug)
except Version.DoesNotExist:
- url = (
- 'https://img.shields.io/badge/docs-unknown%20version-yellow.svg'
- '?style={style}&maxAge={max_age}'
- .format(style=style, max_age=max_age))
+ url = static(badge_path % "unknown")
return HttpResponseRedirect(url)
version_builds = version.builds.filter(type='html', state='finished').order_by('-date')
if not version_builds.exists():
- url = (
- 'https://img.shields.io/badge/docs-no%20builds-yellow.svg'
- '?style={style}&maxAge={max_age}'
- .format(style=style, max_age=max_age))
+ url = static(badge_path % "unknown")
return HttpResponseRedirect(url)
last_build = version_builds[0]
if last_build.success:
- color = 'brightgreen'
+ url = static(badge_path % "passing")
else:
- color = 'red'
- url = (
- 'https://img.shields.io/badge/docs-{version}-{color}.svg'
- '?style={style}&maxAge={max_age}'
- .format(version=version.slug.replace('-', '--'), color=color,
- style=style, max_age=max_age))
+ url = static(badge_path % "failing")
return HttpResponseRedirect(url)
diff --git a/readthedocs/rtd_tests/tests/test_project_views.py b/readthedocs/rtd_tests/tests/test_project_views.py
index 7db6f696759..b52dbe40f75 100644
--- a/readthedocs/rtd_tests/tests/test_project_views.py
+++ b/readthedocs/rtd_tests/tests/test_project_views.py
@@ -4,7 +4,9 @@
from mock import patch
from django.test import TestCase
from django.contrib.auth.models import User
+from django.contrib.staticfiles.templatetags.staticfiles import static
from django.contrib.messages import constants as message_const
+from django.core.urlresolvers import reverse
from django.http.response import HttpResponseRedirect
from django.views.generic.base import ContextMixin
from django_dynamic_fixture import get
@@ -12,12 +14,11 @@
import six
-from readthedocs.core.models import UserProfile
+from readthedocs.builds.models import Build, Version
from readthedocs.rtd_tests.base import (WizardTestCase, MockBuildTestCase,
RequestFactoryTestMixin)
from readthedocs.oauth.models import RemoteRepository
from readthedocs.projects.exceptions import ProjectSpamError
-from readthedocs.projects.forms import ProjectBasicsForm
from readthedocs.projects.models import Project, Domain
from readthedocs.projects.views.private import ImportWizardView
from readthedocs.projects.views.mixins import ProjectRelationMixin
@@ -418,3 +419,30 @@ def get_project_queryset(self):
self.assertEqual(view.get_project(), self.project)
self.assertEqual(view.get_queryset().first(), self.domain)
self.assertEqual(view.get_context_data()['project'], self.project)
+
+
+class TestBadges(TestCase):
+ """Test a static badge asset is served for each build."""
+
+ def setUp(self):
+ self.BADGE_PATH = 'projects/badges/%s.svg'
+ self.project = get(Project, slug='badgey')
+ self.version = Version.objects.get(project=self.project)
+ self.badge_url = reverse('project_badge', args=[self.project.slug])
+
+ def test_unknown_badge(self):
+ res = self.client.get(self.badge_url, {'version': self.version.slug})
+ static_badge = static(self.BADGE_PATH % 'unknown')
+ self.assertEquals(res.url, static_badge)
+
+ def test_passing_badge(self):
+ get(Build, project=self.project, version=self.version, success=True)
+ res = self.client.get(self.badge_url, {'version': self.version.slug})
+ static_badge = static(self.BADGE_PATH % 'passing')
+ self.assertEquals(res.url, static_badge)
+
+ def test_failing_badge(self):
+ get(Build, project=self.project, version=self.version, success=False)
+ res = self.client.get(self.badge_url, {'version': self.version.slug})
+ static_badge = static(self.BADGE_PATH % 'failing')
+ self.assertEquals(res.url, static_badge)