import { assertEquals } from "../../test_deps.ts";
import {
  decryptAES,
  decryptPath,
  deriveKeyFromPassword,
  encryptAES,
  encryptPath,
} from "./aes.ts";

Deno.test("AES encryption and decryption", async () => {
  const password = "YourPassword";
  const salt = "UniquePerUserSalt";
  const message = "Hello, World!";

  const key = await deriveKeyFromPassword(password, salt);
  const encrypted = await encryptAES(key, message);

  const decrypted = await decryptAES(key, encrypted);
  assertEquals(decrypted, message);

  // Test that checks if a path is encrypted the same way every time and can be unencrypted
  const path =
    "this/is/a/long/path/that/needs/to/be/encrypted because that's what we do.md";
  const encryptedPath = await encryptPath(key, path);
  const encryptedPath2 = await encryptPath(key, path);
  // Assure two runs give the same result
  assertEquals(encryptedPath, encryptedPath2);

  // Ensure decryption works
  const decryptedPath = await decryptPath(key, encryptedPath);
  console.log(encryptedPath);
  assertEquals(decryptedPath, path);
});