Merge pull request #187 from eReuse/feature/no-remove-components
Feature/no remove components
This commit is contained in:
commit
96d5da3f3a
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
@ -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
|
||||||
|
|
Reference in New Issue