Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import { inject, TestBed } from "@angular/core/testing";
import { ValidationWorkflowService } from "./validation-workflow.service";
import type { Validation } from "./validation-workflow.service";
import {
mockPoint,
mockResultPredicate,
Expand Down Expand Up @@ -228,3 +229,44 @@ describe("ValidationWorkflowService", () => {
expect(Object.entries(validationWorkflowService.getCurrentWorkflowValidationError().errors).length).toEqual(0);
});
});

describe("ValidationWorkflowService.combineValidation", () => {
it("should return valid when no validations are provided", () => {
const result = ValidationWorkflowService.combineValidation();
// a valid result carries no messages
expect(result).toEqual({ isValid: true });
});

it("should return valid when all provided validations are valid", () => {
const a: Validation = { isValid: true };
const b: Validation = { isValid: true };
const result = ValidationWorkflowService.combineValidation(a, b);
expect(result).toEqual({ isValid: true });
});

it("should return invalid and only include messages from invalid validations", () => {
const valid: Validation = { isValid: true };
const invalid: Validation = { isValid: false, messages: { inputs: "requires at least 1 inputs" } };
const result = ValidationWorkflowService.combineValidation(valid, invalid);
// valid validation contributes no messages, so only the invalid one's message is kept
expect(result).toEqual({ isValid: false, messages: { inputs: "requires at least 1 inputs" } });
});

it("should merge messages from multiple invalid validations", () => {
const invalidA: Validation = { isValid: false, messages: { inputs: "missing input" } };
const invalidB: Validation = { isValid: false, messages: { required: "field is required" } };
const result = ValidationWorkflowService.combineValidation(invalidA, invalidB);
expect(result).toEqual({
isValid: false,
messages: { inputs: "missing input", required: "field is required" },
});
});

it("should let a later invalid validation override an earlier message with the same key", () => {
const first: Validation = { isValid: false, messages: { inputs: "first message" } };
const second: Validation = { isValid: false, messages: { inputs: "second message" } };
const result = ValidationWorkflowService.combineValidation(first, second);
// the spread merge keeps the last writer for a duplicate key
expect(result).toEqual({ isValid: false, messages: { inputs: "second message" } });
});
});
Loading