Class: Ace::Test::EndToEndRunner::Molecules::FailureFinder
- Inherits:
-
Object
- Object
- Ace::Test::EndToEndRunner::Molecules::FailureFinder
- Defined in:
- lib/ace/test/end_to_end_runner/molecules/failure_finder.rb
Overview
Scans cache for failed test cases from previous E2E test runs
Reads metadata.yml files from .ace-local/test-e2e/*-reports/ directories and extracts failed_test_cases arrays. Used by –only-failures CLI flag to re-run only tests that failed previously.
Note: This is a Molecule (not an Atom) because it performs filesystem I/O via Dir.glob and YAML file reading.
Constant Summary collapse
- CACHE_DIR =
".ace-local/test-e2e"- METADATA_FILE =
"metadata.yml"- REPORTS_SUFFIX =
"-reports"
Instance Method Summary collapse
-
#find_all_failures(base_dir: Dir.pwd) ⇒ Array<String>
Find failed test cases across all packages.
-
#find_failures(package:, base_dir: Dir.pwd) ⇒ Array<String>
Find failed test cases for a specific package.
-
#find_failures_by_package(packages:, base_dir: Dir.pwd) ⇒ Hash{String => Array<String>}
Find failed test cases grouped by package.
-
#find_failures_by_scenario(packages:, base_dir: Dir.pwd) ⇒ Hash{String => Hash{String => Array<String>}}
Find failed test scenarios grouped by package and scenario (test-id).
Instance Method Details
#find_all_failures(base_dir: Dir.pwd) ⇒ Array<String>
Find failed test cases across all packages
Scans cache directory for the most recent metadata.yml per test-id across all packages, returning aggregated failed test case IDs.
48 49 50 51 52 53 54 |
# File 'lib/ace/test/end_to_end_runner/molecules/failure_finder.rb', line 48 def find_all_failures(base_dir: Dir.pwd) = (base_dir) return [] if .empty? most_recent = most_recent_per_test() extract_all_failed_ids(most_recent) end |
#find_failures(package:, base_dir: Dir.pwd) ⇒ Array<String>
Find failed test cases for a specific package
Scans cache directory for the most recent metadata.yml per test-id within the specified package, returning aggregated failed test case IDs.
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ace/test/end_to_end_runner/molecules/failure_finder.rb', line 30 def find_failures(package:, base_dir: Dir.pwd) = (base_dir) return [] if .empty? # Filter to package and get most recent per test-id = filter_by_package(, package) most_recent = most_recent_per_test() extract_all_failed_ids(most_recent) end |
#find_failures_by_package(packages:, base_dir: Dir.pwd) ⇒ Hash{String => Array<String>}
Find failed test cases grouped by package
Scans cache directory for the most recent metadata.yml per test-id within each package, returning a hash mapping package names to their failed test case IDs.
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/ace/test/end_to_end_runner/molecules/failure_finder.rb', line 65 def find_failures_by_package(packages:, base_dir: Dir.pwd) = (base_dir) return {} if .empty? result = {} packages.each do |package| = filter_by_package(, package) most_recent = most_recent_per_test() failed_ids = extract_all_failed_ids(most_recent) result[package] = failed_ids unless failed_ids.empty? end result end |
#find_failures_by_scenario(packages:, base_dir: Dir.pwd) ⇒ Hash{String => Hash{String => Array<String>}}
Find failed test scenarios grouped by package and scenario (test-id)
Like find_failures_by_package but preserves per-scenario granularity. Callers can use this to re-run full failed scenarios.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/ace/test/end_to_end_runner/molecules/failure_finder.rb', line 88 def find_failures_by_scenario(packages:, base_dir: Dir.pwd) = (base_dir) return {} if .empty? result = {} packages.each do |package| = filter_by_package(, package) most_recent = most_recent_per_test() scenario_failures = {} most_recent.each do |entry| test_id = entry[:data]["test-id"] failed_ids = extract_failed_test_cases(entry[:data]) scenario_failures[test_id] = failed_ids unless failed_ids.empty? end result[package] = scenario_failures unless scenario_failures.empty? end result end |