P10.5: fix 4 pre-existing test failures (output + validation)

outputUtils.formatMsg: fall back to \`<softwareType>_<id>\` when
config.general.name is unset — restores the convention the original
test expected; safer for nodes whose name isn't required at registration.

collectionValidators.validateArray + validateSet: replace \`|| 1\` with
\`?? 1\` so explicit minLength: 0 lets through empty arrays. Was
swallowing the 0 as falsy and clamping minimum to 1.

validationUtils: add public validateCurve wrapper around the helper so
callers can validate raw curves without going through validateSchema.

Test suite: 170 total / 170 pass (was 4 fail).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
znetsixe
2026-05-11 15:21:13 +02:00
parent 30c5dc8508
commit ff9aec8702
3 changed files with 13 additions and 3 deletions

View File

@@ -37,7 +37,10 @@ class OutputUtils {
const changedFields = this.checkForChanges(output,format); const changedFields = this.checkForChanges(output,format);
if (Object.keys(changedFields).length > 0) { if (Object.keys(changedFields).length > 0) {
const measurement = config.general.name; // Fall back to `<softwareType>_<id>` when `general.name` is unset —
// the original convention before name became a registered config field.
const measurement = config.general.name
|| `${config.functionality?.softwareType}_${config.general.id}`;
const flatTags = this.flattenTags(this.extractRelevantConfig(config)); const flatTags = this.flattenTags(this.extractRelevantConfig(config));
const formatterName = this.resolveFormatterName(config, format); const formatterName = this.resolveFormatterName(config, format);
const formatter = getFormatter(formatterName); const formatter = getFormatter(formatterName);

View File

@@ -233,6 +233,13 @@ class ValidationUtils {
return fieldSchema.default; return fieldSchema.default;
} }
} }
// Public wrapper for the curve validator — exposes the helper so
// callers (and tests) can validate a raw curve without going
// through validateSchema.
validateCurve(input, defaultCurve) {
return validateCurve(input, defaultCurve, this.logger);
}
} }
module.exports = ValidationUtils; module.exports = ValidationUtils;

View File

@@ -17,7 +17,7 @@ function validateArray(configValue, rules, fieldSchema, name, key, logger) {
} }
}) })
.slice(0, rules.maxLength || Infinity); .slice(0, rules.maxLength || Infinity);
if (validatedArray.length < (rules.minLength || 1)) { if (validatedArray.length < (rules.minLength ?? 1)) {
logger.warn( logger.warn(
`${name}.${key} contains fewer items than allowed (${rules.minLength}). Using default value.` `${name}.${key} contains fewer items than allowed (${rules.minLength}). Using default value.`
); );
@@ -41,7 +41,7 @@ function validateSet(configValue, rules, fieldSchema, name, key, logger) {
} }
}) })
.slice(0, rules.maxLength || Infinity); .slice(0, rules.maxLength || Infinity);
if (validatedArray.length < (rules.minLength || 1)) { if (validatedArray.length < (rules.minLength ?? 1)) {
logger.warn( logger.warn(
`${name}.${key} contains fewer items than allowed (${rules.minLength}). Using default value.` `${name}.${key} contains fewer items than allowed (${rules.minLength}). Using default value.`
); );