def test_component_similar_one(): user = User.query.filter().first() snapshot = yaml2json('pc-components.db') pc = snapshot['device'] snapshot['components'][0]['serial_number'] = snapshot['components'][1][ 'serial_number'] = None pc = d.Desktop(**pc, components=OrderedSet( d.Component(**c) for c in snapshot['components'])) component1, component2 = pc.components # type: d.Component db.session.add(pc) db.session.flush() # Let's create a new component named 'A' similar to 1 componentA = d.Component(model=component1.model, manufacturer=component1.manufacturer, owner_id=user.id) similar_to_a = componentA.similar_one(pc, set()) assert similar_to_a == component1 # d.Component B does not have the same model componentB = d.Component(model='nope', manufacturer=component1.manufacturer) with pytest.raises(ResourceNotFound): assert componentB.similar_one(pc, set()) # If we blacklist component A we won't get anything with pytest.raises(ResourceNotFound): assert componentA.similar_one(pc, blacklist={componentA.id})
def test_add_remove(): # Original state: # pc has c1 and c2 # pc2 has c3 # c4 is not with any pc user = User.query.filter().first() values = yaml2json('pc-components.db') pc = values['device'] c1, c2 = (d.Component(**c) for c in values['components']) pc = d.Desktop(**pc, components=OrderedSet([c1, c2])) db.session.add(pc) c3 = d.Component(serial_number='nc1', owner_id=user.id) pc2 = d.Desktop(serial_number='s2', components=OrderedSet([c3]), chassis=ComputerChassis.Microtower) c4 = d.Component(serial_number='c4s', owner_id=user.id) db.session.add(pc2) db.session.add(c4) db.session.commit() # Test: # pc has only c3 actions = Sync.add_remove(device=pc, components={c3, c4}) db.session.add_all(actions) db.session.commit() # We enforce the appliance of order_by assert len(actions) == 1 assert isinstance(actions[0], Remove) assert actions[0].device == pc2 assert actions[0].components == OrderedSet([c3])
def test_add_remove(): # Original state: # pc has c1 and c2 # pc2 has c3 # c4 is not with any pc values = conftest.file('pc-components.db') pc = values['device'] c1, c2 = (d.Component(**c) for c in values['components']) pc = d.Desktop(**pc, components=OrderedSet([c1, c2])) db.session.add(pc) c3 = d.Component(serial_number='nc1') pc2 = d.Desktop(serial_number='s2', components=OrderedSet([c3]), chassis=ComputerChassis.Microtower) c4 = d.Component(serial_number='c4s') db.session.add(pc2) db.session.add(c4) db.session.commit() # Test: # pc has only c3 events = Sync.add_remove(device=pc, components={c3, c4}) db.session.add_all(events) db.session.commit() # We enforce the appliance of order_by assert len(events) == 1 assert isinstance(events[0], Remove) assert events[0].device == pc2 assert events[0].components == OrderedSet([c3])
def test_sync_run_components_none(): """Syncs a device that has a None components. The system should keep all the components from the device. """ s = yaml2json('pc-components.db') pc = d.Desktop(**s['device'], components=OrderedSet( d.Component(**c) for c in s['components'])) db.session.add(pc) db.session.commit() # Create a new transient non-db synced object transient_pc = d.Desktop(**s['device']) db_pc, _ = Sync().run(transient_pc, components=None) assert db_pc.components assert db_pc.components == pc.components
def test_sync_run_components_empty(): """Syncs a device that has an empty components list. The system should remove all the components from the device. """ s = yaml2json('pc-components.db') pc = d.Desktop(**s['device'], components=OrderedSet( d.Component(**c) for c in s['components'])) db.session.add(pc) db.session.commit() # Create a new transient non-db synced object pc = d.Desktop(**s['device']) db_pc, _ = Sync().run(pc, components=OrderedSet()) assert not db_pc.components assert not pc.components