summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web/app.js7
-rw-r--r--web/test/new-task-button.test.mjs24
2 files changed, 27 insertions, 4 deletions
diff --git a/web/app.js b/web/app.js
index 3121f28..187795f 100644
--- a/web/app.js
+++ b/web/app.js
@@ -278,6 +278,9 @@ export function filterActiveTasks(tasks) {
return tasks.filter(t => _PANEL_ACTIVE_STATES.has(t.state));
}
+// The New Task button is always visible regardless of active tab.
+export function newTaskButtonShouldShowOnTab(_tab) { return true; }
+
export function filterTasksByTab(tasks, tab) {
if (tab === 'active') return tasks.filter(t => ACTIVE_STATES.has(t.state));
if (tab === 'interrupted') return tasks.filter(t => INTERRUPTED_STATES.has(t.state));
@@ -2198,10 +2201,6 @@ function switchTab(name) {
}
});
- // Show/hide the header New Task button (only relevant on tasks tab)
- document.getElementById('btn-new-task').style.display =
- name === 'tasks' ? '' : 'none';
-
if (name === 'running') {
fetchTasks().then(renderRunningView).catch(() => {
const currentEl = document.querySelector('.running-current');
diff --git a/web/test/new-task-button.test.mjs b/web/test/new-task-button.test.mjs
new file mode 100644
index 0000000..45a3548
--- /dev/null
+++ b/web/test/new-task-button.test.mjs
@@ -0,0 +1,24 @@
+// new-task-button.test.mjs — visibility contract for the New Task button
+//
+// The New Task button lives in the global header and must be visible on all tabs.
+// Run with: node --test web/test/new-task-button.test.mjs
+
+import { describe, it } from 'node:test';
+import assert from 'node:assert/strict';
+import { newTaskButtonShouldShowOnTab } from '../app.js';
+
+const ALL_TABS = ['tasks', 'active', 'running', 'stats'];
+
+describe('new task button visibility', () => {
+ for (const tab of ALL_TABS) {
+ it(`is visible on "${tab}" tab`, () => {
+ assert.equal(newTaskButtonShouldShowOnTab(tab), true, `expected button to be visible on tab "${tab}"`);
+ });
+ }
+
+ it('is visible on any unknown future tab', () => {
+ assert.equal(newTaskButtonShouldShowOnTab('help'), true);
+ assert.equal(newTaskButtonShouldShowOnTab('templates'), true);
+ assert.equal(newTaskButtonShouldShowOnTab(''), true);
+ });
+});