diff --git a/server/apiCalls/timeTable/utils/__tests__/createPlannedModularString.test.js b/server/apiCalls/timeTable/utils/__tests__/createPlannedModularString.test.js index 7a55e2d8..4d7fe2c8 100644 --- a/server/apiCalls/timeTable/utils/__tests__/createPlannedModularString.test.js +++ b/server/apiCalls/timeTable/utils/__tests__/createPlannedModularString.test.js @@ -1,5 +1,16 @@ const { createPlannedModularString } = require('../createPlannedModularString') +const alphabeticallySortedModules = [ + 'module_p1_G2', + 'module_p1_B2', + 'module_p1_J2', + 'module_p1_B1', + 'module_p1_D1', + 'module_p1_E2', + 'module_p1_G1', + 'module_p1_I1', +] + describe('createPlannedModularString', () => { test('returns empty string if empty modules', () => { expect(createPlannedModularString([])).toStrictEqual('') @@ -31,4 +42,8 @@ describe('createPlannedModularString', () => { ])('combines several schemas for different periods', (expected, modules) => { expect(createPlannedModularString(modules)).toStrictEqual(expected) }) + + test('sorts modules first by digit, then letter', () => { + expect(createPlannedModularString(alphabeticallySortedModules)).toStrictEqual('P1: B1, D1, G1, I1, B2, E2, G2, J2.') + }) }) diff --git a/server/apiCalls/timeTable/utils/createPlannedModularString.js b/server/apiCalls/timeTable/utils/createPlannedModularString.js index 60dddd64..715f8284 100644 --- a/server/apiCalls/timeTable/utils/createPlannedModularString.js +++ b/server/apiCalls/timeTable/utils/createPlannedModularString.js @@ -20,6 +20,13 @@ const addKeyIfNonexistent = (obj, key) => { } } +const sortModulesByDigitAndLetter = (a, b) => { + const [letterA, digitA] = a + const [letterB, digitB] = b + + return Number(digitA) - Number(digitB) || letterA.localeCompare(letterB) +} + const createPeriodSchemaMapping = modules => { const mapping = {} modules.forEach(moduleString => { @@ -36,7 +43,9 @@ const createPeriodSchemaStrings = modules => { const mapping = createPeriodSchemaMapping(modules) return Object.keys(mapping).map(period => { - const schemaString = mapping[period].join(', ') + const sortedModules = mapping[period].sort(sortModulesByDigitAndLetter) + + const schemaString = sortedModules.join(', ') return `${period}: ${schemaString}.` })