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