mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
Added first example to plugin unit test (#8636)
* Start documentation chapter for plugin tests * Added env variables to the doc * Fix style errors * Further style bugs * Reformat environment variables * Reformat environment variables * Add comments from wolflu05 * Add text to the intro * Added first example the plugin unit test * Addred line it function * Typo * Typo * Typo
This commit is contained in:
parent
64dc5659bc
commit
5aae93e635
81
docs/docs/extend/plugins/test.md
Normal file
81
docs/docs/extend/plugins/test.md
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
---
|
||||||
|
Title: Unit Tests
|
||||||
|
---
|
||||||
|
|
||||||
|
## Unit Tests
|
||||||
|
For complicated plugins it makes sense to add unit tests the code to ensure
|
||||||
|
that plugins work correctly and are compatible with future versions too.
|
||||||
|
You can run these tests as part of your ci against the current stable and
|
||||||
|
latest tag to get notified when something breaks before it gets released as
|
||||||
|
part of stable. InvenTree offers a framework for testing. Please refer
|
||||||
|
to [Unit Tests](../../develop/contributing.md) for more information.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
For plugin testing the following environment variables must be set to True:
|
||||||
|
|
||||||
|
| Name | Function | Value |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| INVENTREE_PLUGINS_ENABLED | Enables the use of 3rd party plugins | True |
|
||||||
|
| INVENTREE_PLUGIN_TESTING | Enables enables all plugins no matter of their active state in the db or built-in flag | True |
|
||||||
|
| INVENTREE_PLUGIN_TESTING_SETUP | Enables the url mixin | True |
|
||||||
|
|
||||||
|
### Test program
|
||||||
|
|
||||||
|
A file called test_plugin_name.py should be added to the plugin directory. It can have the
|
||||||
|
following structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Basic unit tests for the plugin
|
||||||
|
from InvenTree.unit_test import InvenTreeTestCase
|
||||||
|
|
||||||
|
class TestMyPlugin(InvenTreeTestCase):
|
||||||
|
def test_my_function(self):
|
||||||
|
do some work here...
|
||||||
|
```
|
||||||
|
|
||||||
|
The test can be executed using invoke:
|
||||||
|
|
||||||
|
```
|
||||||
|
invoke dev.test -r module.file.class
|
||||||
|
```
|
||||||
|
|
||||||
|
Plugins are usually installed outside of the InventTree directory, e.g. in .local/lib/...
|
||||||
|
I that case module must be omitted.
|
||||||
|
|
||||||
|
```
|
||||||
|
invoke dev.test -r plugin_directory.test_plugin_name.TestMyPlugin
|
||||||
|
```
|
||||||
|
|
||||||
|
### do some work here... A simple Example
|
||||||
|
A simple example is shown here. Assume the plugin has a function that converts a price string
|
||||||
|
that comes from a supplier API to a float value. The price might have the form "1.456,34 €".
|
||||||
|
It can be different based on country and local settings.
|
||||||
|
The function in the plugin will convert it to a float 1456.34. It is in the class MySupplier
|
||||||
|
and has the following structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
class MySupplier():
|
||||||
|
|
||||||
|
def reformat_price(self, string_price):
|
||||||
|
|
||||||
|
...
|
||||||
|
return float_price
|
||||||
|
```
|
||||||
|
|
||||||
|
This function needs to be tested. The test can look like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
from .myplugin import MySupplier
|
||||||
|
|
||||||
|
def test_reformat_price(self):
|
||||||
|
|
||||||
|
self.assertEqual(MySupplier.reformat_price(self, '1.456,34 €'), 1456.34)
|
||||||
|
self.assertEqual(MySupplier.reformat_price(self, '1,45645 €'), 1.45645)
|
||||||
|
self.assertEqual(MySupplier.reformat_price(self, '1,56 $'), 1.56)
|
||||||
|
self.assertEqual(MySupplier.reformat_price(self, ''), 0)
|
||||||
|
self.assertEqual(MySupplier.reformat_price(self, 'Mumpitz'), 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
The function assertEqual flags an error in case the two arguments are not equal. In equal case
|
||||||
|
no error is flagged and the test passes. The test function tests five different
|
||||||
|
input variations. More might be added based on the requirements.
|
@ -199,6 +199,7 @@ nav:
|
|||||||
- Developing a Plugin: extend/how_to_plugin.md
|
- Developing a Plugin: extend/how_to_plugin.md
|
||||||
- Model Metadata: extend/plugins/metadata.md
|
- Model Metadata: extend/plugins/metadata.md
|
||||||
- Tags: extend/plugins/tags.md
|
- Tags: extend/plugins/tags.md
|
||||||
|
- Unit Test: extend/plugins/test.md
|
||||||
- Plugin Mixins:
|
- Plugin Mixins:
|
||||||
- Action Mixin: extend/plugins/action.md
|
- Action Mixin: extend/plugins/action.md
|
||||||
- API Mixin: extend/plugins/api.md
|
- API Mixin: extend/plugins/api.md
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user