mirror of
https://github.com/inventree/InvenTree.git
synced 2025-05-03 05:48:47 +00:00
* Squashed commit of the following: commit f5cf7b2e7872fc19633321713965763d1890b495 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:36:57 2024 +0100 fixed reqs commit 9d845bee98befa4e53c2ac3c783bd704369e3ad2 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:32:35 2024 +0100 disable autofix/format commit aff5f271484c3500df7ddde043767c008ce4af21 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:28:50 2024 +0100 adjust checks commit 47271cf1efa848ec8374a0d83b5646d06fffa6e7 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:28:22 2024 +0100 reorder order of operations commit e1bf178b40b3f0d2d59ba92209156c43095959d2 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:01:09 2024 +0100 adapted ruff settings to better fit code base commit ad7d88a6f4f15c9552522131c4e207256fc2bbf6 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:59:45 2024 +0100 auto fixed docstring commit a2e54a760e17932dbbc2de0dec23906107f2cda9 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:46:35 2024 +0100 fix getattr useage commit cb80c73bc6c0be7f5d2ed3cc9b2ac03fdefd5c41 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:25:09 2024 +0100 fix requirements file commit b7780bbd21a32007f3b0ce495b519bf59bb19bf5 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:42:28 2024 +0100 fix removed sections commit 71f1681f55c15f62c16c1d7f30a745adc496db97 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:41:21 2024 +0100 fix djlint syntax commit a0bcf1bccef8a8ffd482f38e2063bc9066e1d759 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:35:28 2024 +0100 remove flake8 from code base commit 22475b31cc06919785be046e007915e43f356793 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:34:56 2024 +0100 remove flake8 from code base commit 0413350f14773ac6161473e0cfb069713c13c691 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:24:39 2024 +0100 moved ruff section commit d90c48a0bf98befdfacbbb093ee56cdb28afb40d Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:24:24 2024 +0100 move djlint config to pyproject commit c5ce55d5119bf2e35e429986f62f875c86178ae1 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:20:39 2024 +0100 added isort again commit 42a41d23afc280d4ee6f0e640148abc6f460f05a Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:19:02 2024 +0100 move config section commit 85692331816348cb1145570340d1f6488a8265cc Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:17:52 2024 +0100 fix codespell error commit 2897c6704d1311a800ce5aa47878d96d6980b377 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 17:29:21 2024 +0100 replaced flake8 with ruff mostly for speed improvements * enable autoformat * added autofixes * switched to single quotes everywhere * switched to ruff for import sorting * fix wrong url response * switched to pathlib for lookup * fixed lookup * Squashed commit of the following: commit d3b795824b5d6d1c0eda67150b45b5cd672b3f6b Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 22:56:17 2024 +0100 fixed source path commit 0bac0c19b88897a19d5c995e4ff50427718b827e Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 22:47:53 2024 +0100 fixed req commit 9f61f01d9cc01f1fb7123102f3658c890469b8ce Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 22:45:18 2024 +0100 added missing toml req commit 91b71ed24a6761b629768d0ad8829fec2819a966 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:49:50 2024 +0100 moved isort config commit 12460b04196b12d0272d40552402476d5492fea5 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:43:22 2024 +0100 remove flake8 section from setup.cfg commit f5cf7b2e7872fc19633321713965763d1890b495 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:36:57 2024 +0100 fixed reqs commit 9d845bee98befa4e53c2ac3c783bd704369e3ad2 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:32:35 2024 +0100 disable autofix/format commit aff5f271484c3500df7ddde043767c008ce4af21 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:28:50 2024 +0100 adjust checks commit 47271cf1efa848ec8374a0d83b5646d06fffa6e7 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:28:22 2024 +0100 reorder order of operations commit e1bf178b40b3f0d2d59ba92209156c43095959d2 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 20:01:09 2024 +0100 adapted ruff settings to better fit code base commit ad7d88a6f4f15c9552522131c4e207256fc2bbf6 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:59:45 2024 +0100 auto fixed docstring commit a2e54a760e17932dbbc2de0dec23906107f2cda9 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:46:35 2024 +0100 fix getattr useage commit cb80c73bc6c0be7f5d2ed3cc9b2ac03fdefd5c41 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 19:25:09 2024 +0100 fix requirements file commit b7780bbd21a32007f3b0ce495b519bf59bb19bf5 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:42:28 2024 +0100 fix removed sections commit 71f1681f55c15f62c16c1d7f30a745adc496db97 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:41:21 2024 +0100 fix djlint syntax commit a0bcf1bccef8a8ffd482f38e2063bc9066e1d759 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:35:28 2024 +0100 remove flake8 from code base commit 22475b31cc06919785be046e007915e43f356793 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:34:56 2024 +0100 remove flake8 from code base commit 0413350f14773ac6161473e0cfb069713c13c691 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:24:39 2024 +0100 moved ruff section commit d90c48a0bf98befdfacbbb093ee56cdb28afb40d Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:24:24 2024 +0100 move djlint config to pyproject commit c5ce55d5119bf2e35e429986f62f875c86178ae1 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:20:39 2024 +0100 added isort again commit 42a41d23afc280d4ee6f0e640148abc6f460f05a Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:19:02 2024 +0100 move config section commit 85692331816348cb1145570340d1f6488a8265cc Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 18:17:52 2024 +0100 fix codespell error commit 2897c6704d1311a800ce5aa47878d96d6980b377 Author: Matthias Mair <code@mjmair.com> Date: Sun Jan 7 17:29:21 2024 +0100 replaced flake8 with ruff mostly for speed improvements * fix coverage souce format --------- Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
171 lines
5.7 KiB
Python
171 lines
5.7 KiB
Python
"""Tests for basic notification methods and functions in InvenTree."""
|
|
|
|
import plugin.templatetags.plugin_extras as plugin_tags
|
|
from common.notifications import (
|
|
BulkNotificationMethod,
|
|
NotificationMethod,
|
|
SingleNotificationMethod,
|
|
storage,
|
|
)
|
|
from part.test_part import BaseNotificationIntegrationTest
|
|
from plugin.models import NotificationUserSetting
|
|
|
|
|
|
class BaseNotificationTests(BaseNotificationIntegrationTest):
|
|
"""Tests for basic NotificationMethod."""
|
|
|
|
def test_NotificationMethod(self):
|
|
"""Ensure the implementation requirements are tested."""
|
|
|
|
class FalseNotificationMethod(NotificationMethod):
|
|
METHOD_NAME = 'FalseNotification'
|
|
|
|
class AnotherFalseNotificationMethod(NotificationMethod):
|
|
METHOD_NAME = 'AnotherFalseNotification'
|
|
|
|
def send(self):
|
|
"""A comment so we do not need a pass."""
|
|
|
|
class NoNameNotificationMethod(NotificationMethod):
|
|
def send(self):
|
|
"""A comment so we do not need a pass."""
|
|
|
|
class WrongContextNotificationMethod(NotificationMethod):
|
|
METHOD_NAME = 'WrongContextNotification'
|
|
CONTEXT_EXTRA = ['aa', ('aa', 'bb'), ('templates', 'ccc'), (123,)]
|
|
|
|
def send(self):
|
|
"""A comment so we do not need a pass."""
|
|
|
|
# no send / send bulk
|
|
with self.assertRaises(NotImplementedError):
|
|
FalseNotificationMethod('', '', '', '')
|
|
|
|
# no METHOD_NAME
|
|
with self.assertRaises(NotImplementedError):
|
|
NoNameNotificationMethod('', '', '', '')
|
|
|
|
# a not existent context check
|
|
with self.assertRaises(NotImplementedError):
|
|
WrongContextNotificationMethod('', '', '', '')
|
|
|
|
# no get_targets
|
|
with self.assertRaises(NotImplementedError):
|
|
AnotherFalseNotificationMethod('', '', '', {'name': 1, 'message': 2})
|
|
|
|
def test_failing_passing(self):
|
|
"""Ensure that an error in one deliverymethod is not blocking all mehthods."""
|
|
# cover failing delivery
|
|
self._notification_run()
|
|
|
|
def test_errors_passing(self):
|
|
"""Ensure that errors do not kill the whole delivery."""
|
|
|
|
class ErrorImplementation(SingleNotificationMethod):
|
|
METHOD_NAME = 'ErrorImplementation'
|
|
|
|
def get_targets(self):
|
|
return [1]
|
|
|
|
def send(self, target):
|
|
raise KeyError('This could be any error')
|
|
|
|
self._notification_run(ErrorImplementation)
|
|
|
|
|
|
class BulkNotificationMethodTests(BaseNotificationIntegrationTest):
|
|
"""Tests for BulkNotificationMethod classes specifically.
|
|
|
|
General tests for NotificationMethods are in BaseNotificationTests.
|
|
"""
|
|
|
|
def test_BulkNotificationMethod(self):
|
|
"""Ensure the implementation requirements are tested.
|
|
|
|
MixinNotImplementedError needs to raise if the send_bulk() method is not set.
|
|
"""
|
|
|
|
class WrongImplementation(BulkNotificationMethod):
|
|
METHOD_NAME = 'WrongImplementationBulk'
|
|
|
|
def get_targets(self):
|
|
return [1]
|
|
|
|
with self.assertLogs(logger='inventree', level='ERROR'):
|
|
self._notification_run(WrongImplementation)
|
|
|
|
|
|
class SingleNotificationMethodTests(BaseNotificationIntegrationTest):
|
|
"""Tests for SingleNotificationMethod classes specifically.
|
|
|
|
General tests for NotificationMethods are in BaseNotificationTests.
|
|
"""
|
|
|
|
def test_SingleNotificationMethod(self):
|
|
"""Ensure the implementation requirements are tested.
|
|
|
|
MixinNotImplementedError needs to raise if the send() method is not set.
|
|
"""
|
|
|
|
class WrongImplementation(SingleNotificationMethod):
|
|
METHOD_NAME = 'WrongImplementationSingle'
|
|
|
|
def get_targets(self):
|
|
return [1]
|
|
|
|
with self.assertLogs(logger='inventree', level='ERROR'):
|
|
self._notification_run(WrongImplementation)
|
|
|
|
|
|
# A integration test for notifications is provided in test_part.PartNotificationTest
|
|
|
|
|
|
class NotificationUserSettingTests(BaseNotificationIntegrationTest):
|
|
"""Tests for NotificationUserSetting."""
|
|
|
|
def setUp(self):
|
|
"""Setup for all tests."""
|
|
super().setUp()
|
|
self.client.login(username=self.user.username, password='password')
|
|
|
|
def test_setting_attributes(self):
|
|
"""Check notification method plugin methods: usersettings and tags."""
|
|
|
|
class SampleImplementation(BulkNotificationMethod):
|
|
METHOD_NAME = 'test'
|
|
GLOBAL_SETTING = 'ENABLE_NOTIFICATION_TEST'
|
|
USER_SETTING = {
|
|
'name': 'Enable test notifications',
|
|
'description': 'Allow sending of test for event notifications',
|
|
'default': True,
|
|
'validator': bool,
|
|
'units': 'alpha',
|
|
}
|
|
|
|
def get_targets(self):
|
|
return [1]
|
|
|
|
def send_bulk(self):
|
|
return True
|
|
|
|
# run through notification
|
|
self._notification_run(SampleImplementation)
|
|
# make sure the array fits
|
|
array = storage.get_usersettings(self.user)
|
|
setting = NotificationUserSetting.objects.all().first()
|
|
|
|
# assertions for settings
|
|
self.assertEqual(setting.name, 'Enable test notifications')
|
|
self.assertEqual(setting.default_value, True)
|
|
self.assertEqual(
|
|
setting.description, 'Allow sending of test for event notifications'
|
|
)
|
|
self.assertEqual(setting.units, 'alpha')
|
|
|
|
# test tag and array
|
|
self.assertEqual(
|
|
plugin_tags.notification_settings_list({'user': self.user}), array
|
|
)
|
|
self.assertEqual(array[0]['key'], 'NOTIFICATION_METHOD_TEST')
|
|
self.assertEqual(array[0]['method'], 'test')
|