aboutsummaryrefslogtreecommitdiff
path: root/test/unit/patch.unit.test.ts
blob: e4aa8d3b81638cf1c1791ac7e87faa63b26d6704 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { Commit } from "../../packages/server/src/git/commit";
import { Patch } from "../../packages/server/src/git/patch";
import { Repository } from "../../packages/server/src/git/repository";
import { EnvironmentVariables } from "../util";

const env = process.env as EnvironmentVariables;

describe("Patch", () => {
	describe("Class methods", () => {
		it("Should get a patch from a diff", async() => {
			expect.assertions(2);

			const repository = await Repository.open(env.BASE_DIR, env.AVAIL_REPO);
			const commit = await Commit.lookup(repository, "d856031c58e26992f3e0a481084a190a50b0bcf7");

			const patch = await Patch.fromDiff(await commit.diff(), 1);

			expect(patch).toBeDefined();
			expect(patch).toBeInstanceOf(Patch);
		});

		it("Should get all patches from a diff", async() => {
			expect.hasAssertions();

			const repository = await Repository.open(env.BASE_DIR, env.AVAIL_REPO);
			const commit = await Commit.lookup(repository, "7b3292af22a0496007e974b65cd2e34521c9c429");

			const patches = await Patch.allFromDiff(await commit.diff());

			expect(patches).toBeDefined();
			expect(patches).toHaveLength(9);

			for(const patch of patches) {
				expect(patch).toBeDefined();
				expect(patch).toBeInstanceOf(Patch);
			}
		});
	});

	describe("Instance methods", () => {
		let repository: Repository;
		let patch: Patch;

		beforeAll(async() => {
			repository = await Repository.open(env.BASE_DIR, env.AVAIL_REPO);
			const commit = await Commit.lookup(repository, "7b3292af22a0496007e974b65cd2e34521c9c429");

			patch = await Patch.fromDiff(await commit.diff(), 4);
		});

		it("Should get if the patch is too large and respond false", async() => {
			expect.assertions(2);

			const too_large = await patch.isTooLarge();

			expect(too_large).toBeDefined();
			expect(too_large).toBeFalsy();
		});

		it("Should get if a huge patch is too large and respond true", async() => {
			expect.assertions(2);

			const other_commit = await Commit.lookup(repository, "8645568c6c96300c1b7709c3a0d674c120d88a13");
			const other_patch = await Patch.fromDiff(await other_commit.diff(), 2);

			const too_large = await other_patch.isTooLarge();

			expect(too_large).toBeDefined();
			expect(too_large).toBeTruthy();
		});

		it("Should get the hunks", async() => {
			expect.hasAssertions();

			const hunks = await patch.getHunks();

			expect(hunks).toBeDefined();
			expect(hunks).toHaveLength(5);

			for(const hunk of hunks) {
				expect(hunk).toBeDefined();
				expect(hunk).toHaveProperty("new_start");
				expect(hunk).toHaveProperty("new_lines_cnt");
				expect(hunk).toHaveProperty("old_start");
				expect(hunk).toHaveProperty("old_lines_cnt");
				expect(hunk).toHaveProperty("new_lines");
				expect(hunk).toHaveProperty("deleted_lines");
				expect(hunk).toHaveProperty("hunk");
			}
		});

		it("Should get the hunks of an empty patch and respond with null", async() => {
			expect.assertions(2);

			const other_commit = await Commit.lookup(repository, "ef256e9e40b5fd0cc741c509e611808cc66bafad");
			const other_patch = await Patch.fromDiff(await other_commit.diff(), 10);

			const hunks = await other_patch.getHunks();

			expect(hunks).toBeDefined();
			expect(hunks).toBeNull();
		});
	});
});