ISMIS Helper: cross-browser build, CI, PDF fixes, Chrome download fix #1
+13
-1
@@ -81,5 +81,17 @@
|
||||
}));
|
||||
}
|
||||
|
||||
return { parseStudyLoadTable, parseProfilePage, parseOfferedCourses };
|
||||
function filterStudyLoadCourses(courses) {
|
||||
return (courses || []).filter(
|
||||
(c) => String(c.status || '').trim().toUpperCase() !== 'DISSOLVED'
|
||||
);
|
||||
}
|
||||
|
||||
function sumUnits(courses) {
|
||||
return (courses || [])
|
||||
.reduce((sum, c) => sum + (parseFloat(c.units) || 0), 0)
|
||||
.toFixed(2);
|
||||
}
|
||||
|
||||
return { parseStudyLoadTable, parseProfilePage, parseOfferedCourses, filterStudyLoadCourses, sumUnits };
|
||||
});
|
||||
|
||||
@@ -73,3 +73,25 @@ test('parseOfferedCourses strips group suffix from code', () => {
|
||||
const it3206n = courses.find(c => c.courseCode === 'IT 3206N');
|
||||
assert.ok(it3206n, 'should find IT 3206N');
|
||||
});
|
||||
|
||||
const { filterStudyLoadCourses, sumUnits } = require('../parsers.js');
|
||||
|
||||
test('filterStudyLoadCourses excludes DISSOLVED courses', () => {
|
||||
const courses = [
|
||||
{ courseCode: 'CS 5105', status: 'DISSOLVED', units: '3.00' },
|
||||
{ courseCode: 'IT 3206', status: 'PARALLEL', units: '3.00' },
|
||||
{ courseCode: 'IT 4102N', status: 'REGULAR', units: '3.00' }
|
||||
];
|
||||
const filtered = filterStudyLoadCourses(courses);
|
||||
assert.deepStrictEqual(filtered.map((c) => c.courseCode), ['IT 3206', 'IT 4102N']);
|
||||
});
|
||||
|
||||
test('filterStudyLoadCourses handles missing status', () => {
|
||||
const filtered = filterStudyLoadCourses([{ courseCode: 'X', status: '', units: '1' }]);
|
||||
assert.strictEqual(filtered.length, 1);
|
||||
});
|
||||
|
||||
test('sumUnits computes total from course units', () => {
|
||||
const courses = [{ units: '3.00' }, { units: '3.00' }, { units: '2.00' }];
|
||||
assert.strictEqual(sumUnits(courses), '8.00');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user