From be979a77c77ef22e22926f1c0db8d12043822ea7 Mon Sep 17 00:00:00 2001 From: Muhammad Atif Akram <46080087+codestacx@users.noreply.github.com> Date: Thu, 4 Sep 2025 18:06:13 +0500 Subject: [PATCH] Apply changes to test/default-value.test.js for issue #483 --- test/default-value.test.js | 163 +++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 test/default-value.test.js diff --git a/test/default-value.test.js b/test/default-value.test.js new file mode 100644 index 0000000..a259545 --- /dev/null +++ b/test/default-value.test.js @@ -0,0 +1,163 @@ +'use strict'; + + + +const fs = require('fs'); + +const path = require('path'); + +const os = require('os'); + +const t = require('tap'); + +const i18n = require('..'); + + + +function tmpDir() { + + return fs.mkdtempSync(path.join(os.tmpdir(), 'i18n-node-')); + +} + + + +function readJSON(file) { + + return JSON.parse(fs.readFileSync(file, 'utf8')); + +} + + + +t.test('defaultValue is returned when key is missing', (t) => { + + const dir = tmpDir(); + + i18n.configure({ + + locales: ['en'], + + directory: dir, + + updateFiles: false, + + objectNotation: false + + }); + + + + const res = i18n.__('missing_key', { defaultValue: 'default_value' }); + + t.equal(res, 'default_value', 'returns provided defaultValue'); + + t.end(); + +}); + + + +t.test('defaultValue is persisted when updateFiles is true', (t) => { + + const dir = tmpDir(); + + i18n.configure({ + + locales: ['en'], + + directory: dir, + + updateFiles: true, + + objectNotation: false + + }); + + + + const file = path.join(dir, 'en.json'); + + const key = 'hello'; + + const def = 'default_value'; + + const res = i18n.__(key, { defaultValue: def }); + + t.equal(res, def, 'returns defaultValue'); + + + + t.equal(fs.existsSync(file), true, 'en.json is written'); + + const data = readJSON(file); + + t.same(data[key], def, 'defaultValue persisted to file for missing key'); + + t.end(); + +}); + + + +t.test('existing keys ignore defaultValue and return stored translation', (t) => { + + const dir = tmpDir(); + + i18n.configure({ locales: ['en'], directory: dir, updateFiles: true }); + + + + const file = path.join(dir, 'en.json'); + + fs.writeFileSync(file, JSON.stringify({ greeting: 'Hola' }, null, 2)); + + // reload to pick up the file + + i18n.configure({ locales: ['en'], directory: dir, updateFiles: true }); + + + + const res = i18n.__('greeting', { defaultValue: 'Hello' }); + + t.equal(res, 'Hola', 'uses stored translation, not defaultValue'); + + t.end(); + +}); + + + +t.test('without defaultValue, missingKeyFn/key continues to be used', (t) => { + + const dir = tmpDir(); + + i18n.configure({ locales: ['en'], directory: dir, updateFiles: true }); + + + + const res = i18n.__('missing_key_2'); + + t.equal(res, 'missing_key_2', 'falls back to key by default'); + + t.end(); + +}); + + + +t.test('sprintf args and defaultValue work together', (t) => { + + const dir = tmpDir(); + + i18n.configure({ locales: ['en'], directory: dir, updateFiles: true }); + + + + const res = i18n.__('welcome %s', 'Ada', { defaultValue: 'Welcome!' }); + + t.equal(res, 'Welcome!', 'uses defaultValue when key is missing despite sprintf args being provided'); + + t.end(); + +});