ci: use Gitea API for releases #2
+10
-1
@@ -72,5 +72,14 @@
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { parseStudyLoadTable, parseProfilePage };
|
function parseOfferedCourses(html) {
|
||||||
|
return extractRows(html)
|
||||||
|
.filter((tds) => tds.length >= 2)
|
||||||
|
.map((tds) => ({
|
||||||
|
courseCode: tds[0].split('-')[0].trim(),
|
||||||
|
description: tds[1]
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return { parseStudyLoadTable, parseProfilePage, parseOfferedCourses };
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ const fs = require('node:fs');
|
|||||||
const path = require('node:path');
|
const path = require('node:path');
|
||||||
const { parseStudyLoadTable } = require('../parsers.js');
|
const { parseStudyLoadTable } = require('../parsers.js');
|
||||||
const { parseProfilePage } = require('../parsers.js');
|
const { parseProfilePage } = require('../parsers.js');
|
||||||
|
const { parseOfferedCourses } = require('../parsers.js');
|
||||||
|
|
||||||
const fixture = fs.readFileSync(path.join(__dirname, 'fixtures', 'study-load-table.html'), 'utf8');
|
const fixture = fs.readFileSync(path.join(__dirname, 'fixtures', 'study-load-table.html'), 'utf8');
|
||||||
const profileFixture = fs.readFileSync(path.join(__dirname, 'fixtures', 'profile.html'), 'utf8');
|
const profileFixture = fs.readFileSync(path.join(__dirname, 'fixtures', 'profile.html'), 'utf8');
|
||||||
|
const offeredFixture = fs.readFileSync(path.join(__dirname, 'fixtures', 'offered-courses.html'), 'utf8');
|
||||||
|
|
||||||
test('parseStudyLoadTable extracts all course rows', () => {
|
test('parseStudyLoadTable extracts all course rows', () => {
|
||||||
const rows = parseStudyLoadTable(fixture);
|
const rows = parseStudyLoadTable(fixture);
|
||||||
@@ -57,3 +59,15 @@ test('parseProfilePage degrades gracefully on empty input', () => {
|
|||||||
const p = parseProfilePage('');
|
const p = parseProfilePage('');
|
||||||
assert.deepStrictEqual(p, {});
|
assert.deepStrictEqual(p, {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('parseOfferedCourses extracts course code and description', () => {
|
||||||
|
const courses = parseOfferedCourses(offeredFixture);
|
||||||
|
const it3206 = courses.find(c => c.courseCode === 'IT 3206');
|
||||||
|
assert.ok(it3206, 'should find IT 3206');
|
||||||
|
assert.strictEqual(it3206.description, 'INTEGRATIVE PROGRAMMING AND TECHNOLOGY');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('parseOfferedCourses strips group suffix from code', () => {
|
||||||
|
const courses = parseOfferedCourses(offeredFixture);
|
||||||
|
assert.ok(courses.every(c => !/Group/.test(c.courseCode)));
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user