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()