2023-07-20 22:00:11 +02:00
|
|
|
import test from 'node:test'
|
|
|
|
import assert from 'node:assert/strict'
|
2022-09-22 16:16:21 +02:00
|
|
|
import crypto from 'node:crypto'
|
|
|
|
|
|
|
|
import sinon from 'sinon'
|
2022-04-23 18:41:14 +02:00
|
|
|
|
2022-02-19 18:30:29 +01:00
|
|
|
import { Challenge } from '../Challenge.js'
|
|
|
|
import { GitAffected } from '../GitAffected.js'
|
|
|
|
import { Solution } from '../Solution.js'
|
2022-09-22 16:16:21 +02:00
|
|
|
import { parseCommandOutput } from '../../utils/parseCommandOutput.js'
|
2021-12-07 12:11:54 +01:00
|
|
|
|
2022-09-22 16:16:21 +02:00
|
|
|
const gitAffected = new GitAffected()
|
2021-12-07 12:11:54 +01:00
|
|
|
|
2023-07-20 22:00:11 +02:00
|
|
|
await test('services/GitAffected', async (t) => {
|
2022-09-22 16:16:21 +02:00
|
|
|
t.afterEach(() => {
|
|
|
|
sinon.restore()
|
|
|
|
})
|
|
|
|
|
|
|
|
t.beforeEach(() => {
|
|
|
|
sinon.stub(crypto, 'randomUUID').value(() => {
|
|
|
|
return 'uuid'
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
await t.test('parseCommandOutput', async (t) => {
|
2023-07-20 22:00:11 +02:00
|
|
|
await t.test('returns the right output array', async () => {
|
|
|
|
assert.deepStrictEqual(parseCommandOutput('1.txt\n 2.txt '), [
|
|
|
|
'1.txt',
|
|
|
|
'2.txt'
|
|
|
|
])
|
2022-04-23 18:41:14 +02:00
|
|
|
})
|
2021-12-07 12:11:54 +01:00
|
|
|
})
|
|
|
|
|
2022-04-23 18:41:14 +02:00
|
|
|
await t.test('getAffectedSolutionsFromFiles', async (t) => {
|
2023-07-20 22:00:11 +02:00
|
|
|
await t.test('returns the affected solutions', async () => {
|
2022-04-23 18:41:14 +02:00
|
|
|
const files = [
|
|
|
|
'challenges/hello-world/solutions/javascript/function/solution.js',
|
|
|
|
'challenges/is-palindrome/solutions/c/function/input.c'
|
|
|
|
]
|
|
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(solutions, [
|
2022-04-23 18:41:14 +02:00
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'hello-world' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'javascript'
|
|
|
|
}),
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'is-palindrome' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'c'
|
|
|
|
})
|
|
|
|
])
|
|
|
|
})
|
2021-12-07 12:11:54 +01:00
|
|
|
|
2022-04-23 18:41:14 +02:00
|
|
|
await t.test(
|
|
|
|
'returns the affected solutions from Dockerfile changes',
|
2023-07-20 22:00:11 +02:00
|
|
|
async () => {
|
2022-04-23 18:41:14 +02:00
|
|
|
const files = ['templates/docker/javascript/Dockerfile']
|
|
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[0],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'camel-case' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'javascript'
|
|
|
|
})
|
|
|
|
)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[1],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'first-non-repeating-character' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'javascript'
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
2021-12-07 12:11:54 +01:00
|
|
|
)
|
|
|
|
|
2022-04-23 18:41:14 +02:00
|
|
|
await t.test(
|
|
|
|
'returns the affected solutions from Docker template changes',
|
2023-07-20 22:00:11 +02:00
|
|
|
async () => {
|
2022-04-23 18:41:14 +02:00
|
|
|
const files = ['templates/docker/javascript/package.json']
|
|
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[0],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'camel-case' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'javascript'
|
|
|
|
})
|
|
|
|
)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[1],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'first-non-repeating-character' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'javascript'
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
2021-12-07 12:11:54 +01:00
|
|
|
)
|
|
|
|
|
2022-04-23 18:41:14 +02:00
|
|
|
await t.test(
|
|
|
|
'returns the affected solutions from input/output files',
|
2023-07-20 22:00:11 +02:00
|
|
|
async () => {
|
2022-04-23 18:41:14 +02:00
|
|
|
const files = ['challenges/hello-world/test/1/input.txt']
|
|
|
|
const solutions = await gitAffected.getAffectedSolutionsFromFiles(files)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[0],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'hello-world' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'c'
|
|
|
|
})
|
|
|
|
)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[1],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'hello-world' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'cpp'
|
|
|
|
})
|
|
|
|
)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[2],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'hello-world' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'cs'
|
|
|
|
})
|
|
|
|
)
|
2023-07-20 22:00:11 +02:00
|
|
|
assert.deepStrictEqual(
|
2022-04-23 18:41:14 +02:00
|
|
|
solutions[3],
|
|
|
|
new Solution({
|
|
|
|
challenge: new Challenge({ name: 'hello-world' }),
|
|
|
|
name: 'function',
|
|
|
|
programmingLanguageName: 'dart'
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
2021-12-07 12:11:54 +01:00
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|