diff --git a/ereuse_devicehub/inventory/forms.py b/ereuse_devicehub/inventory/forms.py index 25dcba02..69f0b4ba 100644 --- a/ereuse_devicehub/inventory/forms.py +++ b/ereuse_devicehub/inventory/forms.py @@ -86,12 +86,18 @@ DEVICES = { "Smartphone", "Cellphone", ], + "Drives & Storage": [ + "All DataStorage", + "HardDrives", + "SolidStageDrive", + ], } COMPUTERS = ['Desktop', 'Laptop', 'Server', 'Computer'] MONITORS = ["ComputerMonitor", "Monitor", "TelevisionSet", "Projector"] MOBILE = ["Mobile", "Tablet", "Smartphone", "Cellphone"] +STORAGE = ["HardDrive", "SolidStateDrive"] class AdvancedSearchForm(FlaskForm): @@ -175,9 +181,16 @@ class FilterForm(FlaskForm): elif "All Mobile" == self.device_type: filter_type = MOBILE + elif "All DataStorage" == self.device_type: + filter_type = STORAGE + if filter_type: self.devices = self.devices.filter(Device.type.in_(filter_type)) + # if self.device_type in STORAGE + ["All DataStorage"]: + # import pdb; pdb.set_trace() + # self.devices = self.devices.filter(Component.parent_id.is_(None)) + return self.devices.order_by(Device.updated.desc()) diff --git a/ereuse_devicehub/templates/inventory/device_list.html b/ereuse_devicehub/templates/inventory/device_list.html index 2132f7c7..22686f84 100644 --- a/ereuse_devicehub/templates/inventory/device_list.html +++ b/ereuse_devicehub/templates/inventory/device_list.html @@ -357,6 +357,7 @@ {% for dev in devices %} + {% if not dev.parent_id or dev.parent.placeholder.kangaroo %} + {% endif %} {% endfor %} diff --git a/tests/test_basic.py b/tests/test_basic.py index 43c93d3c..3d7a0ad8 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -105,6 +105,7 @@ def test_api_docs(client: Client): '/users/logout/', '/versions/', '/workbench/', + '/workbench/erasure_host/{id}/', } assert docs['info'] == {'title': 'Devicehub', 'version': '0.2'} assert docs['components']['securitySchemes']['bearerAuth'] == { diff --git a/tests/test_render_2_0.py b/tests/test_render_2_0.py index 27672c01..2dcd7100 100644 --- a/tests/test_render_2_0.py +++ b/tests/test_render_2_0.py @@ -2438,3 +2438,99 @@ def test_bug_3831_documents(user3: UserClientFlask): uri = f'/inventory/lot/{lot_id}/trade-document/add/' # body, status = user3.post(uri, data=data, content_type="multipart/form-data") # assert status == '200 OK' + + +@pytest.mark.mvp +@pytest.mark.usefixtures(conftest.app_context.__name__) +def test_hdd_filter(user3: UserClientFlask): + create_device(user3, 'real-eee-1001pxd.snapshot.12.json') + + hdds = Device.query.filter_by(type='HardDrive').all() + for hdd in hdds: + hdd.parent = None + db.session.commit() + + csrf = generate_csrf() + uri = f'/inventory/device/?filter=All+DataStorage&csrf_token={csrf}' + body, status = user3.get(uri) + + assert status == '200 OK' + for hdd in hdds: + assert hdd.dhid in body + + +@pytest.mark.mvp +@pytest.mark.usefixtures(conftest.app_context.__name__) +def test_add_kangaroo(user3: UserClientFlask): + create_device(user3, 'real-eee-1001pxd.snapshot.12.json') + + body, status = user3.get('/workbench/') + + assert status == '200 OK' + + pc = Device.query.filter_by(type='Laptop').first() + data = { + 'csrf_token': generate_csrf(), + 'phid': pc.phid(), + } + + body, status = user3.post('/workbench/', data=data) + assert status == '200 OK' + assert pc.phid() in body + + +@pytest.mark.mvp +@pytest.mark.usefixtures(conftest.app_context.__name__) +def test_drop_kangaroo(user3: UserClientFlask): + create_device(user3, 'real-eee-1001pxd.snapshot.12.json') + pc = Device.query.filter_by(type='Laptop').first() + phid = 'AAA' + pc.placeholder.phid = phid + db.session.commit() + + body, status = user3.get('/workbench/') + assert phid not in body + + data = { + 'csrf_token': generate_csrf(), + 'phid': phid, + } + + body, status = user3.post('/workbench/', data=data) + assert status == '200 OK' + assert phid in body + + placeholder_id = pc.placeholder.id + uri = f'/workbench/erasure_host/{placeholder_id}/' + body, status = user3.get(uri) + assert status == '200 OK' + assert phid not in body + + +@pytest.mark.mvp +@pytest.mark.usefixtures(conftest.app_context.__name__) +def test_filter_hdd_in_kangaroo(user3: UserClientFlask): + create_device(user3, 'real-eee-1001pxd.snapshot.12.json') + csrf = generate_csrf() + uri = f'/inventory/device/?filter=All+DataStorage&csrf_token={csrf}' + body, status = user3.get(uri) + + assert status == '200 OK' + for hdd in Device.query.filter_by(type='HardDrive').all(): + assert hdd.dhid not in body + + user3.get('/workbench/') + pc = Device.query.filter_by(type='Laptop').first() + data = { + 'csrf_token': generate_csrf(), + 'phid': pc.phid(), + } + user3.post('/workbench/', data=data) + + csrf = generate_csrf() + uri = f'/inventory/device/?filter=All+DataStorage&csrf_token={csrf}' + body, status = user3.get(uri) + + assert status == '200 OK' + for hdd in Device.query.filter_by(type='HardDrive').all(): + assert hdd.dhid in body