kopia lustrzana https://github.com/jedie/PyInventory
Release as v0.19.0
rodzic
f1c10f1d4a
commit
7da60dfe8a
|
@ -154,11 +154,12 @@ Files are separated into: "/src/" and "/development/"
|
|||
## history
|
||||
|
||||
|
||||
* [**dev**](https://github.com/jedie/PyInventory/compare/v0.18.1...main)
|
||||
* [**dev**](https://github.com/jedie/PyInventory/compare/v0.19.0...main)
|
||||
* tbc
|
||||
* [v0.19.0 - 15.06.2023](https://github.com/jedie/PyInventory/compare/v0.18.1...v0.19.0)
|
||||
* Update to Django 4.2
|
||||
* remove django-processinfo
|
||||
* Bugfix ItemModelAdmin
|
||||
* tbc
|
||||
* [v0.18.1 - 15.06.2023](https://github.com/jedie/PyInventory/compare/v0.18.0...v0.18.1)
|
||||
* Update requirements
|
||||
* [v0.18.0 - 04.04.2023](https://github.com/jedie/PyInventory/compare/v0.17.0...v0.18.0)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
export PROJECT_NAME=pyinventory
|
||||
export PROJECT_PACKAGE_NAME=pyinventory
|
||||
export PROJECT_VERSION=0.18.1
|
||||
export PROJECT_VERSION=0.19.0
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[tool.poetry]
|
||||
name = "PyInventory"
|
||||
version = "0.18.1"
|
||||
version = "0.19.0"
|
||||
description = "Web based management to catalog things including state and location etc. using Python/Django."
|
||||
authors = [
|
||||
"Jens Diemer <PyInventory@jensdiemer.de>",
|
||||
|
|
|
@ -4,8 +4,8 @@ from bx_django_utils.test_utils.html_assertion import HtmlAssertionMixin, assert
|
|||
from django.template.defaulttags import CsrfTokenNode, NowNode
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from inventory import __version__
|
||||
from inventory_project.tests.fixtures import get_normal_user
|
||||
from inventory_project.tests.mocks import MockInventoryVersionString
|
||||
|
||||
|
||||
@override_settings(SECURE_SSL_REDIRECT=False)
|
||||
|
@ -18,7 +18,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
self.client.force_login(self.normaluser)
|
||||
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
|
||||
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
|
||||
):
|
||||
), MockInventoryVersionString():
|
||||
response = self.client.get(
|
||||
path='/admin/inventory/locationmodel/',
|
||||
)
|
||||
|
@ -26,7 +26,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
self.assert_html_parts(
|
||||
response,
|
||||
parts=(
|
||||
f'<title>Select Location to change | PyInventory v{__version__}</title>',
|
||||
'<title>Select Location to change | PyInventory vMockedVersionString</title>',
|
||||
'<a href="/admin/inventory/locationmodel/add/" class="addlink">Add Location</a>',
|
||||
'<p class="paginator">0 Locations</p>',
|
||||
),
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
from unittest import mock
|
||||
|
||||
from bx_py_utils.test_utils.context_managers import MassContextManager
|
||||
|
||||
from inventory import context_processors
|
||||
|
||||
|
||||
class MockInventoryVersionString(MassContextManager):
|
||||
def __init__(self):
|
||||
self.mocks = [
|
||||
mock.patch.object(context_processors, '__version__', self),
|
||||
]
|
||||
|
||||
def __repr__(self):
|
||||
return 'MockedVersionString'
|
|
@ -10,16 +10,15 @@ from django.utils import timezone
|
|||
from django_tools.unittest_utils.mockup import ImageDummy
|
||||
from reversion.models import Revision
|
||||
|
||||
from inventory import __version__
|
||||
from inventory.models import ItemImageModel, ItemModel
|
||||
from inventory_project.tests.fixtures import get_normal_user
|
||||
from inventory_project.tests.mocks import MockInventoryVersionString
|
||||
|
||||
|
||||
ITEM_FORM_DEFAULTS = {
|
||||
'version': 0, # VersionProtectBaseModel field
|
||||
'kind': 'kind',
|
||||
'name': 'name',
|
||||
|
||||
'itemimagemodel_set-TOTAL_FORMS': '0',
|
||||
'itemimagemodel_set-INITIAL_FORMS': '0',
|
||||
'itemimagemodel_set-MIN_NUM_FORMS': '0',
|
||||
|
@ -55,27 +54,22 @@ class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
|
|||
fetch_redirect_response=False
|
||||
)
|
||||
|
||||
response = self.client.get(
|
||||
path='/admin/inventory/itemmodel/add/',
|
||||
secure=True,
|
||||
HTTP_ACCEPT_LANGUAGE='en'
|
||||
)
|
||||
response = self.client.get(path='/admin/inventory/itemmodel/add/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
|
||||
self.assertRedirects(
|
||||
response,
|
||||
expected_url='/admin/login/?next=/admin/inventory/itemmodel/add/',
|
||||
fetch_redirect_response=False
|
||||
response, expected_url='/admin/login/?next=/admin/inventory/itemmodel/add/', fetch_redirect_response=False
|
||||
)
|
||||
with mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'):
|
||||
response = self.client.get(
|
||||
path='/admin/login/',
|
||||
secure=True,
|
||||
HTTP_ACCEPT_LANGUAGE='en'
|
||||
with mock.patch.object(
|
||||
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
|
||||
), MockInventoryVersionString():
|
||||
response = self.client.get(path='/admin/login/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
|
||||
self.assert_html_parts(
|
||||
response,
|
||||
parts=(
|
||||
'<title>Log in | PyInventory vMockedVersionString</title>',
|
||||
'<label class="required" for="id_username">Username:</label>',
|
||||
'<label class="required" for="id_password">Password:</label>',
|
||||
),
|
||||
)
|
||||
self.assert_html_parts(response, parts=(
|
||||
f'<title>Log in | PyInventory v{__version__}</title>',
|
||||
'<label class="required" for="id_username">Username:</label>',
|
||||
'<label class="required" for="id_password">Password:</label>',
|
||||
))
|
||||
assert_html_response_snapshot(response, validate=False)
|
||||
|
||||
|
||||
|
@ -87,16 +81,16 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
|
||||
def test_normal_user_create_minimal_item(self):
|
||||
offset = datetime.timedelta(minutes=1)
|
||||
with mock.patch.object(timezone, 'now', MockDatetimeGenerator(offset=offset)),\
|
||||
mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), \
|
||||
mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'):
|
||||
with mock.patch.object(timezone, 'now', MockDatetimeGenerator(offset=offset)), mock.patch.object(
|
||||
NowNode, 'render', return_value='MockedNowNode'
|
||||
), mock.patch.object(
|
||||
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
|
||||
), MockInventoryVersionString():
|
||||
self.client.force_login(self.normaluser)
|
||||
|
||||
response = self.client.get('/admin/inventory/itemmodel/add/')
|
||||
assert response.status_code == 200
|
||||
self.assert_html_parts(response, parts=(
|
||||
f'<title>Add Item | PyInventory v{__version__}</title>',
|
||||
))
|
||||
self.assert_html_parts(response, parts=('<title>Add Item | PyInventory vMockedVersionString</title>',))
|
||||
assert_html_response_snapshot(response=response, validate=False)
|
||||
|
||||
assert ItemModel.objects.count() == 0
|
||||
|
@ -133,11 +127,14 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
path=f'/admin/inventory/itemmodel/{item.pk}/change/',
|
||||
data=post_data,
|
||||
)
|
||||
self.assert_html_parts(response, parts=(
|
||||
f'<title>Change Item | PyInventory v{__version__}</title>',
|
||||
'<li>Version error: Overwrite version 2 with 1 is forbidden!</li>',
|
||||
'<pre>- "name"\n+ "A new Name!"</pre>'
|
||||
))
|
||||
self.assert_html_parts(
|
||||
response,
|
||||
parts=(
|
||||
'<title>Change Item | PyInventory vMockedVersionString</title>',
|
||||
'<li>Version error: Overwrite version 2 with 1 is forbidden!</li>',
|
||||
'<pre>- "name"\n+ "A new Name!"</pre>',
|
||||
),
|
||||
)
|
||||
html = response.content.decode('utf-8')
|
||||
html = html.replace(str(item.pk), '<removed-UUID>')
|
||||
assert_html_snapshot(got=html, validate=False)
|
||||
|
@ -217,7 +214,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
|
||||
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
|
||||
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
|
||||
):
|
||||
), MockInventoryVersionString():
|
||||
response = self.client.get(
|
||||
path='/admin/inventory/itemmodel/',
|
||||
)
|
||||
|
@ -225,7 +222,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
self.assert_html_parts(
|
||||
response,
|
||||
parts=(
|
||||
f'<title>Select Item to change | PyInventory v{__version__}</title>',
|
||||
'<title>Select Item to change | PyInventory vMockedVersionString</title>',
|
||||
'<a href="/admin/inventory/itemmodel/00000000-0001-0000-0000-000000000000/change/">'
|
||||
'<strong>main item 1</strong></a>',
|
||||
'<a href="/admin/inventory/itemmodel/00000000-0001-0001-0000-000000000000/change/">'
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<title>
|
||||
Change Item | PyInventory v0.18.1
|
||||
Change Item | PyInventory vMockedVersionString
|
||||
</title>
|
||||
<link href="/static/admin/css/base.css" rel="stylesheet"/>
|
||||
<link href="/static/admin/css/dark_mode.css" rel="stylesheet"/>
|
||||
|
@ -77,7 +77,7 @@
|
|||
<div id="branding">
|
||||
<h1 id="site-name">
|
||||
<a href="/admin/">
|
||||
PyInventory v0.18.1
|
||||
PyInventory vMockedVersionString
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
|
|
|
@ -8,9 +8,9 @@ from django_tools.unittest_utils.mockup import ImageDummy
|
|||
from model_bakery import baker
|
||||
from reversion.models import Revision
|
||||
|
||||
from inventory import __version__
|
||||
from inventory.models import MemoImageModel, MemoModel
|
||||
from inventory.permissions import get_or_create_normal_user_group
|
||||
from inventory_project.tests.mocks import MockInventoryVersionString
|
||||
|
||||
|
||||
class AdminAnonymousTests(TestCase):
|
||||
|
@ -42,13 +42,12 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
|
|||
def test_normal_user_create_minimal_item(self):
|
||||
self.client.force_login(self.normaluser)
|
||||
|
||||
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), \
|
||||
mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'):
|
||||
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
|
||||
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
|
||||
), MockInventoryVersionString():
|
||||
response = self.client.get('/admin/inventory/memomodel/add/')
|
||||
assert response.status_code == 200
|
||||
self.assert_html_parts(response, parts=(
|
||||
f'<title>Add Memo | PyInventory v{__version__}</title>',
|
||||
))
|
||||
self.assert_html_parts(response, parts=('<title>Add Memo | PyInventory vMockedVersionString</title>',))
|
||||
assert_html_response_snapshot(response=response, validate=False)
|
||||
|
||||
assert MemoModel.objects.count() == 0
|
||||
|
|
Ładowanie…
Reference in New Issue