Skip to content

Commit

Permalink
Merge pull request #690 from magopian/1056870-pre_setup-post_teardown…
Browse files Browse the repository at this point in the history
…-all-the-things

Do a proper _pre_setup and _post_teardown for all the tests (bug 1056870)
  • Loading branch information
magopian committed Aug 27, 2015
2 parents c9659a3 + 98602f6 commit ac80230
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 72 deletions.
72 changes: 5 additions & 67 deletions apps/amo/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@
from functools import partial, wraps
from urlparse import parse_qs, urlparse, urlsplit, urlunsplit

from django import forms, http, test
from django import forms, test
from django.conf import settings
from django.core.cache import cache
from django.core.management import call_command
from django.db.models.signals import post_save
from django.forms.fields import Field
from django.http import SimpleCookie
from django.test.client import Client, RequestFactory
from django.utils import translation

import caching
import mock
import pytest
import tower
Expand All @@ -45,7 +43,6 @@
from bandwagon.models import Collection
from files.models import File
from lib.es.signals import process, reset
from translations.hold import clean_translations
from translations.models import Translation
from versions.models import ApplicationsVersions, Version
from users.models import RequestUser, UserProfile
Expand Down Expand Up @@ -257,77 +254,18 @@ def tearDownClass(cls):
Mocked_ES.stop()


JINJA_INSTRUMENTED = False


def default_prefixer():
"""Make sure each test starts with a default URL prefixer."""
request = http.HttpRequest()
request.META['SCRIPT_NAME'] = ''
prefixer = amo.urlresolvers.Prefixer(request)
prefixer.app = settings.DEFAULT_APP
prefixer.locale = settings.LANGUAGE_CODE
amo.urlresolvers.set_url_prefix(prefixer)


class BaseTestCase(test.TestCase):
"""Base test case that each and every test cases should inherit from."""
"""Base test case that most test cases should inherit from."""

def _pre_setup(self):
super(BaseTestCase, self)._pre_setup()

cache.clear()
# Override django-cache-machine caching.base.TIMEOUT because it's
# computed too early, before settings_test.py is imported.
caching.base.TIMEOUT = settings.CACHE_COUNT_TIMEOUT

translation.trans_real.deactivate()
# Django fails to clear this cache.
translation.trans_real._translations = {}
translation.trans_real.activate(settings.LANGUAGE_CODE)

# Make sure the "templates" list in a response is properly updated,
# even though we're using Jinja2 and not the default django template
# engine.
global JINJA_INSTRUMENTED
if not JINJA_INSTRUMENTED:
import jinja2
old_render = jinja2.Template.render

def instrumented_render(self, *args, **kwargs):
context = dict(*args, **kwargs)
test.signals.template_rendered.send(
sender=self, template=self, context=context)
return old_render(self, *args, **kwargs)

jinja2.Template.render = instrumented_render
JINJA_INSTRUMENTED = True

# Reset the prefixer.
default_prefixer()

self.client = self.client_class()

def _post_teardown(self):
amo.set_user(None)
clean_translations(None) # Make sure queued translations are removed.

# Make sure we revert everything we might have changed to prefixers.
amo.urlresolvers.clean_url_prefixes()

super(BaseTestCase, self)._post_teardown()

def shortDescription(self):
# Stop nose using the test docstring and instead the test method name.
pass

def trans_eq(self, trans, localized_string, locale):
eq_(Translation.objects.get(id=trans.id,
locale=locale).localized_string,
localized_string)
translation = Translation.objects.get(id=trans.id, locale=locale)
assert translation.localized_string == localized_string

def assertUrlEqual(self, url, other, compare_host=False,
compare_scheme=False):
def assertUrlEqual(self, url, other, compare_host=False):
"""Compare url paths and query strings."""
assert_url_equal(url, other, compare_host=compare_host)

Expand Down
1 change: 0 additions & 1 deletion apps/amo/tests/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,6 @@ def test_junk(self):


def test_site_nav():
amo.tests.default_prefixer()
r = Mock()
r.APP = amo.FIREFOX
assert 'id="site-nav"' in helpers.site_nav({'request': r})
Expand Down
4 changes: 1 addition & 3 deletions apps/tags/tests/test_helpers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from django import test

from jingo import env
from mock import Mock
from nose.tools import eq_
Expand All @@ -20,7 +18,7 @@ def render(s, context={}):
return t.render(context)


class TestHelpers(test.TestCase):
class TestHelpers(amo.tests.BaseTestCase):
fixtures = ('base/addon_3615', 'base/user_2519', 'base/user_4043307',
'tags/tags')

Expand Down
2 changes: 1 addition & 1 deletion apps/translations/tests/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ def test_l10n_menu():
# Use the remove_locale_url taken from the addon in the context.
menu = helpers.l10n_menu({'addon': Addon()},
remove_locale_url='some/url/')
assert 'data-rm-locale="/developers/addon/None/rmlocale"' in menu, menu
assert 'data-rm-locale="/en-US/developers/addon/None/rmlocale"' in menu


@patch.object(settings, 'AMO_LANGUAGES', ('de', 'en-US', 'es', 'fr', 'pt-BR'))
Expand Down
60 changes: 60 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
from django import http, test
from django.conf import settings
from django.core.cache import cache
from django.utils import translation

import caching
import pytest

import amo
from translations.hold import clean_translations


@pytest.fixture(autouse=True)
def mock_inline_css(monkeypatch):
Expand Down Expand Up @@ -44,3 +53,54 @@ def prefix_indexes(config):

def pytest_configure(config):
prefix_indexes(config)


@pytest.fixture(autouse=True, scope='session')
def instrument_jinja():
"""Make sure the "templates" list in a response is properly updated, even
though we're using Jinja2 and not the default django template engine."""
import jinja2
old_render = jinja2.Template.render

def instrumented_render(self, *args, **kwargs):
context = dict(*args, **kwargs)
test.signals.template_rendered.send(
sender=self, template=self, context=context)
return old_render(self, *args, **kwargs)

jinja2.Template.render = instrumented_render


def default_prefixer():
"""Make sure each test starts with a default URL prefixer."""
request = http.HttpRequest()
request.META['SCRIPT_NAME'] = ''
prefixer = amo.urlresolvers.Prefixer(request)
prefixer.app = settings.DEFAULT_APP
prefixer.locale = settings.LANGUAGE_CODE
amo.urlresolvers.set_url_prefix(prefixer)


@pytest.fixture(autouse=True)
def test_pre_setup():
cache.clear()
# Override django-cache-machine caching.base.TIMEOUT because it's
# computed too early, before settings_test.py is imported.
caching.base.TIMEOUT = settings.CACHE_COUNT_TIMEOUT

translation.trans_real.deactivate()
# Django fails to clear this cache.
translation.trans_real._translations = {}
translation.trans_real.activate(settings.LANGUAGE_CODE)

# Reset the prefixer.
default_prefixer()


@pytest.fixture(autouse=True)
def test_post_teardown():
amo.set_user(None)
clean_translations(None) # Make sure queued translations are removed.

# Make sure we revert everything we might have changed to prefixers.
amo.urlresolvers.clean_url_prefixes()

0 comments on commit ac80230

Please sign in to comment.