Merge pull request #187 from eReuse/feature/no-remove-components

Feature/no remove components
This commit is contained in:
cayop 2021-11-26 14:49:46 +01:00 committed by GitHub
commit 96d5da3f3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 10 deletions

View File

@ -11,6 +11,9 @@ ml).
## testing ## testing
[1.0.12-beta] [1.0.12-beta]
## [1.0.12-beta]
- [changes] #187 now is possible duplicate slots of RAM.
## [1.0.11-beta] ## [1.0.11-beta]
- [addend] #186 adding property power_on_hours. - [addend] #186 adding property power_on_hours.

View File

@ -13,10 +13,19 @@ from teal.marshmallow import ValidationError
from ereuse_devicehub.db import db from ereuse_devicehub.db import db
from ereuse_devicehub.resources.action.models import Remove from ereuse_devicehub.resources.action.models import Remove
from ereuse_devicehub.resources.device.models import Component, Computer, Device from ereuse_devicehub.resources.device.models import Component, Computer, Device, DataStorage
from ereuse_devicehub.resources.tag.model import Tag from ereuse_devicehub.resources.tag.model import Tag
DEVICES_ALLOW_DUPLICITY = [
'RamModule',
'Display',
'SoundCard',
'Battery',
'Camera',
'GraphicCard',
]
class Sync: class Sync:
"""Synchronizes the device and components with the database.""" """Synchronizes the device and components with the database."""
@ -100,6 +109,13 @@ class Sync:
existed in the DB. existed in the DB.
""" """
assert inspect(component).transient, 'Component should not be synced from DB' assert inspect(component).transient, 'Component should not be synced from DB'
# if not is a DataStorage, then need build a new one
if component.t in DEVICES_ALLOW_DUPLICITY:
db.session.add(component)
is_new = True
return component, is_new
# if not, then continue with the traditional behaviour
try: try:
if component.hid: if component.hid:
db_component = Device.query.filter_by(hid=component.hid, owner_id=g.user.id).one() db_component = Device.query.filter_by(hid=component.hid, owner_id=g.user.id).one()

File diff suppressed because one or more lines are too long

View File

@ -187,11 +187,12 @@ def test_snapshot_component_add_remove(user: UserClient):
# (represented with their S/N) should be: # (represented with their S/N) should be:
# PC 1: p1c1s, p1c2s, p1c3s. PC 2: ø # PC 1: p1c1s, p1c2s, p1c3s. PC 2: ø
s1 = yaml2json('1-device-with-components.snapshot') s1 = yaml2json('1-device-with-components.snapshot')
snapshot1 = snapshot_and_check(user, snapshot1, _ = user.post(json_encode(s1), res=Snapshot)
s1, # snapshot1 = snapshot_and_check(user,
action_types=(BenchmarkProcessor.t, # s1,
RateComputer.t), # action_types=(BenchmarkProcessor.t,
perform_second_snapshot=False) # RateComputer.t),
# perform_second_snapshot=False)
pc1_id = snapshot1['device']['id'] pc1_id = snapshot1['device']['id']
pc1_devicehub_id = snapshot1['device']['devicehubID'] pc1_devicehub_id = snapshot1['device']['devicehubID']
pc1, _ = user.get(res=m.Device, item=pc1_devicehub_id) pc1, _ = user.get(res=m.Device, item=pc1_devicehub_id)
@ -213,8 +214,9 @@ def test_snapshot_component_add_remove(user: UserClient):
# Actions PC1: Snapshot, Remove. PC2: Snapshot # Actions PC1: Snapshot, Remove. PC2: Snapshot
s2 = yaml2json('2-second-device-with-components-of-first.snapshot') s2 = yaml2json('2-second-device-with-components-of-first.snapshot')
# num_actions = 2 = Remove, Add # num_actions = 2 = Remove, Add
snapshot2 = snapshot_and_check(user, s2, action_types=('Remove', 'RateComputer'), snapshot2, _ = user.post(json_encode(s2), res=Snapshot)
perform_second_snapshot=False) # snapshot2 = snapshot_and_check(user, s2, action_types=('Remove', 'RateComputer'),
# perform_second_snapshot=False)
pc2_id = snapshot2['device']['id'] pc2_id = snapshot2['device']['id']
pc2_devicehub_id = snapshot2['device']['devicehubID'] pc2_devicehub_id = snapshot2['device']['devicehubID']
pc1, _ = user.get(res=m.Device, item=pc1_devicehub_id) pc1, _ = user.get(res=m.Device, item=pc1_devicehub_id)
@ -399,6 +401,29 @@ def test_snapshot_component_containing_components(user: UserClient):
user.post(json_encode(s), res=Snapshot, status=ValidationError) user.post(json_encode(s), res=Snapshot, status=ValidationError)
@pytest.mark.usefixtures(conftest.app_context.__name__)
@pytest.mark.mvp
def test_ram_remove(user: UserClient):
"""Tests a Snapshot
We want check than all components is duplicate less hard disk, than this is removed.
"""
s = yaml2json('erase-sectors.snapshot')
s['device']['type'] = 'Server'
snap1, _ = user.post(json_encode(s), res=Snapshot)
s['uuid'] = '74caa7eb-2bad-4333-94f6-6f1b031d0774'
s['device']['serialNumber'] = 'pc2s'
snap2, _ = user.post(json_encode(s), res=Snapshot)
dev1 = m.Device.query.filter_by(id=snap1['device']['id']).one()
dev2 = m.Device.query.filter_by(id=snap2['device']['id']).one()
assert len(dev1.components) == 1
assert len(dev2.components) == 3
ssd = [x for x in dev2.components if x.t == 'SolidStateDrive'][0]
remove = [x for x in ssd.actions if x.t == 'Remove'][0]
assert remove.t == 'Remove'
@pytest.mark.mvp @pytest.mark.mvp
def test_ereuse_price(user: UserClient): def test_ereuse_price(user: UserClient):
"""Tests a Snapshot with EraseSectors and the resulting privacy """Tests a Snapshot with EraseSectors and the resulting privacy