From 827ca38adcaffeb3b93b5a9dd12d1db6491c02ea Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Mon, 30 Oct 2017 18:38:48 +0100 Subject: [PATCH] allow override of app's settings (#19763) --- mandayejs/applications.py | 33 +++++++-------------------------- tests/test_mandayejs.py | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/mandayejs/applications.py b/mandayejs/applications.py index ff02ff3..cd18d90 100644 --- a/mandayejs/applications.py +++ b/mandayejs/applications.py @@ -29,7 +29,7 @@ from django.core.urlresolvers import resolve def get_app_settings(): module_name, app_settings = tuple(settings.SITE_APP.rsplit('.', 1)) module = import_module(module_name) - return getattr(module, app_settings) + return getattr(module, app_settings)() def app_web_services(request, path): @@ -70,15 +70,18 @@ class AppSettingsMeta(type): if not dct.get('SITE_FORM_SUBMIT_ELEMENT', None): dct['SITE_FORM_SUBMIT_ELEMENT'] = 'input[type=submit], button' - if dct.get('SITE_LOGIN_PATH_PREFIX', None): - parent = bases[0] - dct['SITE_LOGIN_PATH'] = os.path.join(dct['SITE_LOGIN_PATH_PREFIX'], parent.SITE_LOGIN_PATH.strip('/')) return super(AppSettingsMeta, cls).__new__(cls, name, bases, dct) class AppSettings(object): __metaclass__ = AppSettingsMeta + def __getattribute__(self, name): + value = getattr(settings, name, None) + if value: + return value + return object.__getattribute__(self, name) + # Test App Settings class Test(AppSettings): @@ -228,10 +231,6 @@ class Arpege(AppSettings): SITE_LOGOUT_LOCATOR = '#espace-login form input[type=submit]' -class ArpegeVincennesTest(Arpege): - SITE_LOGIN_PATH = '/vincennes-test/index.do' - - class Imuse(AppSettings): SITE_LOGIN_PATH = 'extranet/login/gen_index_groupe.php?nav=autre' @@ -265,20 +264,6 @@ class Imuse(AppSettings): SITE_FORM_SUBMIT_ELEMENT = '#INDEX_BT_LOGIN' -class ImuseTeacher(Imuse): - SITE_LOGIN_PATH = '/extranet/login/ens_index_enseignant.php' - - -class ImuseFamily(Imuse): - SITE_LOGIN_PATH = '/extranet/login/usa_index_famille.php' - - SITE_LOGOUT_LOCATOR = '#MENU_FAMILLE_QUITTER' - - -class ImuseFamilyMontpellier(ImuseFamily): - SITE_LOGIN_PATH_PREFIX = '/montpellier/' - - class Sezhame(AppSettings): SITE_LOGIN_PATH = '/sezhame/page/connexion-abonne?destination=user' @@ -344,7 +329,3 @@ class Teamnet(AppSettings): SITE_FORCE_REDIRECT_LOCATOR = '#loginForm' SITE_LOGOUT_LOCATOR = ".infoUtilisateur[alt=Deconnexion]" - - -class TeamnetMeyzieu(Teamnet): - SITE_LOGIN_PATH_PREFIX = '/meyzieu/' diff --git a/tests/test_mandayejs.py b/tests/test_mandayejs.py index 8469337..78b87c3 100644 --- a/tests/test_mandayejs.py +++ b/tests/test_mandayejs.py @@ -3,6 +3,7 @@ import json import time import mock +import os import pytest from django.conf import settings @@ -13,7 +14,7 @@ from django.test.client import RequestFactory, Client from django.core.urlresolvers import reverse from mandayejs.mandaye.models import UserCredentials -from mandayejs.mandaye.utils import exec_phantom +from mandayejs.mandaye.utils import exec_phantom, get_login_info from mandayejs.mandaye.forms import FormFactory from mandayejs.mandaye.views import post_login_do @@ -409,3 +410,20 @@ def test_post_login_do_with_next_url(mocked_popen, user_john): request.user = user_john response = post_login_do(request) assert 'window.top.location = "http://example.net/"' in response.content + + +@mock.patch('mandayejs.applications.Test.SITE_LOCATORS', MOCKED_SITE_LOCATORS) +def test_app_settings_overriding(settings, cred_john): + request = RequestFactory().get('/') + data = get_login_info(request, cred_john) + assert data['address'] == 'http://testserver/' + assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/test/auth.checker.js') + assert data['form_submit_element'] == 'input[type=submit], button' + # when overriding settings + settings.SITE_LOGIN_PATH = '/login' + settings.SITE_AUTH_CHECKER = os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js') + settings.SITE_FORM_SUBMIT_ELEMENT = 'button' + data = get_login_info(request, cred_john) + assert data['address'] == 'http://testserver/login' + assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js') + assert data['form_submit_element'] == 'button' -- 2.11.0