Merge pull request #398 from eReuse/bugfix/4028-placeholder-in-new-components
Bugfix/4028 placeholder in new components
This commit is contained in:
commit
3d658a9051
|
@ -310,7 +310,25 @@ class Sync:
|
||||||
def create_placeholder(device: Device):
|
def create_placeholder(device: Device):
|
||||||
"""If the device is new, we need create automaticaly a new placeholder"""
|
"""If the device is new, we need create automaticaly a new placeholder"""
|
||||||
if device.binding:
|
if device.binding:
|
||||||
|
for c in device.components:
|
||||||
|
if c.phid():
|
||||||
|
continue
|
||||||
|
c_dict = copy.copy(c.__dict__)
|
||||||
|
c_dict.pop('_sa_instance_state')
|
||||||
|
c_dict.pop('id', None)
|
||||||
|
c_dict.pop('devicehub_id', None)
|
||||||
|
c_dict.pop('actions_multiple', None)
|
||||||
|
c_dict.pop('actions_one', None)
|
||||||
|
c_placeholder = c.__class__(**c_dict)
|
||||||
|
c_placeholder.parent = c.parent.binding.device
|
||||||
|
c.parent = device
|
||||||
|
component_placeholder = Placeholder(
|
||||||
|
device=c_placeholder, binding=c, is_abstract=True
|
||||||
|
)
|
||||||
|
db.session.add(c_placeholder)
|
||||||
|
db.session.add(component_placeholder)
|
||||||
return
|
return
|
||||||
|
|
||||||
dict_device = copy.copy(device.__dict__)
|
dict_device = copy.copy(device.__dict__)
|
||||||
dict_device.pop('_sa_instance_state')
|
dict_device.pop('_sa_instance_state')
|
||||||
dict_device.pop('id', None)
|
dict_device.pop('id', None)
|
||||||
|
|
|
@ -30,6 +30,9 @@ def clone_device(device):
|
||||||
new_device.devicehub_id = old_devicehub_id
|
new_device.devicehub_id = old_devicehub_id
|
||||||
device.devicehub_id = None
|
device.devicehub_id = None
|
||||||
new_device.owner = device.owner
|
new_device.owner = device.owner
|
||||||
|
if device.parent and device.parent.binding:
|
||||||
|
new_device.parent = device.parent.binding.device
|
||||||
|
|
||||||
db.session.add(new_device)
|
db.session.add(new_device)
|
||||||
|
|
||||||
placeholder = Placeholder(
|
placeholder = Placeholder(
|
||||||
|
|
|
@ -1380,3 +1380,35 @@ def test_system_uuid_motherboard(user: UserClient):
|
||||||
snap2, _ = user.post(s, res=Snapshot, status=422)
|
snap2, _ = user.post(s, res=Snapshot, status=422)
|
||||||
txt = "We have detected that a there is a device in your inventory"
|
txt = "We have detected that a there is a device in your inventory"
|
||||||
assert txt in snap2['message'][0]
|
assert txt in snap2['message'][0]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.mvp
|
||||||
|
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
||||||
|
def test_bug_4028_components(user: UserClient):
|
||||||
|
"""Tests when we have one computer and then we change the disk, then
|
||||||
|
the new disk need to have placeholder too."""
|
||||||
|
s = yaml2json('real-eee-1001pxd.snapshot.12')
|
||||||
|
snap1, _ = user.post(s, res=Snapshot)
|
||||||
|
dev1 = m.Device.query.filter_by(id=snap1['device']['id']).one()
|
||||||
|
assert m.Placeholder.query.count() * 2 == m.Device.query.count()
|
||||||
|
components1 = [c for c in dev1.components]
|
||||||
|
for c in s['components']:
|
||||||
|
if c['type'] == 'HardDrive':
|
||||||
|
c['serialNumber'] = 'E2024242CV86MF'
|
||||||
|
|
||||||
|
s['uuid'] = str(uuid4())
|
||||||
|
snap2, _ = user.post(s, res=Snapshot)
|
||||||
|
dev2 = m.Device.query.filter_by(id=snap2['device']['id']).one()
|
||||||
|
components2 = [c for c in dev2.components]
|
||||||
|
|
||||||
|
assert '' not in [c.phid() for c in components1]
|
||||||
|
assert '' not in [c.phid() for c in components2]
|
||||||
|
assert len(components1) == len(components2)
|
||||||
|
assert m.Placeholder.query.count() == 16
|
||||||
|
assert m.Placeholder.query.count() * 2 == m.Device.query.count()
|
||||||
|
for c in m.Placeholder.query.filter():
|
||||||
|
assert c.binding
|
||||||
|
assert c.device
|
||||||
|
|
||||||
|
for c in m.Device.query.filter():
|
||||||
|
assert c.binding or c.placeholder
|
||||||
|
|
Reference in New Issue