const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const { buildDuplicateWeatherLocationName, buildDuplicateWeatherLocation } = require('../src/web/routes/data-sources/weather/duplicate'); test('weather location duplicate helper copies settings and resets runtime state', () => { const location = { id: 7, name: 'London', location_label: 'London, UK', latitude: 51.5074, longitude: -0.1278, timezone: 'Europe/London', provider: 'open-meteo', temperature_unit: 'celsius', wind_unit: 'kmh', precipitation_unit: 'mm', update_interval_value: 30, update_interval_unit: 'minutes', last_pulled_at: '2026-08-28T10:00:00.000Z', last_pull_error: 'Bad response', last_response_status: 500, last_response_content_type: 'application/json', last_response_json: '{"ok":false}' }; const duplicate = buildDuplicateWeatherLocation(location, buildDuplicateWeatherLocationName(location.name)); assert.equal(duplicate.id, null); assert.equal(duplicate.name, 'Copy of London'); assert.equal(duplicate.location_label, 'London, UK'); assert.equal(duplicate.latitude, 51.5074); assert.equal(duplicate.longitude, -0.1278); assert.equal(duplicate.provider, 'open-meteo'); assert.equal(duplicate.update_interval_value, 30); assert.equal(duplicate.last_pulled_at, null); assert.equal(duplicate.last_pull_error, ''); assert.equal(duplicate.last_response_status, null); assert.equal(duplicate.last_response_json, ''); }); test('weather list template includes duplicate action', () => { const template = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'views', 'data-sources', 'weather', 'list.hbs'), 'utf8'); assert.match(template, /\/data-sources\/weather\/{\{id\}\}\/duplicate/); assert.match(template, />Dupe<\/a>/); });