From 234f8c1ab43b55a50c57ffaea30a54a5d31ef268 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Fri, 13 Feb 2026 12:34:05 +0000 Subject: [PATCH] Guard against Array status in test results Tooling runners can return `status` as an Array (e.g., `["pass"]`) inside individual test result objects. Use `Array().first` to safely unwrap, matching the existing pattern for the `version` field. Closes #8634 Closes #8635 Co-Authored-By: Claude Opus 4.6 --- app/models/submission/test_run.rb | 2 +- test/models/submission/test_run_test.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/models/submission/test_run.rb b/app/models/submission/test_run.rb index ecdb804534..a9d031c352 100644 --- a/app/models/submission/test_run.rb +++ b/app/models/submission/test_run.rb @@ -74,7 +74,7 @@ class TestResult def to_h { name: test[:name].to_s, - status: test[:status].try(&:to_sym), + status: Array(test[:status]).first.try(&:to_sym), test_code: test[:test_code], message: test[:message], message_html: Ansi::RenderHTML.(test[:message]), diff --git a/test/models/submission/test_run_test.rb b/test/models/submission/test_run_test.rb index 01c9029747..dc597111f5 100644 --- a/test/models/submission/test_run_test.rb +++ b/test/models/submission/test_run_test.rb @@ -235,6 +235,12 @@ class Submission::TestRunTest < ActiveSupport::TestCase assert_equal 3, tr.version end + test "handles test result status as array" do + tests = [{ 'name' => 'test1', 'status' => ['pass'] }] + tr = create(:submission_test_run, raw_results: { version: 2, status: 'pass', tests: tests }) + assert_equal :pass, tr.test_results.first.to_h[:status] + end + test "truncate message" do message = 'a' * 66_000 test_run = create(:submission_test_run, raw_results: { message: })