import { test } from "node:test";
import assert from "node:assert/strict";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import path from "node:path";
import { fileURLToPath } from "node:url";

const exec = promisify(execFile);
const CLI = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../dist/index.js");

test("tools 는 --yes 없이 아무것도 설치하지 않는다", async () => {
  // 수백 MB 를 받는 명령이라 조용히 시작하면 안 된다.
  // 상태만 보이거나, 이미 다 있으면 그렇다고 말해야 한다.
  const { stdout } = await exec(process.execPath, [CLI, "tools", "--no-update-check"]);
  assert.match(stdout, /브라우저 도구/);
  assert.doesNotMatch(stdout, /설치 중/);
});

test("도움말에 tools 명령이 나온다", async () => {
  const { stdout } = await exec(process.execPath, [CLI, "--help"]);
  assert.match(stdout, /designpaca tools/);
});

test("사용자에게 보이는 문구가 명령조가 아니다", async () => {
  // 스킬 문서는 단정한 반말이 의도지만, 사용자를 향한 CLI 문구는 다르다.
  const { stdout } = await exec(process.execPath, [CLI, "--help"]);
  const rude = /(해라|써라|봐라|던져라|가라)/;
  assert.doesNotMatch(stdout, rude, "도움말에 명령조 표현이 남아 있다");
});
