import { test } from 'node:test'; import assert from 'node:assert/strict'; import { countLabel, directionLabel, groupStops } from '../src/lib/stopGroups.ts'; test('names are grouped like the landing while direction IDs remain independent', () => { const groups = groupStops([ { id: 1, name: ' Площадь Свободы ', direction: 'В центр', routesCount: 2 }, { id: 2, name: 'площадь свободы', direction: 'Из центра', routesCount: 3 }, { id: 1, name: 'Площадь Свободы', direction: 'Duplicate ID', routesCount: 2 }, { id: 3, name: 'Автовокзал', direction: '', routesCount: 1 }, ]); assert.equal(groups.length, 2); assert.equal(groups[0].name, 'Автовокзал'); assert.equal(groups[1].name, 'Площадь Свободы'); assert.deepEqual(groups[1].stops.map(stop => stop.id), [1, 2]); }); test('direction labels distinguish unlabeled and repeated directions', () => { const stops = [ { id: 1, name: 'Вокзал', direction: 'В центр', routesCount: 2 }, { id: 2, name: 'Вокзал', direction: 'В центр', routesCount: 2 }, { id: 3, name: 'Вокзал', direction: '', routesCount: 2 }, ]; const group = groupStops(stops)[0]; assert.equal(directionLabel(group, stops[0], 0), 'В центр · 1'); assert.equal(directionLabel(group, stops[1], 1), 'В центр · 2'); assert.equal(directionLabel(group, stops[2], 2), 'Направление 3'); }); test('the list retains more than eighty stops and uses correct count labels', () => { const stops = Array.from({ length: 120 }, (_, index) => ({ id: index + 1, name: `Остановка ${index + 1}`, direction: '', routesCount: 1 })); assert.equal(groupStops(stops).length, 120); const forms = ['остановка', 'остановки', 'остановок']; assert.equal(countLabel(1, forms), '1 остановка'); assert.equal(countLabel(2, forms), '2 остановки'); assert.equal(countLabel(11, forms), '11 остановок'); assert.equal(countLabel(21, forms), '21 остановка'); });