gmao/tests/integration/test_equipment_lifecycle_and_transfers.py
root 82c2683c4a
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
Gère le patrimoine mobile et son cycle de vie
2026-08-14 19:16:01 +00:00

93 lines
4.1 KiB
Python

from app_new import db
from app_new.core.models.college import Building, Room, Site
from app_new.core.models.equipment import Equipment, EquipmentQuantityMovement
from app_new.core.models.user import User
from app_new.equipments.main import complete_repair, move_to_room, start_repair
from flask_login import login_user
def _rooms(app):
with app.app_context():
building = Building(name='Bâtiment transfert')
db.session.add(building)
db.session.flush()
source = Room(name='Salle source', building_id=building.id)
target = Room(name='Salle cible', building_id=building.id)
db.session.add_all([source, target])
db.session.commit()
return source.id, target.id
def test_partial_group_transfer_updates_both_rooms(authenticated_client, app):
source_room_id, target_room_id = _rooms(app)
with app.app_context():
root = Equipment(name='Chaises', is_group=True, quantity=30, mobility='mobile')
db.session.add(root)
db.session.flush()
source = Equipment(
name='Chaises', parent_id=root.id, room_id=source_room_id,
is_group=True, quantity=10, mobility='mobile',
)
db.session.add(source)
db.session.commit()
source_id, root_id = source.id, root.id
assert db.session.get(Room, target_room_id) is not None
assert db.session.get(Equipment, source_id) is not None
admin = User.query.filter_by(role='admin').first()
with app.test_request_context(method='POST', data={'room_id': target_room_id, 'quantity': 4, 'reason': 'Réorganisation'}):
login_user(admin)
response = move_to_room.__wrapped__(source_id)
assert response.status_code == 302
with app.app_context():
source = db.session.get(Equipment, source_id)
target = Equipment.query.filter_by(parent_id=root_id, room_id=target_room_id).one()
movement = EquipmentQuantityMovement.query.filter_by(root_equipment_id=root_id).one()
assert source.quantity == 6
assert target.quantity == 4
assert movement.quantity == 4
def test_fixed_equipment_cannot_be_moved(authenticated_client, app):
source_room_id, target_room_id = _rooms(app)
with app.app_context():
equipment = Equipment(name='Luminaire fixe', room_id=source_room_id, mobility='fixe')
db.session.add(equipment)
db.session.commit()
equipment_id = equipment.id
admin = User.query.filter_by(role='admin').first()
with app.test_request_context(method='POST', data={'room_id': target_room_id}):
login_user(admin)
response = move_to_room.__wrapped__(equipment_id)
assert response.status_code == 302
with app.app_context():
assert db.session.get(Equipment, equipment_id).room_id == source_room_id
def test_repair_workflow(authenticated_client, app):
with app.app_context():
equipment = Equipment(name='Photocopieur', mobility='mobile')
db.session.add(equipment)
db.session.commit()
equipment_id = equipment.id
admin = User.query.filter_by(role='admin').first()
with app.test_request_context(method='POST'):
login_user(admin)
assert start_repair.__wrapped__(equipment_id).status_code == 302
assert db.session.get(Equipment, equipment_id).lifecycle_status == 'en_reparation'
with app.test_request_context(method='POST'):
login_user(admin)
assert complete_repair.__wrapped__(equipment_id).status_code == 302
equipment = db.session.get(Equipment, equipment_id)
assert equipment.lifecycle_status == 'en_service'
assert equipment.unavailable_since is None
def test_site_can_represent_staff_housing(authenticated_client, app):
response = authenticated_client.post('/equipments/buildings/sites', data={
'name': 'Logements de fonction', 'site_type': 'logements',
})
assert response.status_code == 302
with app.app_context():
assert Site.query.filter_by(name='Logements de fonction', site_type='logements').one()