Release as v0.19.0

pull/139/head
JensDiemer 2023-07-21 07:02:45 +02:00
rodzic f1c10f1d4a
commit 7da60dfe8a
8 zmienionych plików z 60 dodań i 48 usunięć

Wyświetl plik

@ -154,11 +154,12 @@ Files are separated into: "/src/" and "/development/"
## history ## 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 * Update to Django 4.2
* remove django-processinfo * remove django-processinfo
* Bugfix ItemModelAdmin * Bugfix ItemModelAdmin
* tbc
* [v0.18.1 - 15.06.2023](https://github.com/jedie/PyInventory/compare/v0.18.0...v0.18.1) * [v0.18.1 - 15.06.2023](https://github.com/jedie/PyInventory/compare/v0.18.0...v0.18.1)
* Update requirements * Update requirements
* [v0.18.0 - 04.04.2023](https://github.com/jedie/PyInventory/compare/v0.17.0...v0.18.0) * [v0.18.0 - 04.04.2023](https://github.com/jedie/PyInventory/compare/v0.17.0...v0.18.0)

Wyświetl plik

@ -1,3 +1,3 @@
export PROJECT_NAME=pyinventory export PROJECT_NAME=pyinventory
export PROJECT_PACKAGE_NAME=pyinventory export PROJECT_PACKAGE_NAME=pyinventory
export PROJECT_VERSION=0.18.1 export PROJECT_VERSION=0.19.0

Wyświetl plik

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "PyInventory" 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." description = "Web based management to catalog things including state and location etc. using Python/Django."
authors = [ authors = [
"Jens Diemer <PyInventory@jensdiemer.de>", "Jens Diemer <PyInventory@jensdiemer.de>",

Wyświetl plik

@ -4,8 +4,8 @@ from bx_django_utils.test_utils.html_assertion import HtmlAssertionMixin, assert
from django.template.defaulttags import CsrfTokenNode, NowNode from django.template.defaulttags import CsrfTokenNode, NowNode
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from inventory import __version__
from inventory_project.tests.fixtures import get_normal_user from inventory_project.tests.fixtures import get_normal_user
from inventory_project.tests.mocks import MockInventoryVersionString
@override_settings(SECURE_SSL_REDIRECT=False) @override_settings(SECURE_SSL_REDIRECT=False)
@ -18,7 +18,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
self.client.force_login(self.normaluser) self.client.force_login(self.normaluser)
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object( with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode' CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
): ), MockInventoryVersionString():
response = self.client.get( response = self.client.get(
path='/admin/inventory/locationmodel/', path='/admin/inventory/locationmodel/',
) )
@ -26,7 +26,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
self.assert_html_parts( self.assert_html_parts(
response, response,
parts=( 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>', '<a href="/admin/inventory/locationmodel/add/" class="addlink">Add Location</a>',
'<p class="paginator">0 Locations</p>', '<p class="paginator">0 Locations</p>',
), ),

Wyświetl plik

@ -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'

Wyświetl plik

@ -10,16 +10,15 @@ from django.utils import timezone
from django_tools.unittest_utils.mockup import ImageDummy from django_tools.unittest_utils.mockup import ImageDummy
from reversion.models import Revision from reversion.models import Revision
from inventory import __version__
from inventory.models import ItemImageModel, ItemModel from inventory.models import ItemImageModel, ItemModel
from inventory_project.tests.fixtures import get_normal_user from inventory_project.tests.fixtures import get_normal_user
from inventory_project.tests.mocks import MockInventoryVersionString
ITEM_FORM_DEFAULTS = { ITEM_FORM_DEFAULTS = {
'version': 0, # VersionProtectBaseModel field 'version': 0, # VersionProtectBaseModel field
'kind': 'kind', 'kind': 'kind',
'name': 'name', 'name': 'name',
'itemimagemodel_set-TOTAL_FORMS': '0', 'itemimagemodel_set-TOTAL_FORMS': '0',
'itemimagemodel_set-INITIAL_FORMS': '0', 'itemimagemodel_set-INITIAL_FORMS': '0',
'itemimagemodel_set-MIN_NUM_FORMS': '0', 'itemimagemodel_set-MIN_NUM_FORMS': '0',
@ -55,27 +54,22 @@ class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
fetch_redirect_response=False fetch_redirect_response=False
) )
response = self.client.get( response = self.client.get(path='/admin/inventory/itemmodel/add/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
path='/admin/inventory/itemmodel/add/',
secure=True,
HTTP_ACCEPT_LANGUAGE='en'
)
self.assertRedirects( self.assertRedirects(
response, response, expected_url='/admin/login/?next=/admin/inventory/itemmodel/add/', fetch_redirect_response=False
expected_url='/admin/login/?next=/admin/inventory/itemmodel/add/',
fetch_redirect_response=False
) )
with mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'): with mock.patch.object(
response = self.client.get( CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
path='/admin/login/', ), MockInventoryVersionString():
secure=True, response = self.client.get(path='/admin/login/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
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) assert_html_response_snapshot(response, validate=False)
@ -87,16 +81,16 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
def test_normal_user_create_minimal_item(self): def test_normal_user_create_minimal_item(self):
offset = datetime.timedelta(minutes=1) offset = datetime.timedelta(minutes=1)
with mock.patch.object(timezone, 'now', MockDatetimeGenerator(offset=offset)),\ with mock.patch.object(timezone, 'now', MockDatetimeGenerator(offset=offset)), mock.patch.object(
mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), \ NowNode, 'render', return_value='MockedNowNode'
mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'): ), mock.patch.object(
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
), MockInventoryVersionString():
self.client.force_login(self.normaluser) self.client.force_login(self.normaluser)
response = self.client.get('/admin/inventory/itemmodel/add/') response = self.client.get('/admin/inventory/itemmodel/add/')
assert response.status_code == 200 assert response.status_code == 200
self.assert_html_parts(response, parts=( self.assert_html_parts(response, parts=('<title>Add Item | PyInventory vMockedVersionString</title>',))
f'<title>Add Item | PyInventory v{__version__}</title>',
))
assert_html_response_snapshot(response=response, validate=False) assert_html_response_snapshot(response=response, validate=False)
assert ItemModel.objects.count() == 0 assert ItemModel.objects.count() == 0
@ -133,11 +127,14 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
path=f'/admin/inventory/itemmodel/{item.pk}/change/', path=f'/admin/inventory/itemmodel/{item.pk}/change/',
data=post_data, data=post_data,
) )
self.assert_html_parts(response, parts=( self.assert_html_parts(
f'<title>Change Item | PyInventory v{__version__}</title>', response,
'<li>Version error: Overwrite version 2 with 1 is forbidden!</li>', parts=(
'<pre>- &quot;name&quot;\n+ &quot;A new Name!&quot;</pre>' '<title>Change Item | PyInventory vMockedVersionString</title>',
)) '<li>Version error: Overwrite version 2 with 1 is forbidden!</li>',
'<pre>- &quot;name&quot;\n+ &quot;A new Name!&quot;</pre>',
),
)
html = response.content.decode('utf-8') html = response.content.decode('utf-8')
html = html.replace(str(item.pk), '<removed-UUID>') html = html.replace(str(item.pk), '<removed-UUID>')
assert_html_snapshot(got=html, validate=False) 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( with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode' CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
): ), MockInventoryVersionString():
response = self.client.get( response = self.client.get(
path='/admin/inventory/itemmodel/', path='/admin/inventory/itemmodel/',
) )
@ -225,7 +222,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
self.assert_html_parts( self.assert_html_parts(
response, response,
parts=( 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/">' '<a href="/admin/inventory/itemmodel/00000000-0001-0000-0000-000000000000/change/">'
'<strong>main item 1</strong></a>', '<strong>main item 1</strong></a>',
'<a href="/admin/inventory/itemmodel/00000000-0001-0001-0000-000000000000/change/">' '<a href="/admin/inventory/itemmodel/00000000-0001-0001-0000-000000000000/change/">'

Wyświetl plik

@ -2,7 +2,7 @@
<html dir="ltr" lang="en"> <html dir="ltr" lang="en">
<head> <head>
<title> <title>
Change Item | PyInventory v0.18.1 Change Item | PyInventory vMockedVersionString
</title> </title>
<link href="/static/admin/css/base.css" rel="stylesheet"/> <link href="/static/admin/css/base.css" rel="stylesheet"/>
<link href="/static/admin/css/dark_mode.css" rel="stylesheet"/> <link href="/static/admin/css/dark_mode.css" rel="stylesheet"/>
@ -77,7 +77,7 @@
<div id="branding"> <div id="branding">
<h1 id="site-name"> <h1 id="site-name">
<a href="/admin/"> <a href="/admin/">
PyInventory v0.18.1 PyInventory vMockedVersionString
</a> </a>
</h1> </h1>
</div> </div>

Wyświetl plik

@ -8,9 +8,9 @@ from django_tools.unittest_utils.mockup import ImageDummy
from model_bakery import baker from model_bakery import baker
from reversion.models import Revision from reversion.models import Revision
from inventory import __version__
from inventory.models import MemoImageModel, MemoModel from inventory.models import MemoImageModel, MemoModel
from inventory.permissions import get_or_create_normal_user_group from inventory.permissions import get_or_create_normal_user_group
from inventory_project.tests.mocks import MockInventoryVersionString
class AdminAnonymousTests(TestCase): class AdminAnonymousTests(TestCase):
@ -42,13 +42,12 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
def test_normal_user_create_minimal_item(self): def test_normal_user_create_minimal_item(self):
self.client.force_login(self.normaluser) self.client.force_login(self.normaluser)
with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), \ with mock.patch.object(NowNode, 'render', return_value='MockedNowNode'), mock.patch.object(
mock.patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'): CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
), MockInventoryVersionString():
response = self.client.get('/admin/inventory/memomodel/add/') response = self.client.get('/admin/inventory/memomodel/add/')
assert response.status_code == 200 assert response.status_code == 200
self.assert_html_parts(response, parts=( self.assert_html_parts(response, parts=('<title>Add Memo | PyInventory vMockedVersionString</title>',))
f'<title>Add Memo | PyInventory v{__version__}</title>',
))
assert_html_response_snapshot(response=response, validate=False) assert_html_response_snapshot(response=response, validate=False)
assert MemoModel.objects.count() == 0 assert MemoModel.objects.count() == 0