const test = require('node:test'); const assert = require('node:assert/strict'); const { getDataSourceUsageMaps: getRssUsage } = require('../src/web/routes/data-sources/rss-feeds/routes'); const { getDataSourceUsageMaps: getTimetableUsage } = require('../src/web/routes/data-sources/timetables/routes'); const { getWeatherLocationUsageIds } = require('../src/web/routes/data-sources/weather'); const { isWeatherIconSetUsed } = require('../src/web/routes/settings/weather-icons'); function createPool(slideContent, templateContent) { return { async query(sql) { if (sql.includes('FROM c_slides')) return [[{ content_json: JSON.stringify(slideContent) }]]; return [[{ default_content_json: JSON.stringify(templateContent) }]]; } }; } const common = { parseJsonSafe(value) { if (typeof value === 'string') return JSON.parse(value); return value; } }; test('data-source and weather-icon usage includes template default content', async function () { const pool = createPool( { slide: { feed_id: 1, timetable_group_id: 3, weather_location_id: 5, weather_icon_set_id: 'classic' } }, { feed_id: 2, timetable_group_id: 4, weather_location_id: 6, weather_icon_set_id: 'template-icons' } ); const rssUsage = await getRssUsage(pool, common); const timetableUsage = await getTimetableUsage(pool, common); const weatherUsage = await getWeatherLocationUsageIds(pool, common); assert.deepEqual(Array.from(rssUsage).sort((a, b) => a - b), [1, 2]); assert.deepEqual(Array.from(timetableUsage).sort((a, b) => a - b), [3, 4]); assert.deepEqual(Array.from(weatherUsage).sort((a, b) => a - b), [5, 6]); assert.equal(await isWeatherIconSetUsed(pool, 'classic'), true); assert.equal(await isWeatherIconSetUsed(pool, 'template-icons'), true); assert.equal(await isWeatherIconSetUsed(pool, 'unused'), false); });