summaryrefslogtreecommitdiff
path: root/test/next-task.test.sh
blob: 3304efa21d3ce2f86e74fc1bcbc8ac4a1ad59195 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
# test/next-task.test.sh

set -euo pipefail

# Create a temporary database
TEST_DB=$(mktemp)
sqlite3 "$TEST_DB" <<EOF
CREATE TABLE tasks (
    id TEXT PRIMARY KEY,
    state TEXT NOT NULL,
    parent_task_id TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    priority TEXT DEFAULT 'normal'
);
EOF

# Insert a COMPLETED task that will not have a PENDING child or sibling,
# to ensure the fallback logic is triggered.
sqlite3 "$TEST_DB" "INSERT INTO tasks (id, state, created_at) VALUES ('completed-no-children', 'COMPLETED', '2023-01-01 12:00:00');"

# Inject a QUEUED task (should be picked by fallback)
sqlite3 "$TEST_DB" "INSERT INTO tasks (id, state, priority, created_at) VALUES ('queued-task-id', 'QUEUED', 'high', '2023-01-01 10:00:00');"

# Inject a PENDING task (lower priority, should not be picked first by fallback)
sqlite3 "$TEST_DB" "INSERT INTO tasks (id, state, priority, created_at) VALUES ('pending-task-id', 'PENDING', 'normal', '2023-01-01 11:00:00');"

# Run the next-task script with the temporary database path
export DB_PATH="$TEST_DB" # Override DB_PATH for the test
SCRIPT_DIR="$(dirname "$(dirname "$0")")/scripts"
NEXT_TASK_ID=$("$SCRIPT_DIR/next-task")

# Assert that the QUEUED task is returned
if [[ "$NEXT_TASK_ID" == "queued-task-id" ]]; then
    echo "Test passed: QUEUED task was selected by fallback."
else
    echo "Test failed: Expected 'queued-task-id', got '$NEXT_TASK_ID'"
    exit 1
fi

# Clean up
rm "$TEST_DB"