kopia lustrzana https://github.com/jedie/PyInventory
commit
8c4d3c8d83
Plik diff jest za duży
Load Diff
|
@ -1,27 +1,5 @@
|
|||
import os
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.core.management.commands.runserver import Command as RunServerCommand
|
||||
from django_tools.management.commands.run_testserver import Command as RunServerCommand
|
||||
|
||||
|
||||
class Command(RunServerCommand):
|
||||
help = "Run Django dev. Server"
|
||||
|
||||
def verbose_call(self, command, **kwargs):
|
||||
self.stdout.write("\n")
|
||||
self.stdout.write("_" * 79)
|
||||
self.stdout.write(self.style.NOTICE(f" *** call '{command}' command with {kwargs}:"))
|
||||
self.stdout.write("\n")
|
||||
call_command(command, **kwargs)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
"""
|
||||
INFO: The django reloader will call this multiple times!
|
||||
We check RUN_MAIN, that will be set in django.utils.autoreload
|
||||
So we can skip the first migrate run.
|
||||
"""
|
||||
if os.environ.get("RUN_MAIN"):
|
||||
self.verbose_call("migrate", run_syncdb=True, interactive=False, verbosity=1)
|
||||
self.verbose_call("showmigrations", verbosity=1)
|
||||
|
||||
self.verbose_call("runserver", **options)
|
||||
pass
|
||||
|
|
|
@ -13,9 +13,6 @@ from inventory_project.settings.base import * # noqa
|
|||
DEBUG = True
|
||||
TEMPLATE_DEBUG = True
|
||||
|
||||
# Serve static/media files for local development:
|
||||
SERVE_FILES = True
|
||||
|
||||
|
||||
# Disable caches:
|
||||
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}
|
||||
|
@ -53,11 +50,11 @@ DEFAULT_USERPASS = 'test'
|
|||
DEFAULT_USEREMAIL = 'nobody@local.intranet'
|
||||
|
||||
MIDDLEWARE = MIDDLEWARE.copy()
|
||||
MIDDLEWARE.append('inventory_project.tests.middleware.AlwaysLoggedInAsSuperUser')
|
||||
|
||||
MIDDLEWARE.append('django_tools.middlewares.local_auto_login.AlwaysLoggedInAsSuperUserMiddleware')
|
||||
# _____________________________________________________________________________
|
||||
# Django-Debug-Toolbar
|
||||
|
||||
INSTALLED_APPS.copy()
|
||||
INSTALLED_APPS += ['debug_toolbar']
|
||||
MIDDLEWARE.append('debug_toolbar.middleware.DebugToolbarMiddleware')
|
||||
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import authenticate, login
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
def _print_and_message(request, msg, level=messages.WARNING):
|
||||
print(f' *** {msg} ***', file=sys.stderr)
|
||||
messages.add_message(request, level, msg)
|
||||
|
||||
|
||||
class AlwaysLoggedInAsSuperUser:
|
||||
"""
|
||||
Auto login all users as default superuser.
|
||||
Default user will be created, if not exist.
|
||||
|
||||
Disable it by deactivate the default user.
|
||||
"""
|
||||
|
||||
def __init__(self, get_response):
|
||||
assert 'RUN_MAIN' in os.environ, 'Only allowed running by Django dev. server !'
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
self._auto_login(request)
|
||||
response = self.get_response(request)
|
||||
|
||||
return response
|
||||
|
||||
def _auto_login(self, request):
|
||||
if request.user.is_authenticated:
|
||||
return
|
||||
|
||||
try:
|
||||
user = User.objects.get(username=settings.DEFAULT_USERNAME)
|
||||
except User.DoesNotExist:
|
||||
_print_and_message(request, f'Create test django user: {settings.DEFAULT_USERNAME!r}')
|
||||
User.objects.create_superuser(
|
||||
username=settings.DEFAULT_USERNAME,
|
||||
email=settings.DEFAULT_USEREMAIL,
|
||||
password=settings.DEFAULT_USERPASS
|
||||
)
|
||||
else:
|
||||
if not user.is_active:
|
||||
_print_and_message(request, 'Default User was deactivated!', level=messages.ERROR)
|
||||
return
|
||||
|
||||
user.set_password(settings.DEFAULT_USERPASS)
|
||||
user.save()
|
||||
|
||||
_print_and_message(
|
||||
request,
|
||||
f'Autologin applied. Your logged in as {settings.DEFAULT_USERNAME!r}'
|
||||
)
|
||||
user = authenticate(
|
||||
request=request,
|
||||
username=settings.DEFAULT_USERNAME,
|
||||
password=settings.DEFAULT_USERPASS
|
||||
)
|
||||
login(request, user)
|
|
@ -42,7 +42,7 @@
|
|||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="?create_dt__day=1&create_dt__month=1&create_dt__year=2000">
|
||||
<a href="?create_dt__day=1&create_dt__month=1&create_dt__year=2000">
|
||||
January 1
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -160,13 +160,13 @@
|
|||
---------
|
||||
</option>
|
||||
</select>
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_parent" title="Change selected Item">
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_parent" title="Change selected Item">
|
||||
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&_popup=1" id="add_id_parent" title="Add another Item">
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&_popup=1" id="add_id_parent" title="Add another Item">
|
||||
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_parent" title="Delete selected Item">
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_parent" title="Delete selected Item">
|
||||
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -186,13 +186,13 @@
|
|||
---------
|
||||
</option>
|
||||
</select>
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_location" title="Change selected Location">
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_location" title="Change selected Location">
|
||||
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&_popup=1" id="add_id_location" title="Add another Location">
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&_popup=1" id="add_id_location" title="Add another Location">
|
||||
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_location" title="Delete selected Location">
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_location" title="Delete selected Location">
|
||||
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -180,7 +180,7 @@
|
|||
<div id="content-main">
|
||||
<ul class="object-tools">
|
||||
<li>
|
||||
<a class="historylink" href="/admin/inventory/itemmodel/<removed-UUID>/history/">
|
||||
<a class="historylink" href="/admin/inventory/itemmodel/<removed-UUID>/history/">
|
||||
History
|
||||
</a>
|
||||
</li>
|
||||
|
@ -366,17 +366,17 @@
|
|||
<option selected="" value="">
|
||||
---------
|
||||
</option>
|
||||
<option value="<removed-UUID>">
|
||||
<option value="<removed-UUID>">
|
||||
name
|
||||
</option>
|
||||
</select>
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_parent" title="Change selected Item">
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/itemmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_parent" title="Change selected Item">
|
||||
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&_popup=1" id="add_id_parent" title="Add another Item">
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/itemmodel/add/?_to_field=id&_popup=1" id="add_id_parent" title="Add another Item">
|
||||
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_parent" title="Delete selected Item">
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/itemmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_parent" title="Delete selected Item">
|
||||
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -396,13 +396,13 @@
|
|||
---------
|
||||
</option>
|
||||
</select>
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_location" title="Change selected Location">
|
||||
<a class="related-widget-wrapper-link change-related" data-href-template="/admin/inventory/locationmodel/__fk__/change/?_to_field=id&_popup=1" id="change_id_location" title="Change selected Location">
|
||||
<img alt="Change" src="/static/admin/img/icon-changelink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&_popup=1" id="add_id_location" title="Add another Location">
|
||||
<a class="related-widget-wrapper-link add-related" href="/admin/inventory/locationmodel/add/?_to_field=id&_popup=1" id="add_id_location" title="Add another Location">
|
||||
<img alt="Add" src="/static/admin/img/icon-addlink.svg"/>
|
||||
</a>
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_location" title="Delete selected Location">
|
||||
<a class="related-widget-wrapper-link delete-related" data-href-template="/admin/inventory/locationmodel/__fk__/delete/?_to_field=id&_popup=1" id="delete_id_location" title="Delete selected Location">
|
||||
<img alt="Delete" src="/static/admin/img/icon-deletelink.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -551,7 +551,7 @@
|
|||
</td>
|
||||
<td class="original">
|
||||
<input id="id_itemimagemodel_set-__prefix__-id" name="itemimagemodel_set-__prefix__-id" type="hidden"/>
|
||||
<input id="id_itemimagemodel_set-__prefix__-item" name="itemimagemodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemimagemodel_set-__prefix__-item" name="itemimagemodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemimagemodel_set-__prefix__-position" name="itemimagemodel_set-__prefix__-position" type="hidden" value="0"/>
|
||||
</td>
|
||||
<td class="field-preview">
|
||||
|
@ -629,7 +629,7 @@
|
|||
</td>
|
||||
<td class="original">
|
||||
<input id="id_itemfilemodel_set-__prefix__-id" name="itemfilemodel_set-__prefix__-id" type="hidden"/>
|
||||
<input id="id_itemfilemodel_set-__prefix__-item" name="itemfilemodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemfilemodel_set-__prefix__-item" name="itemfilemodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemfilemodel_set-__prefix__-position" name="itemfilemodel_set-__prefix__-position" type="hidden" value="0"/>
|
||||
</td>
|
||||
<td class="field-file">
|
||||
|
@ -699,7 +699,7 @@
|
|||
</td>
|
||||
<td class="original">
|
||||
<input id="id_itemlinkmodel_set-__prefix__-id" name="itemlinkmodel_set-__prefix__-id" type="hidden"/>
|
||||
<input id="id_itemlinkmodel_set-__prefix__-item" name="itemlinkmodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemlinkmodel_set-__prefix__-item" name="itemlinkmodel_set-__prefix__-item" type="hidden" value="<removed-UUID>"/>
|
||||
<input id="id_itemlinkmodel_set-__prefix__-position" name="itemlinkmodel_set-__prefix__-position" type="hidden" value="0"/>
|
||||
</td>
|
||||
<td class="field-tags">
|
||||
|
@ -733,7 +733,7 @@
|
|||
<div class="submit-row">
|
||||
<input class="default" name="_save" type="submit" value="Save"/>
|
||||
<p class="deletelink-box">
|
||||
<a class="deletelink" href="/admin/inventory/itemmodel/<removed-UUID>/delete/">
|
||||
<a class="deletelink" href="/admin/inventory/itemmodel/<removed-UUID>/delete/">
|
||||
Delete
|
||||
</a>
|
||||
</p>
|
||||
|
|
|
@ -23,16 +23,25 @@ def call_devshell_commands(*args):
|
|||
class DevShellTestCase(TestCase):
|
||||
def test_run_testserver(self):
|
||||
output = call_devshell_commands('run_testserver', '--help')
|
||||
assert 'usage: manage.py run_testserver' in output
|
||||
assert 'Run Django dev. Server' in output
|
||||
assert 'Optional port number, or ipaddr:port' in output
|
||||
assert 'Setup test project and run django developer server' in output
|
||||
|
||||
def test_pass_wrong_addrport(self):
|
||||
output = call_devshell_commands('run_testserver', 'not-ip:no-port')
|
||||
assert "call 'runserver' command with" in output
|
||||
assert (
|
||||
'CommandError: "not-ip:no-port" is not a valid port number or address:port pair.'
|
||||
) in output
|
||||
# From own run_testserver command:
|
||||
assert '--nomakemigrations' in output
|
||||
assert '--nomigrate' in output
|
||||
|
||||
# From django.core.management.commands.runserver command:
|
||||
assert '[addrport]' in output
|
||||
|
||||
def test_run_testserver_invalid_addr(self):
|
||||
output = call_devshell_commands(
|
||||
'run_testserver',
|
||||
'--nomigrate',
|
||||
'--nomakemigrations',
|
||||
'invalid:addr',
|
||||
)
|
||||
|
||||
assert 'Call "runserver"' in output
|
||||
assert 'is not a valid port number or address' in output
|
||||
|
||||
def test_manage_command(self):
|
||||
output = call_devshell_commands('manage', 'diffsettings')
|
||||
|
|
|
@ -6,6 +6,7 @@ from pathlib import Path
|
|||
from creole.setup_utils import update_rst_readme
|
||||
from django.conf import settings
|
||||
from django.core import checks
|
||||
from django.core.cache import cache
|
||||
from django.test import TestCase
|
||||
from django_tools.unittest_utils.project_setup import check_editor_config
|
||||
|
||||
|
@ -115,6 +116,21 @@ class ProjectSettingsTestCase(TestCase):
|
|||
print('=' * 100)
|
||||
raise AssertionError('There are check issues!')
|
||||
|
||||
def test_cache(self):
|
||||
# django cache should work in tests, because some tests "depends" on it
|
||||
cache_key = 'a-cache-key'
|
||||
assert cache.get(cache_key) is None
|
||||
cache.set(cache_key, 'the cache content', timeout=1)
|
||||
assert cache.get(cache_key) == 'the cache content'
|
||||
cache.delete(cache_key)
|
||||
assert cache.get(cache_key) is None
|
||||
|
||||
def test_settings(self):
|
||||
assert settings.SETTINGS_MODULE == 'inventory_project.settings.tests'
|
||||
middlewares = [entry.rsplit('.', 1)[-1] for entry in settings.MIDDLEWARE]
|
||||
assert 'AlwaysLoggedInAsSuperUserMiddleware' not in middlewares
|
||||
assert 'DebugToolbarMiddleware' not in middlewares
|
||||
|
||||
|
||||
def test_check_editor_config():
|
||||
check_editor_config(package_root=PACKAGE_ROOT)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.conf import settings
|
||||
from django.conf.urls import include, re_path, static
|
||||
from django.conf.urls import include, re_path
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.views.generic import RedirectView
|
||||
|
@ -17,10 +17,6 @@ urlpatterns = [ # Don't use i18n_patterns() here
|
|||
]
|
||||
|
||||
|
||||
if settings.SERVE_FILES:
|
||||
urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||
|
||||
|
||||
if settings.DEBUG:
|
||||
import debug_toolbar
|
||||
urlpatterns = [re_path(r'^__debug__/', include(debug_toolbar.urls))] + urlpatterns
|
||||
|
|
Ładowanie…
Reference in New Issue