summaryrefslogtreecommitdiff
path: root/web/test/delete-button.test.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'web/test/delete-button.test.mjs')
-rw-r--r--web/test/delete-button.test.mjs60
1 files changed, 60 insertions, 0 deletions
diff --git a/web/test/delete-button.test.mjs b/web/test/delete-button.test.mjs
new file mode 100644
index 0000000..b82b487
--- /dev/null
+++ b/web/test/delete-button.test.mjs
@@ -0,0 +1,60 @@
+// delete-button.test.mjs — visibility logic for the Delete button on task cards
+//
+// Run with: node --test web/test/delete-button.test.mjs
+
+import { describe, it } from 'node:test';
+import assert from 'node:assert/strict';
+
+// ── Logic under test ──────────────────────────────────────────────────────────
+// A delete button should be shown for any task that is not actively executing.
+// RUNNING and QUEUED tasks cannot be deleted via the API (409), so we hide the button.
+
+const NON_DELETABLE_STATES = new Set(['RUNNING', 'QUEUED']);
+
+function showDeleteButton(state) {
+ return !NON_DELETABLE_STATES.has(state);
+}
+
+// ── Tests ─────────────────────────────────────────────────────────────────────
+
+describe('delete button visibility', () => {
+ it('shows for PENDING', () => {
+ assert.equal(showDeleteButton('PENDING'), true);
+ });
+
+ it('shows for COMPLETED', () => {
+ assert.equal(showDeleteButton('COMPLETED'), true);
+ });
+
+ it('shows for FAILED', () => {
+ assert.equal(showDeleteButton('FAILED'), true);
+ });
+
+ it('shows for CANCELLED', () => {
+ assert.equal(showDeleteButton('CANCELLED'), true);
+ });
+
+ it('shows for TIMED_OUT', () => {
+ assert.equal(showDeleteButton('TIMED_OUT'), true);
+ });
+
+ it('shows for BUDGET_EXCEEDED', () => {
+ assert.equal(showDeleteButton('BUDGET_EXCEEDED'), true);
+ });
+
+ it('shows for READY', () => {
+ assert.equal(showDeleteButton('READY'), true);
+ });
+
+ it('shows for BLOCKED', () => {
+ assert.equal(showDeleteButton('BLOCKED'), true);
+ });
+
+ it('hides for RUNNING', () => {
+ assert.equal(showDeleteButton('RUNNING'), false);
+ });
+
+ it('hides for QUEUED', () => {
+ assert.equal(showDeleteButton('QUEUED'), false);
+ });
+});