From 0b9f6488c65a7d8f5adc3e8b88ea46e1d6bab47b Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Wed, 23 Apr 2025 21:51:46 +0800 Subject: [PATCH] Update json.test.js --- tests/json.test.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/tests/json.test.js b/tests/json.test.js index 16d73c67e..dfe388803 100644 --- a/tests/json.test.js +++ b/tests/json.test.js @@ -27,6 +27,13 @@ const optionalRedirectConfigFields = { redirect_paths: "boolean" }; +const blockedFields = [ + "domain", + "internal", + "reserved", + "subdomain" +]; + const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; @@ -125,16 +132,17 @@ async function processFile(file, t) { validateFileName(t, file); - // Validate fields and duplicates + // Check for duplicate keys + const rawData = await fs.readFile(filePath, "utf8"); + const duplicateKeys = findDuplicateKeys(rawData); + t.true(!duplicateKeys.length, `${file}: Duplicate keys found: ${duplicateKeys.join(", ")}`); + + // Validate fields validateFields(t, data, requiredFields, file); validateFields(t, data.owner, requiredOwnerFields, file, "owner"); validateFields(t, data.owner, optionalOwnerFields, file, "owner"); validateFields(t, data, optionalFields, file); - if (data.redirect_config) { - validateFields(t, data.redirect_config, optionalRedirectConfigFields, file, "redirect_config"); - } - if (data.owner.email) { t.regex(data.owner.email, emailRegex, `${file}: Owner email should be a valid email address`); t.false( @@ -145,10 +153,13 @@ async function processFile(file, t) { t.true(Object.keys(data.records).length > 0, `${file}: Missing DNS records`); - // Check for duplicate keys - const rawData = await fs.readFile(filePath, "utf8"); - const duplicateKeys = findDuplicateKeys(rawData); - t.true(!duplicateKeys.length, `${file}: Duplicate keys found: ${duplicateKeys.join(", ")}`); + if (data.redirect_config) { + validateFields(t, data.redirect_config, optionalRedirectConfigFields, file, "redirect_config"); + } + + for (const field of blockedFields) { + t.true(!data.hasOwnProperty(field), `${file}: Disallowed field: ${field}`); + } } t("JSON files should not be in the root directory", (t) => {