summaryrefslogtreecommitdiff
path: root/src/lib/git/log.test.ts
diff options
context:
space:
mode:
authorJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:08:41 -0300
committerJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:50:43 -0300
commitf9a77c5c27aede4e5978eb55d9b7af781b680a1d (patch)
treed545e325ba1ae756fc2eac66fac1001b6753c40d /src/lib/git/log.test.ts
feat!: initial commit
Signed-off-by: João Augusto Costa Branco Marado Torres <torres.dev@disroot.org>
Diffstat (limited to 'src/lib/git/log.test.ts')
-rw-r--r--src/lib/git/log.test.ts71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/lib/git/log.test.ts b/src/lib/git/log.test.ts
new file mode 100644
index 0000000..09acb1c
--- /dev/null
+++ b/src/lib/git/log.test.ts
@@ -0,0 +1,71 @@
+import { describe, it } from "@std/testing/bdd";
+import { assertEquals, assertExists } from "@std/assert";
+import {
+ assertSpyCall,
+ assertSpyCalls,
+ returnsNext,
+ stub,
+} from "@std/testing/mock";
+import { getLastCommitForOneOfFiles } from "./log.ts";
+import {
+ emptyCommandOutput,
+ gitDiffTreeCommandOutput,
+ gitDir,
+ gitLogPrettyCommandOutput,
+ gitRevParseCommandOutput,
+} from "../../../tests/fixtures/test_data.ts";
+
+describe("getLastCommitForOneOfFiles", () => {
+ it("returns parsed commit with signature and file info", async () => {
+ const outputs = [
+ gitLogPrettyCommandOutput,
+ gitDiffTreeCommandOutput,
+ gitRevParseCommandOutput,
+ ];
+ using logStub = stub(
+ Deno.Command.prototype,
+ "output",
+ returnsNext(outputs),
+ );
+
+ const file = new URL("file.ts", gitDir);
+ const result = await getLastCommitForOneOfFiles(file);
+
+ assertExists(result);
+ assertEquals(result.hash.short, "abcdef1");
+ assertEquals(result.hash.long, "abcdef1234567890abcdef1234567890abcdef12");
+
+ assertEquals(result.author.name, "Alice");
+ assertEquals(result.committer.email, "bob@example.com");
+
+ assertEquals(result.files.length, 1);
+ assertEquals(result.files[0], {
+ path: file,
+ status: "modified",
+ });
+
+ assertEquals(result.signature?.type, "gpg");
+ assertEquals(result.signature?.signer, "bob@example.com");
+
+ for (let i = 0; i < outputs.length; i++) {
+ assertSpyCall(logStub, i, { args: [], returned: outputs[i] });
+ }
+ assertSpyCalls(logStub, outputs.length);
+ });
+
+ it("returns undefined for empty commit output", async () => {
+ using logStub = stub(
+ Deno.Command.prototype,
+ "output",
+ returnsNext([emptyCommandOutput]),
+ );
+
+ const result = await getLastCommitForOneOfFiles(
+ [new URL("nonexistent.ts", gitDir)],
+ );
+
+ assertEquals(result, undefined);
+ assertSpyCall(logStub, 0, { args: [], returned: emptyCommandOutput });
+ assertSpyCalls(logStub, 1);
+ });
+});