Commit 4db07e40 authored by Michal Čihař's avatar Michal Čihař

Share code for overriding settings

Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent 134263f2
......@@ -52,9 +52,9 @@ from weblate.accounts.models import VerifiedEmail
from weblate.trans.tests.test_views import ViewTestCase, RegistrationTestMixin
from weblate.trans.tests.utils import get_test_file
from weblate.trans.tests import OverrideSettings
from weblate.trans.models.unitdata import Suggestion, Comment
from weblate.lang.models import Language
from weblate import appsettings
REGISTRATION_DATA = {
'username': 'username',
......@@ -81,9 +81,9 @@ class RegistrationTest(TestCase, RegistrationTestMixin):
reverse('password')
)
@OverrideSettings(REGISTRATION_CAPTCHA=True)
def test_register_captcha(self):
# Enable captcha
appsettings.REGISTRATION_CAPTCHA = True
response = self.client.post(
reverse('register'),
......@@ -94,25 +94,21 @@ class RegistrationTest(TestCase, RegistrationTestMixin):
'Please check your math and try again.'
)
@OverrideSettings(REGISTRATION_OPEN=False)
def test_register_closed(self):
# Disable registration
appsettings.REGISTRATION_OPEN = False
try:
response = self.client.post(
reverse('register'),
REGISTRATION_DATA
)
self.assertContains(
response,
'Sorry, but registrations on this site are disabled.'
)
finally:
appsettings.REGISTRATION_OPEN = True
response = self.client.post(
reverse('register'),
REGISTRATION_DATA
)
self.assertContains(
response,
'Sorry, but registrations on this site are disabled.'
)
@OverrideSettings(REGISTRATION_CAPTCHA=False)
def test_register(self):
# Disable captcha
appsettings.REGISTRATION_CAPTCHA = False
response = self.client.post(
reverse('register'),
REGISTRATION_DATA
......@@ -143,9 +139,6 @@ class RegistrationTest(TestCase, RegistrationTestMixin):
# Verify stored first/last name
self.assertEqual(user.first_name, 'First Last')
# Restore settings
appsettings.REGISTRATION_CAPTCHA = True
def test_reset(self):
'''
Test for password reset.
......@@ -343,17 +336,19 @@ class ViewTest(TestCase):
'[Weblate] Message from dark side'
)
def test_hosting(self):
@OverrideSettings(OFFER_HOSTING=False)
def test_hosting_disabled(self):
'''
Test for contact form.
Test for hosting form with disabled hosting
'''
# Disabled hosting
appsettings.OFFER_HOSTING = False
response = self.client.get(reverse('hosting'))
self.assertRedirects(response, reverse('home'))
# Enabled
appsettings.OFFER_HOSTING = True
@OverrideSettings(OFFER_HOSTING=True)
def test_hosting(self):
'''
Test for hosting form with enabled hosting.
'''
response = self.client.get(reverse('hosting'))
self.assertContains(response, 'id="id_message"')
......
......@@ -17,3 +17,29 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from weblate import appsettings
class OverrideSettings(object):
"""
makes a context manager also act as decorator
"""
def __init__(self, **values):
self._values = values
self._backup = {}
def __enter__(self):
for name, value in self._values.items():
self._backup[name] = getattr(appsettings, name)
setattr(appsettings, name, value)
return self
def __exit__(self, *args, **kwds):
for name in self._values.keys():
setattr(appsettings, name, self._backup[name])
def __call__(self, func):
def wrapper(*args, **kwds):
with self:
return func(*args, **kwds)
return wrapper
......@@ -25,34 +25,34 @@ Tests for translation models.
from django.test import TestCase
from django.utils import timezone
from weblate.trans.models import Advertisement
from weblate import appsettings
from weblate.trans.tests import OverrideSettings
import datetime
class AdvertisementTest(TestCase):
@OverrideSettings(SELF_ADVERTISEMENT=False)
def test_none(self):
appsettings.SELF_ADVERTISEMENT = False
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertIsNone(adv)
@OverrideSettings(SELF_ADVERTISEMENT=True)
def test_self(self):
appsettings.SELF_ADVERTISEMENT = True
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_TEXT
)
self.assertTrue('Weblate' in adv.text)
@OverrideSettings(SELF_ADVERTISEMENT=True)
def test_self_html(self):
appsettings.SELF_ADVERTISEMENT = True
adv = Advertisement.objects.get_advertisement(
Advertisement.PLACEMENT_MAIL_HTML
)
self.assertTrue('Weblate' in adv.text)
@OverrideSettings(SELF_ADVERTISEMENT=False)
def test_existing(self):
appsettings.SELF_ADVERTISEMENT = False
adv_created = Advertisement.objects.create(
placement=Advertisement.PLACEMENT_MAIL_TEXT,
date_start=timezone.now(),
......@@ -67,8 +67,8 @@ class AdvertisementTest(TestCase):
adv
)
@OverrideSettings(SELF_ADVERTISEMENT=False)
def test_outdated(self):
appsettings.SELF_ADVERTISEMENT = False
Advertisement.objects.create(
placement=Advertisement.PLACEMENT_MAIL_TEXT,
date_start=timezone.now() - datetime.timedelta(days=1),
......
......@@ -24,7 +24,7 @@ Tests for notification hooks.
from django.core.urlresolvers import reverse
from weblate.trans.tests.test_views import ViewTestCase
from weblate import appsettings
from weblate.trans.tests import OverrideSettings
GITHUB_PAYLOAD = '''
{
......@@ -211,9 +211,9 @@ BITBUCKET_PAYLOAD_HG_NO_COMMIT = '''
class HooksViewTest(ViewTestCase):
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_project(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.get(
reverse('hook-project', kwargs={
'project': self.subproject.project.slug
......@@ -221,9 +221,9 @@ class HooksViewTest(ViewTestCase):
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_subproject(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.get(
reverse('hook-subproject', kwargs={
'project': self.subproject.project.slug,
......@@ -232,56 +232,56 @@ class HooksViewTest(ViewTestCase):
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_github(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.post(
reverse('hook-github'),
{'payload': GITHUB_PAYLOAD}
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_gitlab(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.post(
reverse('hook-gitlab'), GITLAB_PAYLOAD,
content_type="application/json"
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_bitbucket_git(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.post(
reverse('hook-bitbucket'),
{'payload': BITBUCKET_PAYLOAD_GIT}
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_bitbucket_hg(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.post(
reverse('hook-bitbucket'),
{'payload': BITBUCKET_PAYLOAD_HG}
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=True)
@OverrideSettings(BACKGROUND_HOOKS=False)
def test_view_hook_bitbucket_hg_no_commit(self):
appsettings.BACKGROUND_HOOKS = False
appsettings.ENABLE_HOOKS = True
response = self.client.post(
reverse('hook-bitbucket'),
{'payload': BITBUCKET_PAYLOAD_HG_NO_COMMIT}
)
self.assertContains(response, 'update triggered')
@OverrideSettings(ENABLE_HOOKS=False)
def test_disabled(self):
'''
Test for hooks disabling.
'''
appsettings.ENABLE_HOOKS = False
response = self.client.get(
reverse('hook-project', kwargs={
'project': self.subproject.project.slug
......
......@@ -34,6 +34,7 @@ from weblate.trans.models import (
)
from weblate.trans.models.source import Source
from weblate import appsettings
from weblate.trans.tests import OverrideSettings
from weblate.trans.tests.utils import get_test_file
from weblate.trans.vcs import GitRepository, HgRepository
from weblate.trans.search import clean_indexes
......@@ -298,19 +299,15 @@ class ProjectTest(RepoTestCase):
def test_wrong_path(self):
project = self.create_project()
backup = appsettings.DATA_DIR
appsettings.DATA_DIR = '/weblate-nonexisting-path'
with OverrideSettings(DATA_DIR='/weblate-nonexisting-path'):
# Invalidate cache, pylint: disable=W0212
project._dir_path = None
# Invalidate cache, pylint: disable=W0212
project._dir_path = None
self.assertRaisesMessage(
ValidationError,
'Could not create project directory',
project.full_clean
)
appsettings.DATA_DIR = backup
self.assertRaisesMessage(
ValidationError,
'Could not create project directory',
project.full_clean
)
def test_acl(self):
"""
......
......@@ -13,8 +13,8 @@ import json
import httplib
import base64
from weblate import appsettings
from weblate.trans.tests.test_views import RegistrationTestMixin
from weblate.trans.tests import OverrideSettings
# Check whether we should run Selenium tests
DO_SELENIUM = (
......@@ -181,13 +181,11 @@ class SeleniumTests(LiveServerTestCase, RegistrationTestMixin):
(self.live_server_url, self.assert_registration_mailbox())
)
@OverrideSettings(REGISTRATION_CAPTCHA=False)
def test_register(self, clear=False):
"""
Test registration.
"""
# We don't want captcha
appsettings.REGISTRATION_CAPTCHA = False
url = self.register_user()
# Delete all cookies
......@@ -213,8 +211,6 @@ class SeleniumTests(LiveServerTestCase, RegistrationTestMixin):
'You have activated' in
self.driver.find_element_by_tag_name('body').text
)
# Restore
appsettings.REGISTRATION_CAPTCHA = True
def test_register_nocookie(self):
"""
......
......@@ -34,11 +34,11 @@ from django.contrib.messages.storage.fallback import FallbackStorage
from django.core import mail
from PIL import Image
from weblate import appsettings
from weblate.trans.models.whiteboard import WhiteboardMessage
from weblate.trans.models.changes import Change
from weblate.trans.tests.test_models import RepoTestCase
from weblate.accounts.models import Profile
from weblate.trans.tests import OverrideSettings
class RegistrationTestMixin(object):
......@@ -878,11 +878,8 @@ class HomeViewTest(ViewTestCase):
response = self.client.get(reverse('home'))
self.assertContains(response, 'Test/Test')
@OverrideSettings(ENABLE_WHITEBOARD=True)
def test_home_with_whiteboard(self):
# @override_settings decorator does not work becase
# appsettings.ENABLE_WHITEBOARD is just a constant that is being
# assigned during first import
appsettings.ENABLE_WHITEBOARD = True
msg = WhiteboardMessage(message='test_message')
msg.save()
......@@ -890,8 +887,8 @@ class HomeViewTest(ViewTestCase):
self.assertContains(response, 'whiteboard')
self.assertContains(response, 'test_message')
@OverrideSettings(ENABLE_WHITEBOARD=False)
def test_home_without_whiteboard(self):
appsettings.ENABLE_WHITEBOARD = False
response = self.client.get(reverse('home'))
self.assertNotContains(response, 'whiteboard')
......
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