Skip to content

Commit fb0e5ff

Browse files
authored
Merge pull request #10530 from Extra-Chill/fix/10528-extension-result-sidecar
Expose canonical result sidecar to extension tests
2 parents 252d587 + 1374a3e commit fb0e5ff

2 files changed

Lines changed: 79 additions & 1 deletion

File tree

crates/homeboy-extension/src/test/run.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ fn run_main_test_workflow_inner(
298298
.iter()
299299
.fold(runner, |runner, (key, value)| runner.env(key, value));
300300
let runner = runner
301+
.env(
302+
"HOMEBOY_TEST_RESULTS_FILE",
303+
results_file.to_string_lossy().as_ref(),
304+
)
301305
.env_if(
302306
no_tests_policy_enabled,
303307
NO_TESTS_APPLICABLE_FILE_ENV,

tests/core/extension/component_script_test.rs

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,80 @@ fn command_dispatch_falls_back_to_extension_when_component_script_is_absent() {
382382
});
383383
}
384384

385+
#[test]
386+
fn full_extension_test_supplies_canonical_result_sidecar() {
387+
with_isolated_home(|home| {
388+
let dir = tempfile::tempdir().expect("temp dir");
389+
fs::write(
390+
dir.path().join("homeboy.json"),
391+
r#"{
392+
"id": "fixture",
393+
"extensions": { "fixture-extension": {} }
394+
}"#,
395+
)
396+
.expect("homeboy.json should be written");
397+
398+
let extension_dir = home
399+
.path()
400+
.join(".config/homeboy/extensions/fixture-extension");
401+
fs::create_dir_all(&extension_dir).expect("extension dir should be created");
402+
fs::write(
403+
extension_dir.join("fixture-extension.json"),
404+
r#"{
405+
"name": "Fixture extension",
406+
"version": "1.0.0",
407+
"test": {
408+
"extension_script": "test.sh",
409+
"result_parse": {
410+
"extension_script": "parse-results.sh",
411+
"adapters": ["fixture-json"]
412+
}
413+
}
414+
}"#,
415+
)
416+
.expect("extension manifest should be written");
417+
let extension_script = extension_dir.join("test.sh");
418+
fs::write(
419+
&extension_script,
420+
r#"#!/bin/sh
421+
set -eu
422+
test -n "$HOMEBOY_TEST_RESULTS_FILE"
423+
mkdir -p "$(dirname "$HOMEBOY_TEST_RESULTS_FILE")"
424+
printf '{"schema":"fixture/test-results/v1","total":2,"passed":2,"failed":0,"skipped":0}\n' > "$HOMEBOY_TEST_RESULTS_FILE"
425+
"#,
426+
)
427+
.expect("extension script should be written");
428+
let parser_script = extension_dir.join("parse-results.sh");
429+
fs::write(
430+
&parser_script,
431+
r#"#!/bin/sh
432+
set -eu
433+
test "$1" = "$HOMEBOY_TEST_RESULTS_FILE"
434+
test "${2:-}" = "fixture-json"
435+
grep -q 'fixture/test-results/v1' "$1"
436+
source "$HOMEBOY_RUNTIME_WRITE_TEST_RESULTS"
437+
homeboy_write_test_results 2 2 0 0
438+
"#,
439+
)
440+
.expect("parser script should be written");
441+
for script in [&extension_script, &parser_script] {
442+
let mut perms = fs::metadata(script).expect("script metadata").permissions();
443+
perms.set_mode(0o755);
444+
fs::set_permissions(script, perms).expect("script should be executable");
445+
}
446+
447+
let (output, exit_code) = run_test(test_command_args(dir.path()), &GlobalArgs {})
448+
.expect("extension test should run");
449+
450+
assert_eq!(exit_code, 0);
451+
assert!(output.passed);
452+
let counts = output.test_counts.expect("test counts");
453+
assert_eq!(counts.total, 2);
454+
assert_eq!(counts.passed, 2);
455+
assert_eq!(counts.failed, 0);
456+
});
457+
}
458+
385459
#[test]
386460
fn changed_wordpress_php_smoke_test_executes_with_generic_result_adapter() {
387461
with_isolated_home(|home| {
@@ -422,7 +496,7 @@ fn changed_wordpress_php_smoke_test_executes_with_generic_result_adapter() {
422496
let extension_script = extension_dir.join("test.sh");
423497
fs::write(
424498
&extension_script,
425-
"#!/bin/sh\nprintf '%s' \"$HOMEBOY_CHANGED_TEST_FILES\" | grep -q 'tests/patterns/patterns-ability-smoke.php'\nprintf 'wordpress smoke passed=1 failed=0\\n'\n",
499+
"#!/bin/sh\nset -eu\nprintf '%s' \"$HOMEBOY_CHANGED_TEST_FILES\" | grep -q 'tests/patterns/patterns-ability-smoke.php'\ntest -n \"$HOMEBOY_TEST_RESULTS_FILE\"\nmkdir -p \"$(dirname \"$HOMEBOY_TEST_RESULTS_FILE\")\"\nprintf '{\"total\":1,\"passed\":1,\"failed\":0,\"skipped\":0}\\n' > \"$HOMEBOY_TEST_RESULTS_FILE\"\n",
426500
)
427501
.expect("extension script should be written");
428502
let mut perms = fs::metadata(&extension_script)

0 commit comments

Comments
 (0)