mirror of
https://github.com/theoludwig/programming-challenges.git
synced 2024-12-08 00:45:29 +01:00
144 lines
4.3 KiB
TypeScript
144 lines
4.3 KiB
TypeScript
import test from "node:test"
|
|
import assert from "node:assert/strict"
|
|
import crypto from "node:crypto"
|
|
|
|
import sinon from "sinon"
|
|
|
|
import { Challenge } from "../Challenge.js"
|
|
import { GitAffected } from "../GitAffected.js"
|
|
import { Solution } from "../Solution.js"
|
|
import { parseCommandOutput } from "../../utils/parseCommandOutput.js"
|
|
|
|
const gitAffected = new GitAffected()
|
|
|
|
await test("services/GitAffected", async (t) => {
|
|
t.afterEach(() => {
|
|
sinon.restore()
|
|
})
|
|
|
|
t.beforeEach(() => {
|
|
sinon.stub(crypto, "randomUUID").value(() => {
|
|
return "uuid"
|
|
})
|
|
})
|
|
|
|
await t.test("parseCommandOutput", async (t) => {
|
|
await t.test("returns the right output array", async () => {
|
|
assert.deepStrictEqual(parseCommandOutput("1.txt\n 2.txt "), [
|
|
"1.txt",
|
|
"2.txt",
|
|
])
|
|
})
|
|
})
|
|
|
|
await t.test("getAffectedSolutionsFromFiles", async (t) => {
|
|
await t.test("returns the affected solutions", async () => {
|
|
const files = [
|
|
"challenges/hello-world/solutions/javascript/function/solution.js",
|
|
"challenges/is-palindrome/solutions/c/function/input.c",
|
|
]
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
|
assert.deepStrictEqual(solutions, [
|
|
new Solution({
|
|
challenge: new Challenge({ name: "hello-world" }),
|
|
name: "function",
|
|
programmingLanguageName: "javascript",
|
|
}),
|
|
new Solution({
|
|
challenge: new Challenge({ name: "is-palindrome" }),
|
|
name: "function",
|
|
programmingLanguageName: "c",
|
|
}),
|
|
])
|
|
})
|
|
|
|
await t.test(
|
|
"returns the affected solutions from Dockerfile changes",
|
|
async () => {
|
|
const files = ["templates/docker/javascript/Dockerfile"]
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
|
assert.deepStrictEqual(
|
|
solutions[0],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "camel-case" }),
|
|
name: "function",
|
|
programmingLanguageName: "javascript",
|
|
}),
|
|
)
|
|
assert.deepStrictEqual(
|
|
solutions[1],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "first-non-repeating-character" }),
|
|
name: "function",
|
|
programmingLanguageName: "javascript",
|
|
}),
|
|
)
|
|
},
|
|
)
|
|
|
|
await t.test(
|
|
"returns the affected solutions from Docker template changes",
|
|
async () => {
|
|
const files = ["templates/docker/javascript/package.json"]
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
|
assert.deepStrictEqual(
|
|
solutions[0],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "camel-case" }),
|
|
name: "function",
|
|
programmingLanguageName: "javascript",
|
|
}),
|
|
)
|
|
assert.deepStrictEqual(
|
|
solutions[1],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "first-non-repeating-character" }),
|
|
name: "function",
|
|
programmingLanguageName: "javascript",
|
|
}),
|
|
)
|
|
},
|
|
)
|
|
|
|
await t.test(
|
|
"returns the affected solutions from input/output files",
|
|
async () => {
|
|
const files = ["challenges/hello-world/test/1/input.txt"]
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
|
assert.deepStrictEqual(
|
|
solutions[0],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "hello-world" }),
|
|
name: "function",
|
|
programmingLanguageName: "c",
|
|
}),
|
|
)
|
|
assert.deepStrictEqual(
|
|
solutions[1],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "hello-world" }),
|
|
name: "function",
|
|
programmingLanguageName: "cpp",
|
|
}),
|
|
)
|
|
assert.deepStrictEqual(
|
|
solutions[2],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "hello-world" }),
|
|
name: "function",
|
|
programmingLanguageName: "cs",
|
|
}),
|
|
)
|
|
assert.deepStrictEqual(
|
|
solutions[3],
|
|
new Solution({
|
|
challenge: new Challenge({ name: "hello-world" }),
|
|
name: "function",
|
|
programmingLanguageName: "dart",
|
|
}),
|
|
)
|
|
},
|
|
)
|
|
})
|
|
})
|