Company Logo

Tripsales API — автотесты

⚙️ Test Configuration
Test Type:
Automated Test Suite
Execution Mode:
Sequential
Parallel Execution:
No
Retry Failed Tests:
No
Test Data Source:
Configuration Files
Reporting Format:
HTML
Screenshot on Failure:
Yes
Video Recording:
No
🌍 Environment Details
Python Version:
3.12.13
Pytest Version:
9.1.1
Platform:
Linux 5.15.0-139-generic (x86_64)
Test Runner:
Tripsales
Test Start Time:
2026-07-02 15:30:44
Total Duration:
42.87 seconds
Report Generated:
2026-07-02 15:30:44
📊 Test Execution Summary
📝 87
Total Tests
✅ 41
Passed
❌ 15
Failed
⏭️ 31
Skipped
🤖 AI Error Analysis
🎯
Pattern-Based Analysis
Analyzing 15 failed test(s)
Analysis: Error patterns detected in test failures. For AI-powered suggestions with OpenAI/Claude, configure API keys in your settings.
Quick Fix: Review the Error Analysis section below for detailed error classifications and suggested actions.
🔌 Enable AI Analysis: Set ai.enable_ai_analysis: true and configure ai.provider and ai.api_key in pytest_html_dashboard.yaml for enhanced AI insights.

🚨 ERROR ANALYSIS & INSIGHTS

🔴 tests/integration/test_api_rust_proxy_live.py::test_landing_token_live UNKNOWN

Error Type: AssertionError

Message: landing-token 502: '\r\n502 Bad Gateway\r\n\r\n

502 Bad Gateway

\r\n
nginx/1.31.1
\r\n\r\n\r\n' assert

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_intercity_door_goes_via_warehouse_not_fictitious_direct UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_near_city_direct_uses_plain_agent_door UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_far_to_near_city_routes_via_warehouse_hub UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_ftl_direct_door_is_real_agent_tariff UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_no_tariff_city_from_moscow_uses_moscow_as_hub UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/integration/test_planner_delivery_composition.py::test_no_tariff_city_far_routes_via_moscow UNKNOWN

Error Type: AssertionError

Message: нет ни одного валидного варианта assert []

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_get_orders_returns_list UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_get_trips_returns_list UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_order_not_found UNKNOWN

Error Type: AssertionError

Message: assert 502 == 404 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_trip_not_found UNKNOWN

Error Type: AssertionError

Message: assert 502 == 404 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_delete_order_idempotent UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_delete_trip_idempotent UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestInfra::test_goap_status UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

🔴 tests/trades/test_01_trades_smoke.py::TestInfra::test_auction_scheduler_status UNKNOWN

Error Type: AssertionError

Message: assert 502 == 200 + where 502 = .status_code

💡 Suggested Action: Review error message and stack trace, check logs for additional context

📊 COMPREHENSIVE TEST RESULTS

S.No Test Case Start Time End Time Duration Result Error Category Result Details
1 tests/flows/test_calculator_scenarios.py::test_only_last_mile 15:30:44 15:30:44 5.474s SKIPPED N/A
2 tests/flows/test_calculator_scenarios.py::test_only_highway 15:30:44 15:30:44 0.001s SKIPPED N/A
3 tests/flows/test_calculator_scenarios.py::test_intracity 15:30:44 15:30:44 0.001s SKIPPED N/A
4 tests/flows/test_calculator_scenarios.py::test_first_mile_with_highway 15:30:44 15:30:44 0.001s SKIPPED N/A
5 tests/flows/test_calculator_scenarios.py::test_highway_with_last_mile 15:30:44 15:30:44 0.001s SKIPPED N/A
6 tests/flows/test_calculator_scenarios.py::test_intercity_door_to_door_over_300km 15:30:44 15:30:44 0.000s SKIPPED N/A
7 tests/flows/test_calculator_scenarios.py::test_intercity_door_to_door_reverse_spb_to_moscow 15:30:44 15:30:44 0.000s SKIPPED N/A
8 tests/flows/test_calculator_scenarios.py::test_ftl_moscow_to_spb_oneway 15:30:44 15:30:44 0.000s SKIPPED N/A
9 tests/flows/test_calculator_scenarios.py::test_ftl_moscow_to_spb_roundtrip 15:30:44 15:30:44 0.000s SKIPPED N/A
10 tests/flows/test_calculator_scenarios.py::test_only_first_mile 15:30:44 15:30:44 0.000s SKIPPED N/A
11 tests/flows/test_calculator_scenarios.py::test_tariff_uses_volume_weight_when_it_exceeds_actual 15:30:44 15:30:44 0.000s SKIPPED N/A
12 tests/flows/test_user_flow.py::test_check_invalid_token 15:30:44 15:30:44 0.014s PASSED N/A
13 tests/flows/test_warehouse_handling_flow.py::test_warehouse_handling_not_copied_across_freights 15:30:44 15:30:44 5.638s SKIPPED N/A
14 tests/flows/test_warehouse_handling_flow.py::test_each_warehouse_has_its_own_handling 15:30:44 15:30:44 0.000s SKIPPED N/A
15 tests/integration/test_api_rust_proxy_live.py::test_search_cities_live 15:30:44 15:30:44 5.555s SKIPPED N/A
16 tests/integration/test_api_rust_proxy_live.py::test_search_freights_live 15:30:44 15:30:44 0.000s SKIPPED N/A
17 tests/integration/test_api_rust_proxy_live.py::test_get_city_live 15:30:44 15:30:44 0.000s SKIPPED N/A
18 tests/integration/test_api_rust_proxy_live.py::test_get_order_live 15:30:44 15:30:44 0.000s SKIPPED N/A
19 tests/integration/test_api_rust_proxy_live.py::test_get_trips_many_live 15:30:44 15:30:44 0.000s SKIPPED N/A
20 tests/integration/test_api_rust_proxy_live.py::test_landing_token_live 15:30:44 15:30:44 0.017s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:landing-token 502: '\r\n502 Bad Gateway\r\n\r\n

502 Bad Gateway

\r\n
nginx/1.31.1
\r\n\r\n\r\n' assert
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
21 tests/integration/test_api_rust_proxy_live.py::test_incidents_list_live 15:30:44 15:30:44 0.000s SKIPPED N/A
22 tests/integration/test_api_rust_proxy_live.py::test_vrt_health_live 15:30:44 15:30:44 0.000s SKIPPED N/A
23 tests/integration/test_order_full_flow.py::test_order_full_flow_with_attributes 15:30:44 15:30:44 5.134s SKIPPED N/A
24 tests/integration/test_planner_delivery_composition.py::test_intercity_door_goes_via_warehouse_not_fictitious_direct 15:30:44 15:30:44 0.054s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
25 tests/integration/test_planner_delivery_composition.py::test_near_city_direct_uses_plain_agent_door 15:30:44 15:30:44 0.010s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
26 tests/integration/test_planner_delivery_composition.py::test_far_to_near_city_routes_via_warehouse_hub 15:30:44 15:30:44 0.014s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
27 tests/integration/test_planner_delivery_composition.py::test_ftl_direct_door_is_real_agent_tariff 15:30:44 15:30:44 0.021s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
28 tests/integration/test_planner_delivery_composition.py::test_no_tariff_city_from_moscow_uses_moscow_as_hub 15:30:44 15:30:44 0.011s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
29 tests/integration/test_planner_delivery_composition.py::test_no_tariff_city_far_routes_via_moscow 15:30:44 15:30:44 0.007s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:нет ни одного валидного варианта assert []
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
30 tests/integration/test_planner_discount_live.py::test_service_discount_recalculates_calculation 15:30:44 15:30:44 0.006s SKIPPED N/A
31 tests/integration/test_planner_discount_live.py::test_zero_discount_target_not_found_is_404 15:30:44 15:30:44 0.005s SKIPPED N/A
32 tests/integration/test_schedule_overlap_live.py::test_schedule_overlap_two_trips 15:30:44 15:30:44 5.348s SKIPPED N/A
33 tests/integration/test_vrt_goap_live.py::test_vrt_goap_plan_self_contained 15:30:44 15:30:44 4.857s SKIPPED N/A
34 tests/integration/test_works_live.py::test_works_save_and_by_owner 15:30:44 15:30:44 4.875s SKIPPED N/A
35 tests/integration/test_works_live.py::test_works_save_replaces_not_appends 15:30:44 15:30:44 0.000s SKIPPED N/A
36 tests/integration/test_works_live.py::test_by_owner_unknown_owner_empty 15:30:44 15:30:44 0.000s SKIPPED N/A
37 tests/integration/test_works_live.py::test_work_state_set_get_and_idempotent 15:30:44 15:30:44 0.000s SKIPPED N/A
38 tests/integration/test_wpt_process_live.py::test_wpt_pdf_create_quotes_live 15:30:44 15:30:44 5.687s SKIPPED N/A
39 tests/integration/test_wpt_process_live.py::test_wpt_generate_documents_trip_live 15:30:44 15:30:44 0.001s SKIPPED N/A
40 tests/trades/test_01_trades_smoke.py::TestRouteTariff::test_get_all_returns_list 15:30:44 15:30:44 0.027s PASSED N/A
41 tests/trades/test_01_trades_smoke.py::TestRouteTariff::test_not_found 15:30:44 15:30:44 0.004s PASSED N/A
42 tests/trades/test_01_trades_smoke.py::TestRouteTariff::test_delete_idempotent 15:30:44 15:30:44 0.003s PASSED N/A
43 tests/trades/test_01_trades_smoke.py::TestCommissionPolicy::test_get_all_returns_list 15:30:44 15:30:44 0.004s PASSED N/A
44 tests/trades/test_01_trades_smoke.py::TestCommissionPolicy::test_not_found 15:30:44 15:30:44 0.002s PASSED N/A
45 tests/trades/test_01_trades_smoke.py::TestCommissionPolicy::test_delete_idempotent 15:30:44 15:30:44 0.002s PASSED N/A
46 tests/trades/test_01_trades_smoke.py::TestTransportRequest::test_get_all_returns_list 15:30:44 15:30:44 0.003s PASSED N/A
47 tests/trades/test_01_trades_smoke.py::TestTransportRequest::test_filter_by_status 15:30:44 15:30:44 0.002s PASSED N/A
48 tests/trades/test_01_trades_smoke.py::TestTransportRequest::test_not_found 15:30:44 15:30:44 0.002s PASSED N/A
49 tests/trades/test_01_trades_smoke.py::TestTransportRequest::test_delete_idempotent 15:30:44 15:30:44 0.002s PASSED N/A
50 tests/trades/test_01_trades_smoke.py::TestLtlTripTemplate::test_get_all_returns_list 15:30:44 15:30:44 0.002s PASSED N/A
51 tests/trades/test_01_trades_smoke.py::TestLtlTripTemplate::test_filter_active 15:30:44 15:30:44 0.001s PASSED N/A
52 tests/trades/test_01_trades_smoke.py::TestLtlTripTemplate::test_not_found 15:30:44 15:30:44 0.001s PASSED N/A
53 tests/trades/test_01_trades_smoke.py::TestLtlTripTemplate::test_delete_idempotent 15:30:44 15:30:44 0.001s PASSED N/A
54 tests/trades/test_01_trades_smoke.py::TestAuctionTrip::test_get_all_returns_list 15:30:44 15:30:44 0.002s PASSED N/A
55 tests/trades/test_01_trades_smoke.py::TestAuctionTrip::test_filter_by_status 15:30:44 15:30:44 0.001s PASSED N/A
56 tests/trades/test_01_trades_smoke.py::TestAuctionTrip::test_not_found 15:30:44 15:30:44 0.001s PASSED N/A
57 tests/trades/test_01_trades_smoke.py::TestAuctionTrip::test_delete_idempotent 15:30:44 15:30:44 0.001s PASSED N/A
58 tests/trades/test_01_trades_smoke.py::TestAuction::test_get_all_returns_list 15:30:44 15:30:44 0.002s PASSED N/A
59 tests/trades/test_01_trades_smoke.py::TestAuction::test_filter_by_status 15:30:44 15:30:44 0.001s PASSED N/A
60 tests/trades/test_01_trades_smoke.py::TestAuction::test_not_found 15:30:44 15:30:44 0.001s PASSED N/A
61 tests/trades/test_01_trades_smoke.py::TestAuction::test_delete_idempotent 15:30:44 15:30:44 0.001s PASSED N/A
62 tests/trades/test_01_trades_smoke.py::TestAuction::test_delete_participant_idempotent 15:30:44 15:30:44 0.002s PASSED N/A
63 tests/trades/test_01_trades_smoke.py::TestAuction::test_delete_bid_idempotent 15:30:44 15:30:44 0.002s PASSED N/A
64 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_get_orders_returns_list 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
65 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_get_trips_returns_list 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
66 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_order_not_found 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 404 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
67 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_trip_not_found 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 404 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
68 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_delete_order_idempotent 15:30:44 15:30:44 0.002s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
69 tests/trades/test_01_trades_smoke.py::TestOrdersTrips::test_delete_trip_idempotent 15:30:44 15:30:44 0.002s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
70 tests/trades/test_01_trades_smoke.py::TestInfra::test_goap_status 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
71 tests/trades/test_01_trades_smoke.py::TestInfra::test_auction_scheduler_status 15:30:44 15:30:44 0.001s FAILED UNKNOWN
🚫 Error Details
Type:AssertionError
Category:UNKNOWN
Message:assert 502 == 200 + where 502 = .status_code
Suggested Action:Review error message and stack trace, check logs for additional context
Stack Trace:
NoneType: None
72 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_01_ltl_trip_starts_filling 15:30:44 15:30:44 0.001s PASSED N/A
73 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_02_fill_below_threshold[1-20] 15:30:44 15:30:44 0.005s PASSED N/A
74 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_02_fill_below_threshold[2-40] 15:30:44 15:30:44 0.004s PASSED N/A
75 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_02_fill_below_threshold[3-60] 15:30:44 15:30:44 0.004s PASSED N/A
76 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_03_fourth_placement_triggers_ready 15:30:44 15:30:44 0.003s PASSED N/A
77 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_04_placement_rejected_when_not_filling 15:30:44 15:30:44 0.003s PASSED N/A
78 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_05_cannot_exceed_capacity 15:30:44 15:30:44 0.005s PASSED N/A
79 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_06_open_auction 15:30:44 15:30:44 0.002s PASSED N/A
80 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_07_carrier1_bids 15:30:44 15:30:44 0.004s PASSED N/A
81 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_08_carrier2_wins 15:30:44 15:30:44 0.003s PASSED N/A
82 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_09_finish_auction 15:30:44 15:30:44 0.003s PASSED N/A
83 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_10_participants_statuses 15:30:44 15:30:44 0.001s PASSED N/A
84 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_11_execution_creates_orders 15:30:44 15:30:44 0.011s PASSED N/A
85 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_12_single_execution_trip 15:30:44 15:30:44 0.002s PASSED N/A
86 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_13_orders_linked_to_trip 15:30:44 15:30:44 0.005s PASSED N/A
87 tests/trades/test_03_trades_scenario_ltl.py::TestLtlScenario::test_14_ltl_cargo_list_matches_requests 15:30:44 15:30:44 0.001s PASSED N/A
📊

Detailed Step Execution Results

📋 Overview: This section provides comprehensive details for each individual test step across all test cases. Use the interactive features to explore step execution patterns and identify potential issues.

[TIP] Click headers to sort   🔍 Hover for tooltips   📊 Interactive charts

Step Status Overview

🎯 Test Case 📝 Step Name ⚡ Status 📷 Screenshot ⚠️ Error Details
TC-1000 1. test_only_last_mile SKIP N/A N/A
TC-1000 2. test_only_highway SKIP N/A N/A
TC-1000 3. test_intracity SKIP N/A N/A
TC-1000 4. test_first_mile_with_highway SKIP N/A N/A
TC-1000 5. test_highway_with_last_mile SKIP N/A N/A
TC-1000 6. test_intercity_door_to_door_over_300km SKIP N/A N/A
TC-1000 7. test_intercity_door_to_door_reverse_spb_to_moscow SKIP N/A N/A
TC-1000 8. test_ftl_moscow_to_spb_oneway SKIP N/A N/A
TC-1000 9. test_ftl_moscow_to_spb_roundtrip SKIP N/A N/A
TC-1000 10. test_only_first_mile SKIP N/A N/A
TC-1000 11. test_tariff_uses_volume_weight_when_it_exceeds_actual SKIP N/A N/A
TC-1000 12. test_check_invalid_token PASS N/A N/A
TC-1000 13. test_warehouse_handling_not_copied_across_freights SKIP N/A N/A
TC-1000 14. test_each_warehouse_has_its_own_handling SKIP N/A N/A
TC-1000 15. test_search_cities_live SKIP N/A N/A
TC-1000 16. test_search_freights_live SKIP N/A N/A
TC-1000 17. test_get_city_live SKIP N/A N/A
TC-1000 18. test_get_order_live SKIP N/A N/A
TC-1000 19. test_get_trips_many_live SKIP N/A N/A
TC-1000 20. test_landing_token_live FAIL N/A AssertionError: landing-token 502: '\r\n502 Bad...</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">21. test_incidents_list_live</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">22. test_vrt_health_live</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">23. test_order_full_flow_with_attributes</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">24. test_intercity_door_goes_via_warehouse_not_fictitious_direct</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">25. test_near_city_direct_uses_plain_agent_door</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">26. test_far_to_near_city_routes_via_warehouse_hub</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">27. test_ftl_direct_door_is_real_agent_tariff</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">28. test_no_tariff_city_from_moscow_uses_moscow_as_hub</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">29. test_no_tariff_city_far_routes_via_moscow</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: нет ни одного валидного варианта assert []...</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">30. test_service_discount_recalculates_calculation</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">31. test_zero_discount_target_not_found_is_404</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">32. test_schedule_overlap_two_trips</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">33. test_vrt_goap_plan_self_contained</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">34. test_works_save_and_by_owner</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">35. test_works_save_replaces_not_appends</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">36. test_by_owner_unknown_owner_empty</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">37. test_work_state_set_get_and_idempotent</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">38. test_wpt_pdf_create_quotes_live</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-skipped"> <td style="text-align: center; font-weight: 600;">TC-1000</td> <td style="text-align: left; padding-left: 15px;">39. test_wpt_generate_documents_trip_live</td> <td style="text-align: center;"><span class="status-badge status-skip">SKIP</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestRouteTariff</td> <td style="text-align: left; padding-left: 15px;">40. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestRouteTariff</td> <td style="text-align: left; padding-left: 15px;">41. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestRouteTariff</td> <td style="text-align: left; padding-left: 15px;">42. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestCommissionPolicy</td> <td style="text-align: left; padding-left: 15px;">43. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestCommissionPolicy</td> <td style="text-align: left; padding-left: 15px;">44. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestCommissionPolicy</td> <td style="text-align: left; padding-left: 15px;">45. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestTransportRequest</td> <td style="text-align: left; padding-left: 15px;">46. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestTransportRequest</td> <td style="text-align: left; padding-left: 15px;">47. test_filter_by_status</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestTransportRequest</td> <td style="text-align: left; padding-left: 15px;">48. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestTransportRequest</td> <td style="text-align: left; padding-left: 15px;">49. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlTripTemplate</td> <td style="text-align: left; padding-left: 15px;">50. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlTripTemplate</td> <td style="text-align: left; padding-left: 15px;">51. test_filter_active</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlTripTemplate</td> <td style="text-align: left; padding-left: 15px;">52. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlTripTemplate</td> <td style="text-align: left; padding-left: 15px;">53. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuctionTrip</td> <td style="text-align: left; padding-left: 15px;">54. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuctionTrip</td> <td style="text-align: left; padding-left: 15px;">55. test_filter_by_status</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuctionTrip</td> <td style="text-align: left; padding-left: 15px;">56. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuctionTrip</td> <td style="text-align: left; padding-left: 15px;">57. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">58. test_get_all_returns_list</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">59. test_filter_by_status</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">60. test_not_found</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">61. test_delete_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">62. test_delete_participant_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestAuction</td> <td style="text-align: left; padding-left: 15px;">63. test_delete_bid_idempotent</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">64. test_get_orders_returns_list</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">65. test_get_trips_returns_list</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">66. test_order_not_found</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 404 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">67. test_trip_not_found</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 404 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">68. test_delete_order_idempotent</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestOrdersTrips</td> <td style="text-align: left; padding-left: 15px;">69. test_delete_trip_idempotent</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestInfra</td> <td style="text-align: left; padding-left: 15px;">70. test_goap_status</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-failed"> <td style="text-align: center; font-weight: 600;">TestInfra</td> <td style="text-align: left; padding-left: 15px;">71. test_auction_scheduler_status</td> <td style="text-align: center;"><span class="status-badge status-fail">FAIL</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">AssertionError: assert 502 == 200 + where 502 = <Response [502]>...</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">72. test_01_ltl_trip_starts_filling</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">73. test_02_fill_below_threshold[1-20]</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">74. test_02_fill_below_threshold[2-40]</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">75. test_02_fill_below_threshold[3-60]</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">76. test_03_fourth_placement_triggers_ready</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">77. test_04_placement_rejected_when_not_filling</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">78. test_05_cannot_exceed_capacity</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">79. test_06_open_auction</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">80. test_07_carrier1_bids</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">81. test_08_carrier2_wins</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">82. test_09_finish_auction</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">83. test_10_participants_statuses</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">84. test_11_execution_creates_orders</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">85. test_12_single_execution_trip</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">86. test_13_orders_linked_to_trip</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> <tr class="step-row-passed"> <td style="text-align: center; font-weight: 600;">TestLtlScenario</td> <td style="text-align: left; padding-left: 15px;">87. test_14_ltl_cargo_list_matches_requests</td> <td style="text-align: center;"><span class="status-badge status-pass">PASS</span></td> <td style="text-align: center; color: #999;">N/A</td> <td style="text-align: left; color: #d32f2f; font-size: 12px;">N/A</td> </tr> </tbody> </table> </div> </div> <div class="comprehensive-section" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;"> <div class="section-title" style="color: white;">📊 Historical Trends</div> <div style="background: rgba(255,255,255,0.1); padding: 20px; border-radius: 10px; margin-top: 15px;"> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px;"> <div style="background: rgba(255,255,255,0.15); padding: 15px; border-radius: 8px;"> <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">📈 Pass Rate Trend</div> <div style="font-size: 32px; font-weight: bold; color: #4CAF50;">0.0%</div> <div style="font-size: 12px; opacity: 0.8;">vs. last 7 days</div> </div> <div style="background: rgba(255,255,255,0.15); padding: 15px; border-radius: 8px;"> <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">🔄 Flaky Tests Detected</div> <div style="font-size: 32px; font-weight: bold;">56</div> <div style="font-size: 12px; opacity: 0.8;">passed sometimes, failed others</div> </div> <div style="background: rgba(255,255,255,0.15); padding: 15px; border-radius: 8px;"> <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">⚡ Avg Execution Time</div> <div style="font-size: 32px; font-weight: bold;">0.49s</div> <div style="font-size: 12px; opacity: 0.8;">average per test</div> </div> <div style="background: rgba(255,255,255,0.15); padding: 15px; border-radius: 8px;"> <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">📅 Total Runs Tracked</div> <div style="font-size: 32px; font-weight: bold;">1</div> <div style="font-size: 12px; opacity: 0.8;">test execution runs</div> </div> </div> </div> </div> <script> // Error toggle functionality function toggleError(id, event) { if (event) { event.stopPropagation(); } const popup = document.getElementById('error-' + id); if (!popup) { console.error('Error popup not found:', 'error-' + id); return; } if (popup.style.display === 'none' || popup.style.display === '') { // Hide all other popups document.querySelectorAll('.error-details-popup').forEach(p => p.style.display = 'none'); popup.style.display = 'block'; } else { popup.style.display = 'none'; } } // Close popups when clicking outside document.addEventListener('click', function(event) { if (!event.target.classList.contains('error-toggle-btn')) { document.querySelectorAll('.error-details-popup').forEach(p => p.style.display = 'none'); } }); // Filter and Sort Functions function filterTests() { try { const searchInput = document.getElementById('testSearchInput').value.toLowerCase(); const statusFilter = document.getElementById('statusFilter').value; const categoryFilter = document.getElementById('categoryFilter').value; const table = document.getElementById('comprehensiveTestTable'); if (!table) { console.error('Table not found: comprehensiveTestTable'); return; } const tbody = table.getElementsByTagName('tbody')[0]; if (!tbody) { console.error('Table body not found'); return; } const rows = tbody.getElementsByTagName('tr'); console.log('Filter called - Status:', statusFilter, 'Category:', categoryFilter, 'Search:', searchInput); for (let i = 0; i < rows.length; i++) { const row = rows[i]; if (!row.cells || row.cells.length < 7) continue; // Skip rows without enough cells const testName = row.cells[1].textContent.toLowerCase(); const status = row.classList.contains('test-row-passed') ? 'passed' : row.classList.contains('test-row-failed') ? 'failed' : row.classList.contains('test-row-skipped') ? 'skipped' : ''; const category = row.cells[6].textContent.toLowerCase(); let show = true; // Search filter if (searchInput && !testName.includes(searchInput)) { show = false; } // Status filter if (statusFilter !== 'all' && status !== statusFilter) { show = false; } // Category filter if (categoryFilter !== 'all' && !category.includes(categoryFilter)) { show = false; } row.style.display = show ? '' : 'none'; } } catch (error) { console.error('Error in filterTests:', error); } } function clearFilters() { document.getElementById('testSearchInput').value = ''; document.getElementById('statusFilter').value = 'all'; document.getElementById('categoryFilter').value = 'all'; filterTests(); } function sortTable(columnIndex) { const table = document.getElementById('comprehensiveTestTable'); const tbody = table.getElementsByTagName('tbody')[0]; const rows = Array.from(tbody.getElementsByTagName('tr')); const header = table.getElementsByTagName('th')[columnIndex]; // Toggle sort direction const isAsc = header.classList.contains('sort-asc'); // Remove sort classes from all headers table.querySelectorAll('th').forEach(th => { th.classList.remove('sort-asc', 'sort-desc'); }); // Add sort class to current header header.classList.add(isAsc ? 'sort-desc' : 'sort-asc'); // Sort rows rows.sort((a, b) => { let aValue = a.cells[columnIndex].textContent.trim(); let bValue = b.cells[columnIndex].textContent.trim(); // Handle numeric columns (S.No, Duration) if (columnIndex === 0 || columnIndex === 4) { aValue = parseFloat(aValue); bValue = parseFloat(bValue); } if (aValue < bValue) return isAsc ? 1 : -1; if (aValue > bValue) return isAsc ? -1 : 1; return 0; }); // Reorder rows in table rows.forEach(row => tbody.appendChild(row)); } function filterSteps() { try { const searchInput = document.getElementById('stepSearchInput').value.toLowerCase(); const statusFilter = document.getElementById('stepStatusFilter').value; const table = document.getElementById('testStepsTable'); if (!table) { console.error('Table not found: testStepsTable'); return; } const tbody = table.getElementsByTagName('tbody')[0]; if (!tbody) { console.error('Table body not found'); return; } const rows = tbody.getElementsByTagName('tr'); for (let i = 0; i < rows.length; i++) { const row = rows[i]; if (!row.cells || row.cells.length < 3) continue; // Skip rows without enough cells const stepName = row.cells[1].textContent.toLowerCase(); const statusBadge = row.cells[2].querySelector('.status-badge'); const status = statusBadge ? statusBadge.textContent.toLowerCase() : ''; let show = true; // Search filter if (searchInput && !stepName.includes(searchInput)) { show = false; } // Status filter if (statusFilter !== 'all' && !status.includes(statusFilter)) { show = false; } row.style.display = show ? '' : 'none'; } } catch (error) { console.error('Error in filterSteps:', error); } } function clearStepFilters() { document.getElementById('stepSearchInput').value = ''; document.getElementById('stepStatusFilter').value = 'all'; filterSteps(); } function sortStepsTable(columnIndex) { const table = document.getElementById('testStepsTable'); const tbody = table.getElementsByTagName('tbody')[0]; const rows = Array.from(tbody.getElementsByTagName('tr')); const header = table.getElementsByTagName('th')[columnIndex]; // Toggle sort direction const isAsc = header.classList.contains('sort-asc'); // Remove sort classes from all headers table.querySelectorAll('th').forEach(th => { th.classList.remove('sort-asc', 'sort-desc'); }); // Add sort class to current header header.classList.add(isAsc ? 'sort-desc' : 'sort-asc'); // Sort rows rows.sort((a, b) => { let aValue = a.cells[columnIndex].textContent.trim(); let bValue = b.cells[columnIndex].textContent.trim(); if (aValue < bValue) return isAsc ? 1 : -1; if (aValue > bValue) return isAsc ? -1 : 1; return 0; }); // Reorder rows in table rows.forEach(row => tbody.appendChild(row)); } // Chart.js visualizations document.addEventListener('DOMContentLoaded', function() { try { Chart.defaults.font.family = "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"; Chart.defaults.color = '#64748b'; // Register datalabels plugin if available if (typeof ChartDataLabels !== 'undefined') { Chart.register(ChartDataLabels); } // Test Status Distribution Chart if (document.getElementById('statusChart')) { const statusCtx = document.getElementById('statusChart').getContext('2d'); new Chart(statusCtx, { type: 'doughnut', data: { labels: ['Passed', 'Failed', 'Skipped'], datasets: [{ data: [41, 15, 31], backgroundColor: [ 'rgba(76, 175, 80, 0.8)', 'rgba(244, 67, 54, 0.8)', 'rgba(255, 152, 0, 0.8)' ], borderColor: [ 'rgba(76, 175, 80, 1)', 'rgba(244, 67, 54, 1)', 'rgba(255, 152, 0, 1)' ], borderWidth: 2 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom', labels: { padding: 20, font: { size: 13 } } }, title: { display: true, text: 'Test Status Distribution', font: { size: 16, weight: 'bold' } }, datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: function(value, context) { const total = 87; const percentage = total > 0 ? ((value / total) * 100).toFixed(1) : 0; return value + '\n(' + percentage + '%)'; } }, tooltip: { callbacks: { label: function(context) { const label = context.label || ''; const value = context.parsed || 0; const total = 87; const percentage = total > 0 ? ((value / total) * 100).toFixed(1) : 0; return label + ': ' + value + ' (' + percentage + '%)'; } } } }, animation: { animateRotate: true, animateScale: true } } }); } // Step Status Overview Chart (for test steps section) if (document.getElementById('stepStatusChart')) { const stepCtx = document.getElementById('stepStatusChart').getContext('2d'); new Chart(stepCtx, { type: 'doughnut', data: { labels: ['Passed', 'Failed'], datasets: [{ data: [41, 15], backgroundColor: [ '#4caf50', '#f44336' ], borderWidth: 0 }] }, options: { responsive: true, maintainAspectRatio: true, cutout: '70%', plugins: { legend: { display: true, position: 'bottom', labels: { font: { size: 11 }, padding: 10 } }, title: { display: false }, datalabels: { display: true, color: '#fff', font: { weight: 'bold', size: 16 }, formatter: function(value) { return value; } }, tooltip: { enabled: true } } }, plugins: [{ id: 'centerText', afterDraw: function(chart) { const ctx = chart.ctx; const width = chart.width; const height = chart.height; const total = 87; const passed = 41; ctx.restore(); const fontSize = (height / 80).toFixed(2); ctx.font = 'bold ' + fontSize + 'em sans-serif'; ctx.textBaseline = 'middle'; ctx.fillStyle = '#4caf50'; const text = passed; const textX = Math.round((width - ctx.measureText(text).width) / 2); const textY = height / 2 - 10; ctx.fillText(text, textX, textY); ctx.font = fontSize * 0.4 + 'em sans-serif'; ctx.fillStyle = '#666'; const percentText = '(' + ((passed / total * 100).toFixed(0)) + '%)'; const percentX = Math.round((width - ctx.measureText(percentText).width) / 2); ctx.fillText(percentText, percentX, textY + 20); ctx.save(); } }] }); } // Pass/Fail/Skip & Error Rate Distribution Chart (Pie Chart) if (document.getElementById('passRateChart')) { const passRate = 47.1; const failRate = 15 > 0 ? ((15 / 87) * 100).toFixed(1) : 0; const skipRate = 31 > 0 ? ((31 / 87) * 100).toFixed(1) : 0; const errorRate = 0; // Can be calculated based on error analysis const passRateCtx = document.getElementById('passRateChart').getContext('2d'); new Chart(passRateCtx, { type: 'pie', data: { labels: ['Passed', 'Failed', 'Skipped'], datasets: [{ data: [41, 15, 31], backgroundColor: [ 'rgba(76, 175, 80, 0.8)', 'rgba(244, 67, 54, 0.8)', 'rgba(255, 152, 0, 0.8)' ], borderColor: [ 'rgba(76, 175, 80, 1)', 'rgba(244, 67, 54, 1)', 'rgba(255, 152, 0, 1)' ], borderWidth: 2 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom', labels: { padding: 20, font: { size: 13 } } }, title: { display: true, text: 'PASS / FAIL / SKIP & Error Rate Distribution', font: { size: 16, weight: 'bold' } }, datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: function(value, context) { const total = 87; const percentage = total > 0 ? ((value / total) * 100).toFixed(1) : 0; return value + '\n(' + percentage + '%)'; } }, tooltip: { callbacks: { label: function(context) { const label = context.label || ''; const value = context.parsed || 0; const total = 87; const percentage = total > 0 ? ((value / total) * 100).toFixed(1) : 0; return label + ': ' + value + ' (' + percentage + '%)'; } } } }, animation: { duration: 1000 } } }); } } catch (error) { console.error('Error initializing charts:', error); console.log('Chart object available:', typeof Chart !== 'undefined'); console.log('ChartDataLabels available:', typeof ChartDataLabels !== 'undefined'); } }); </script> </div> </body> </html>