delete_user_totally.test.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const assert = require("node:assert/strict");
  2. const { spawnSync } = require("node:child_process");
  3. const path = require("node:path");
  4. const test = require("node:test");
  5. const { isDeleteConfirmationAccepted, parseCliArgs } = require("./delete_user_totally");
  6. const { defaultConfigPath } = require("./graph_user_lib");
  7. function runCli(args) {
  8. return spawnSync(process.execPath, [path.join(__dirname, "delete_user_totally.js"), ...args], {
  9. encoding: "utf8",
  10. });
  11. }
  12. test("parseCliArgs accepts --username", () => {
  13. const parsed = parseCliArgs(["--username", "alice"]);
  14. assert.equal(parsed.lookupField, "username");
  15. assert.equal(parsed.lookupLabel, "username");
  16. assert.equal(parsed.lookupValue, "alice");
  17. assert.equal(parsed.env, "prod");
  18. assert.equal(parsed.database, "DB");
  19. assert.equal(parsed.config, path.resolve(defaultConfigPath));
  20. });
  21. test("parseCliArgs accepts --user-id", () => {
  22. const parsed = parseCliArgs(["--user-id", "user-123"]);
  23. assert.equal(parsed.lookupField, "id");
  24. assert.equal(parsed.lookupLabel, "user-id");
  25. assert.equal(parsed.lookupValue, "user-123");
  26. });
  27. test("CLI --help exits successfully", () => {
  28. const result = runCli(["--help"]);
  29. assert.equal(result.status, 0);
  30. assert.match(result.stdout, /Delete a db-sync user and all related data/);
  31. });
  32. test("CLI rejects passing both --username and --user-id", () => {
  33. const result = runCli(["--username", "alice", "--user-id", "user-123"]);
  34. assert.equal(result.status, 1);
  35. assert.match(result.stderr, /Pass exactly one of --username or --user-id\./);
  36. });
  37. test("confirmation accepts DELETE", () => {
  38. assert.equal(isDeleteConfirmationAccepted("DELETE", "user-123"), true);
  39. });
  40. test("confirmation accepts legacy DELETE USER <id>", () => {
  41. assert.equal(isDeleteConfirmationAccepted("DELETE USER user-123", "user-123"), true);
  42. });
  43. test("confirmation rejects unrelated input", () => {
  44. assert.equal(isDeleteConfirmationAccepted("DELETE USER other-user", "user-123"), false);
  45. assert.equal(isDeleteConfirmationAccepted("yes", "user-123"), false);
  46. });