diff --git a/src/imgtests/runner.py b/src/imgtests/runner.py index 794fd4f2..7e6b0893 100644 --- a/src/imgtests/runner.py +++ b/src/imgtests/runner.py @@ -597,6 +597,11 @@ def _run_single(distro: Distro, mode: Runner, config: dict[str, Any]) -> None: if filtered_tests: suite.tests = tuple(filtered_tests) + suite.test_duration = ( + suite.total_duration // len(filtered_tests) + if len(filtered_tests) > 0 + else suite.test_duration + ) logger.info( "Filtered %s: %d -> %d tests", suite_name, diff --git a/src/imgtests/web/static/js/test_config.js b/src/imgtests/web/static/js/test_config.js index 79dd4971..c5cfcf25 100644 --- a/src/imgtests/web/static/js/test_config.js +++ b/src/imgtests/web/static/js/test_config.js @@ -333,26 +333,30 @@ class TestConfigManager { ), ).map((cb) => cb.value); - if (!this.currentConfig.selected_tests) { - this.currentConfig.selected_tests = {}; - } + const selectedTests = { + ...(this.currentConfig.selected_tests ?? {}), + }; if (selected.length > 0) { - this.currentConfig.selected_tests[suiteName] = selected; + selectedTests[suiteName] = selected; this.showStatus( `Selected ${selected.length} tests for ${suiteName}`, "success", ); } else { - delete this.currentConfig.selected_tests[suiteName]; + delete selectedTests[suiteName]; this.showStatus( `Will run all tests for ${suiteName}`, "success", ); } + this.currentConfig = { + ...this.currentConfig, + selected_tests: selectedTests, + }; + modal.remove(); - this.renderConfigUI(); }); document @@ -424,6 +428,7 @@ class TestConfigManager { const error = await response.text(); throw new Error(`HTTP ${response.status}: ${error}`); } + this.renderConfigUI(); } catch (error) { console.error("Save failed:", error); this.showStatus(