From 09987ad79bff2fead96902955012c5148df78d98 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 21 Jul 2022 03:33:21 +0200 Subject: [PATCH 1/2] Remove special characters restriction in category names (#3370) * [FR]Special characters restriction in category names Fixes #3358 * remove old validation test --- InvenTree/InvenTree/models.py | 2 -- InvenTree/InvenTree/validators.py | 5 +---- .../migrations/0081_alter_partcategory_name.py | 18 ++++++++++++++++++ InvenTree/part/test_category.py | 14 -------------- .../0079_alter_stocklocation_name.py | 18 ++++++++++++++++++ 5 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 InvenTree/part/migrations/0081_alter_partcategory_name.py create mode 100644 InvenTree/stock/migrations/0079_alter_stocklocation_name.py diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py index 740671f1dd..889eea0176 100644 --- a/InvenTree/InvenTree/models.py +++ b/InvenTree/InvenTree/models.py @@ -24,7 +24,6 @@ import InvenTree.format import InvenTree.helpers from common.models import InvenTreeSetting from InvenTree.fields import InvenTreeURLField -from InvenTree.validators import validate_tree_name logger = logging.getLogger('inventree') @@ -538,7 +537,6 @@ class InvenTreeTree(MPTTModel): name = models.CharField( blank=False, max_length=100, - validators=[validate_tree_name], verbose_name=_("Name"), help_text=_("Name"), ) diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 46b02ca506..ecc624d966 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -80,10 +80,7 @@ def validate_sales_order_reference(value): def validate_tree_name(value): - """Prevent illegal characters in tree item names.""" - for c in "!@#$%^&*'\"\\/[]{}<>,|+=~`\"": # noqa: P103 - if c in str(value): - raise ValidationError(_('Illegal character in name ({x})'.format(x=c))) + """Placeholder for legacy function used in migrations.""" def validate_overage(value): diff --git a/InvenTree/part/migrations/0081_alter_partcategory_name.py b/InvenTree/part/migrations/0081_alter_partcategory_name.py new file mode 100644 index 0000000000..d91912980b --- /dev/null +++ b/InvenTree/part/migrations/0081_alter_partcategory_name.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.14 on 2022-07-20 16:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0080_alter_part_image'), + ] + + operations = [ + migrations.AlterField( + model_name='partcategory', + name='name', + field=models.CharField(help_text='Name', max_length=100, verbose_name='Name'), + ), + ] diff --git a/InvenTree/part/test_category.py b/InvenTree/part/test_category.py index 267e9a9733..d15154b66a 100644 --- a/InvenTree/part/test_category.py +++ b/InvenTree/part/test_category.py @@ -1,6 +1,5 @@ """Unit tests for the PartCategory model""" -from django.core.exceptions import ValidationError from django.test import TestCase from .models import Part, PartCategory, PartParameter, PartParameterTemplate @@ -109,19 +108,6 @@ class CategoryTest(TestCase): part_parameter.pop(item) self.assertEqual(len(part_parameter), 1) - def test_invalid_name(self): - """Test that an illegal character is prohibited in a category name""" - cat = PartCategory(name='test/with/illegal/chars', description='Test category', parent=None) - - with self.assertRaises(ValidationError) as err: - cat.full_clean() - cat.save() # pragma: no cover - - self.assertIn('Illegal character in name', str(err.exception.error_dict.get('name'))) - - cat.name = 'good name' - cat.save() - def test_delete(self): """Test that category deletion moves the children properly.""" # Delete the 'IC' category and 'Transceiver' should move to be under 'Electronics' diff --git a/InvenTree/stock/migrations/0079_alter_stocklocation_name.py b/InvenTree/stock/migrations/0079_alter_stocklocation_name.py new file mode 100644 index 0000000000..70f930b21c --- /dev/null +++ b/InvenTree/stock/migrations/0079_alter_stocklocation_name.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.14 on 2022-07-20 16:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0078_alter_stockitem_supplier_part'), + ] + + operations = [ + migrations.AlterField( + model_name='stocklocation', + name='name', + field=models.CharField(help_text='Name', max_length=100, verbose_name='Name'), + ), + ] From 864d69d968a7832aec7c8056feaa80aa99738730 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 21 Jul 2022 03:41:42 +0200 Subject: [PATCH 2/2] Add test command (#3372) * integrate test loading as task - use with gitpod * ignore test data with git --- .gitignore | 1 + .gitpod.yml | 16 ++++------------ tasks.py | 13 +++++++++++++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 9c9a45d136..f55e48a348 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ docs/_build inventree_media inventree_static static_i18n +inventree-data # Local config file config.yaml diff --git a/.gitpod.yml b/.gitpod.yml index 1cc823a74f..4672cd7bd1 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -10,29 +10,21 @@ tasks: python3 -m venv venv source venv/bin/activate pip install invoke - inv install mkdir dev - inv update - gp sync-done setup_server + inv test-setup + gp sync-done start_server - name: Start server - init: gp sync-await setup_server + init: gp sync-await start_server command: | - gp sync-await setup_server + gp sync-await start_server export INVENTREE_DB_ENGINE='sqlite3' export INVENTREE_DB_NAME='/workspace/InvenTree/dev/database.sqlite3' export INVENTREE_MEDIA_ROOT='/workspace/InvenTree/inventree-data/media' export INVENTREE_STATIC_ROOT='/workspace/InvenTree/dev/static' - source venv/bin/activate - rm /workspace/InvenTree/inventree-data -r - git clone https://github.com/inventree/demo-dataset /workspace/InvenTree/inventree-data - invoke delete-data -f - invoke import-records -f /workspace/InvenTree/inventree-data/inventree_data.json - inv server -# List the ports to expose. Learn more https://www.gitpod.io/docs/config-ports/ ports: - port: 8000 onOpen: open-preview diff --git a/tasks.py b/tasks.py index 80a8180b3b..d8eac3b1c6 100644 --- a/tasks.py +++ b/tasks.py @@ -511,6 +511,19 @@ def test(c, database=None): manage(c, 'test', pty=True) +@task(pre=[update]) +def setup_test(c): + """Setup a testing enviroment.""" + # Remove old data directory + c.run('rm inventree-data -r') + + # Get test data + c.run('git clone https://github.com/inventree/demo-dataset inventree-data') + + # Load data + import_records(c, filename='inventree-data/inventree_data.json', clear=True) + + @task def coverage(c): """Run code-coverage of the InvenTree codebase, using the 'coverage' code-analysis tools.