import pytest import math from src.calculation_target_reliability.service import calculate_asset_eaf_contributions def test_calculate_asset_eaf_contributions_basic(): # Mock plant result plant_result = { "total_uptime": 7000, "total_downtime": 1000, "eaf": 85.0 } # total_hours = 8000 # Mock equipment results eq_results = [ { "aeros_node": {"node_name": "Asset1"}, "num_events": 5, "contribution_factor": 0.5, "contribution": 0.1, # Birnbaum "availability": 0.9, "total_downtime": 100 }, { "aeros_node": {"node_name": "Asset2"}, "num_events": 2, "contribution_factor": 0.3, "contribution": 0.05, "availability": 0.95, "total_downtime": 50 } ] standard_scope = ["Asset1", "Asset2"] eaf_gap = 2.0 # 2% gap scheduled_outage = 500 results = calculate_asset_eaf_contributions( plant_result, eq_results, standard_scope, eaf_gap, scheduled_outage ) assert len(results) == 2 # Check sorting (highest birnbaum first) assert results[0].node["node_name"] == "Asset1" assert results[0].birbaum > results[1].birbaum # Check that required_improvement is positive assert results[0].required_improvement > 0 assert results[0].improvement_impact > 0 def test_calculate_asset_eaf_contributions_skipping(): plant_result = {"total_uptime": 1000, "total_downtime": 0, "eaf": 100} eq_results = [{ "aeros_node": {"node_name": "Asset1"}, "num_events": 0, "contribution_factor": 0.5, "contribution": 0.1, "availability": 1.0, "total_downtime": 0 }] results = calculate_asset_eaf_contributions( plant_result, eq_results, ["Asset1"], 1.0, 0 ) assert len(results) == 0