// ABOUTME: Unit tests for tool input validation helpers.
// ABOUTME: Verifies coordinate bounds and required string behavior.
import assert from "node:assert/strict";
import { test } from "node:test";
import {
requireCoordinates,
requireString,
requireStringOrEnv,
ValidationError,
} from "../../src/tools/validation.js";
test("requireString returns trimmed string", () => {
assert.equal(requireString("slug", "user_slug"), "slug");
});
test("requireString rejects empty string", () => {
assert.throws(() => requireString("", "user_slug"), ValidationError);
});
test("requireCoordinates accepts valid bounds", () => {
assert.deepEqual(requireCoordinates({ x: 0, y: 8 }), { x: 0, y: 8 });
});
test("requireCoordinates rejects out of bounds", () => {
assert.throws(() => requireCoordinates({ x: 9, y: 0 }), ValidationError);
});
test("requireStringOrEnv prefers provided value", () => {
const value = requireStringOrEnv("slug", "user_slug", "env-slug", "MINESWEEPER_USER_SLUG");
assert.equal(value, "slug");
});
test("requireStringOrEnv falls back to env value", () => {
const value = requireStringOrEnv(undefined, "user_slug", "env-slug", "MINESWEEPER_USER_SLUG");
assert.equal(value, "env-slug");
});
test("requireStringOrEnv throws when both values missing", () => {
assert.throws(
() => requireStringOrEnv("", "user_slug", " ", "MINESWEEPER_USER_SLUG"),
ValidationError
);
});