Files
metabuilder/packages/form_builder/seed/scripts/tests/validate.test.lua
2025-12-30 12:58:42 +00:00

106 lines
3.5 KiB
Lua

-- Validation Tests
-- Parameterized tests for form validation rules
local describe = require("lua_test.describe")
local it = require("lua_test.it")
local it_each = require("lua_test.it_each")
local expect = require("lua_test.expect")
local cases = require("tests.validate.cases")
local required = require("validate.required")
local email = require("validate.email")
local min_length = require("validate.min_length")
local max_length = require("validate.max_length")
local pattern = require("validate.pattern")
describe("form validation", function()
describe("required", function()
it("should create required rule with default message", function()
local rule = required()
expect(rule.type).toBe("required")
expect(rule.message).toBe("This field is required")
end)
it_each(cases.required.customMessage, "should use custom message: '$message'", function(case)
local rule = required(case.message)
expect(rule.message).toBe(case.message)
end)
end)
describe("email", function()
it("should create email rule with pattern", function()
local rule = email()
expect(rule.type).toBe("email")
expect(rule.pattern).toBeTruthy()
end)
it_each(cases.email.validPatterns, "pattern should match '$email'", function(case)
local rule = email()
local matches = string.match(case.email, rule.pattern)
expect(matches).toBeTruthy()
end)
it_each(cases.email.invalidPatterns, "pattern should reject '$email'", function(case)
local rule = email()
local matches = string.match(case.email, rule.pattern)
expect(matches).toBe(nil)
end)
it_each(cases.email.customMessage, "should use custom message: '$message'", function(case)
local rule = email(case.message)
expect(rule.message).toBe(case.message)
end)
end)
describe("min_length", function()
it_each(cases.minLength.rules, "should create rule for min $length chars", function(case)
local rule = min_length(case.length)
expect(rule.type).toBe("minLength")
expect(rule.value).toBe(case.length)
end)
it("should generate default message with length", function()
local rule = min_length(8)
expect(rule.message).toContain("8")
end)
it_each(cases.minLength.customMessage, "should use custom message", function(case)
local rule = min_length(case.length, case.message)
expect(rule.message).toBe(case.message)
end)
end)
describe("max_length", function()
it_each(cases.maxLength.rules, "should create rule for max $length chars", function(case)
local rule = max_length(case.length)
expect(rule.type).toBe("maxLength")
expect(rule.value).toBe(case.length)
end)
it("should generate default message with length", function()
local rule = max_length(100)
expect(rule.message).toContain("100")
end)
end)
describe("pattern", function()
it_each(cases.pattern.rules, "should create rule with pattern: $name", function(case)
local rule = pattern(case.regex, case.message)
expect(rule.type).toBe("pattern")
expect(rule.pattern).toBe(case.regex)
end)
it_each(cases.pattern.matchTests, "pattern '$regex' should match '$value'", function(case)
local matches = string.match(case.value, case.regex)
expect(matches ~= nil).toBe(case.expected)
end)
end)
end)
return {
name = "validate.test",
description = "Tests for form validation rules"
}