diff --git a/packages/smtp_config/seed/scripts/tests/smtp.test.lua b/packages/smtp_config/seed/scripts/tests/smtp.test.lua new file mode 100644 index 000000000..7ceefc5f2 --- /dev/null +++ b/packages/smtp_config/seed/scripts/tests/smtp.test.lua @@ -0,0 +1,63 @@ +-- SMTP module tests +-- Uses lua_test framework with parameterized test cases + +describe("SMTP Module", function() + local cases = load_cases("smtp.cases.json") + local smtp = require("smtp") + + describe("getDefaults", function() + it_each(cases.getDefaults, "$desc", function(tc) + local result = smtp.getDefaults() + expect(result).toBeDefined() + for _, key in ipairs(tc.expected_keys) do + expect(result[key]).toBeDefined() + end + end) + end) + + describe("getFields", function() + it_each(cases.getFields, "$desc", function(tc) + local result = smtp.getFields() + expect(#result).toBe(tc.expected_count) + end) + end) + + describe("getField", function() + it("returns field definition by name", function() + local field = smtp.getField("host") + expect(field).toBeDefined() + expect(field.name).toBe("host") + expect(field.label).toBeDefined() + end) + + it("returns nil for non-existent field", function() + local field = smtp.getField("nonexistent") + expect(field).toBeNil() + end) + end) + + describe("validate", function() + it_each(cases.validate.valid, "$desc", function(tc) + local result = smtp.validate(tc.input) + expect(result.valid).toBe(true) + expect(next(result.errors)).toBe(nil) + end) + + it_each(cases.validate.invalid, "$desc", function(tc) + local result = smtp.validate(tc.input) + expect(result.valid).toBe(false) + expect(result.errors[tc.expected_error]).toBeDefined() + end) + end) + + describe("createDefault", function() + it("creates a valid default configuration", function() + local config = smtp.createDefault() + local validation = smtp.validate(config) + -- Default may not be valid (empty username/password) but should have structure + expect(config).toBeDefined() + expect(config.host).toBeDefined() + expect(config.port).toBeDefined() + end) + end) +end) diff --git a/packages/smtp_config/seed/scripts/tests/validate.cases.json b/packages/smtp_config/seed/scripts/tests/validate.cases.json new file mode 100644 index 000000000..4ee5bafb1 --- /dev/null +++ b/packages/smtp_config/seed/scripts/tests/validate.cases.json @@ -0,0 +1,30 @@ +{ + "validate": [ + { + "desc": "validates complete config", + "input": { + "host": "smtp.example.com", + "port": 587, + "username": "user", + "password": "pass", + "fromEmail": "test@example.com", + "fromName": "Test", + "secure": true + }, + "expected_valid": true + }, + { + "desc": "rejects incomplete config", + "input": { + "host": "", + "port": 587, + "username": "", + "password": "", + "fromEmail": "", + "fromName": "", + "secure": false + }, + "expected_valid": false + } + ] +} diff --git a/packages/smtp_config/seed/scripts/tests/validate.test.lua b/packages/smtp_config/seed/scripts/tests/validate.test.lua new file mode 100644 index 000000000..1ddecc9ba --- /dev/null +++ b/packages/smtp_config/seed/scripts/tests/validate.test.lua @@ -0,0 +1,14 @@ +-- Validation module tests + +describe("Validate Module", function() + local cases = load_cases("validate.cases.json") + local validate = require("validate") + + describe("validate", function() + it_each(cases.validate, "$desc", function(tc) + local result = validate.validate(tc.input) + expect(result).toBeDefined() + expect(result.valid).toBe(tc.expected_valid) + end) + end) +end)