mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
feat: Add lua_test as a devDependency and implement validation tests for audit_log and code_editor packages
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
"category": "admin",
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test",
|
||||
"package_validator"
|
||||
],
|
||||
"exports": {
|
||||
|
||||
64
packages/audit_log/seed/scripts/tests/components.test.lua
Normal file
64
packages/audit_log/seed/scripts/tests/components.test.lua
Normal file
@@ -0,0 +1,64 @@
|
||||
-- Component validation tests for audit_log package
|
||||
local components = load_cases("components.json")
|
||||
|
||||
describe("Audit Log Components", function()
|
||||
it("should be a valid array", function()
|
||||
expect(components).toBeType("table")
|
||||
expect(#components).toBeGreaterThan(0)
|
||||
end)
|
||||
|
||||
it("should have valid component structure", function()
|
||||
for _, component in ipairs(components) do
|
||||
expect(component.id).toBeTruthy()
|
||||
expect(component.type).toBeTruthy()
|
||||
expect(component.id).toBeType("string")
|
||||
expect(component.type).toBeType("string")
|
||||
end
|
||||
end)
|
||||
|
||||
it("should have audit_stats_cards component", function()
|
||||
local found = false
|
||||
for _, component in ipairs(components) do
|
||||
if component.id == "audit_stats_cards" then
|
||||
found = true
|
||||
expect(component.name).toBe("Audit Stats Cards")
|
||||
expect(component.props).toBeTruthy()
|
||||
expect(component.props.stats).toBeTruthy()
|
||||
expect(component.layout).toBeTruthy()
|
||||
expect(component.layout.type).toBe("Grid")
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end)
|
||||
|
||||
it("should have audit_log_viewer component", function()
|
||||
local found = false
|
||||
for _, component in ipairs(components) do
|
||||
if component.id == "audit_log_viewer" then
|
||||
found = true
|
||||
expect(component.name).toBe("Audit Log Viewer")
|
||||
expect(component.props).toBeTruthy()
|
||||
expect(component.bindings).toBeTruthy()
|
||||
expect(component.bindings.dbal).toBe(true)
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end)
|
||||
|
||||
it("should have required scripts in components", function()
|
||||
for _, component in ipairs(components) do
|
||||
if component.scripts then
|
||||
expect(component.scripts).toBeType("table")
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
it("should have valid layout structures", function()
|
||||
for _, component in ipairs(components) do
|
||||
if component.layout then
|
||||
expect(component.layout.type).toBeTruthy()
|
||||
expect(component.layout.type).toBeType("string")
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
80
packages/audit_log/seed/scripts/tests/metadata.test.lua
Normal file
80
packages/audit_log/seed/scripts/tests/metadata.test.lua
Normal file
@@ -0,0 +1,80 @@
|
||||
-- Metadata validation tests for audit_log package
|
||||
local metadata = load_cases("metadata.json")
|
||||
|
||||
describe("Audit Log Package Metadata", function()
|
||||
it("should have valid package structure", function()
|
||||
expect(metadata.packageId).toBe("audit_log")
|
||||
expect(metadata.name).toBe("Audit Log")
|
||||
expect(metadata.version).toBeTruthy()
|
||||
expect(metadata.description).toBeTruthy()
|
||||
end)
|
||||
|
||||
it("should have correct package ID format", function()
|
||||
expect(metadata.packageId).toMatch("^[a-z_]+$")
|
||||
end)
|
||||
|
||||
it("should have semantic version", function()
|
||||
expect(metadata.version).toMatch("^%d+%.%d+%.%d+$")
|
||||
end)
|
||||
|
||||
it("should have exports defined", function()
|
||||
expect(metadata.exports).toBeTruthy()
|
||||
expect(metadata.exports.components).toBeType("table")
|
||||
expect(metadata.exports.scripts).toBeType("table")
|
||||
end)
|
||||
|
||||
it("should export required components", function()
|
||||
local expected_components = {
|
||||
"AuditLogViewer",
|
||||
"AuditStatsCard",
|
||||
"LogTable",
|
||||
"LogFilters"
|
||||
}
|
||||
|
||||
for _, comp in ipairs(expected_components) do
|
||||
local found = false
|
||||
for _, exported in ipairs(metadata.exports.components) do
|
||||
if exported == comp then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end
|
||||
end)
|
||||
|
||||
it("should export required scripts", function()
|
||||
local expected_scripts = {
|
||||
"init",
|
||||
"stats",
|
||||
"filters",
|
||||
"formatting"
|
||||
}
|
||||
|
||||
for _, script in ipairs(expected_scripts) do
|
||||
local found = false
|
||||
for _, exported in ipairs(metadata.exports.scripts) do
|
||||
if exported == script then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end
|
||||
end)
|
||||
|
||||
it("should have correct bindings", function()
|
||||
expect(metadata.bindings).toBeTruthy()
|
||||
expect(metadata.bindings.dbal).toBe(true)
|
||||
expect(metadata.bindings.browser).toBe(false)
|
||||
end)
|
||||
|
||||
it("should be admin category", function()
|
||||
expect(metadata.category).toBe("admin")
|
||||
end)
|
||||
|
||||
it("should have devDependencies", function()
|
||||
expect(metadata.devDependencies).toBeType("table")
|
||||
expect(#metadata.devDependencies).toBeGreaterThan(0)
|
||||
end)
|
||||
end)
|
||||
89
packages/audit_log/seed/scripts/tests/stats.test.lua
Normal file
89
packages/audit_log/seed/scripts/tests/stats.test.lua
Normal file
@@ -0,0 +1,89 @@
|
||||
-- Stats calculation tests for audit_log package
|
||||
local stats = require("stats")
|
||||
|
||||
describe("Audit Log Stats Module", function()
|
||||
describe("calculateStats", function()
|
||||
it("should calculate stats from empty logs", function()
|
||||
local logs = {}
|
||||
local result = stats.calculateStats(logs)
|
||||
|
||||
expect(result.total).toBe(0)
|
||||
expect(result.successful).toBe(0)
|
||||
expect(result.failed).toBe(0)
|
||||
expect(result.rateLimit).toBe(0)
|
||||
end)
|
||||
|
||||
it("should calculate stats from successful logs", function()
|
||||
local logs = {
|
||||
{ success = true },
|
||||
{ success = true },
|
||||
{ success = true }
|
||||
}
|
||||
local result = stats.calculateStats(logs)
|
||||
|
||||
expect(result.total).toBe(3)
|
||||
expect(result.successful).toBe(3)
|
||||
expect(result.failed).toBe(0)
|
||||
expect(result.rateLimit).toBe(0)
|
||||
end)
|
||||
|
||||
it("should calculate stats from failed logs", function()
|
||||
local logs = {
|
||||
{ success = false, error = "Permission denied" },
|
||||
{ success = false, error = "Not found" }
|
||||
}
|
||||
local result = stats.calculateStats(logs)
|
||||
|
||||
expect(result.total).toBe(2)
|
||||
expect(result.successful).toBe(0)
|
||||
expect(result.failed).toBe(2)
|
||||
expect(result.rateLimit).toBe(0)
|
||||
end)
|
||||
|
||||
it("should calculate stats from rate limited logs", function()
|
||||
local logs = {
|
||||
{ success = false, error = "Rate limit exceeded" },
|
||||
{ success = false, error = "Rate limit exceeded" }
|
||||
}
|
||||
local result = stats.calculateStats(logs)
|
||||
|
||||
expect(result.total).toBe(2)
|
||||
expect(result.successful).toBe(0)
|
||||
expect(result.failed).toBe(0)
|
||||
expect(result.rateLimit).toBe(2)
|
||||
end)
|
||||
|
||||
it("should calculate mixed stats", function()
|
||||
local logs = {
|
||||
{ success = true },
|
||||
{ success = false, error = "Permission denied" },
|
||||
{ success = false, error = "Rate limit exceeded" },
|
||||
{ success = true }
|
||||
}
|
||||
local result = stats.calculateStats(logs)
|
||||
|
||||
expect(result.total).toBe(4)
|
||||
expect(result.successful).toBe(2)
|
||||
expect(result.failed).toBe(1)
|
||||
expect(result.rateLimit).toBe(1)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("prepareStatsDisplay", function()
|
||||
it("should format stats for display", function()
|
||||
local stats_data = {
|
||||
total = 100,
|
||||
successful = 75,
|
||||
failed = 20,
|
||||
rateLimit = 5
|
||||
}
|
||||
local result = stats.prepareStatsDisplay(stats_data)
|
||||
|
||||
expect(result).toBeTruthy()
|
||||
expect(result.total).toBe(100)
|
||||
expect(result.successful).toBe(75)
|
||||
expect(result.failed).toBe(20)
|
||||
expect(result.rateLimit).toBe(5)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
@@ -7,6 +7,9 @@
|
||||
"author": "MetaBuilder",
|
||||
"category": "editors",
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"scripts": [
|
||||
"json",
|
||||
|
||||
19
packages/code_editor/seed/scripts/tests/components.test.lua
Normal file
19
packages/code_editor/seed/scripts/tests/components.test.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
-- Component validation tests for code_editor package
|
||||
local components = load_cases("components.json")
|
||||
|
||||
describe("Code Editor Components", function()
|
||||
it("should be a valid array", function()
|
||||
expect(components).toBeType("table")
|
||||
end)
|
||||
|
||||
it("should have valid component structure if components exist", function()
|
||||
if #components > 0 then
|
||||
for _, component in ipairs(components) do
|
||||
expect(component.id).toBeTruthy()
|
||||
expect(component.type).toBeTruthy()
|
||||
expect(component.id).toBeType("string")
|
||||
expect(component.type).toBeType("string")
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
54
packages/code_editor/seed/scripts/tests/metadata.test.lua
Normal file
54
packages/code_editor/seed/scripts/tests/metadata.test.lua
Normal file
@@ -0,0 +1,54 @@
|
||||
-- Metadata validation tests for code_editor package
|
||||
local metadata = load_cases("metadata.json")
|
||||
|
||||
describe("Code Editor Package Metadata", function()
|
||||
it("should have valid package structure", function()
|
||||
expect(metadata.packageId).toBe("code_editor")
|
||||
expect(metadata.name).toBe("Code Editor")
|
||||
expect(metadata.version).toBeTruthy()
|
||||
expect(metadata.description).toBeTruthy()
|
||||
end)
|
||||
|
||||
it("should be in editors category", function()
|
||||
expect(metadata.category).toBe("editors")
|
||||
end)
|
||||
|
||||
it("should export required scripts", function()
|
||||
local expected_scripts = { "json", "lua", "theme" }
|
||||
|
||||
for _, script in ipairs(expected_scripts) do
|
||||
local found = false
|
||||
for _, exported in ipairs(metadata.exports.scripts) do
|
||||
if exported == script then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end
|
||||
end)
|
||||
|
||||
it("should export required components", function()
|
||||
local expected_components = {
|
||||
"CodeEditor",
|
||||
"JsonEditor",
|
||||
"LuaEditor",
|
||||
"ThemeEditor"
|
||||
}
|
||||
|
||||
for _, comp in ipairs(expected_components) do
|
||||
local found = false
|
||||
for _, exported in ipairs(metadata.exports.components) do
|
||||
if exported == comp then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
expect(found).toBe(true)
|
||||
end
|
||||
end)
|
||||
|
||||
it("should have correct minLevel", function()
|
||||
expect(metadata.minLevel).toBe(5)
|
||||
end)
|
||||
end)
|
||||
124
packages/package_validator/PACKAGE_ANALYSIS.md
Normal file
124
packages/package_validator/PACKAGE_ANALYSIS.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# Package Analysis - Testing Patterns
|
||||
|
||||
## Overview
|
||||
|
||||
This document provides an analysis of testing patterns across MetaBuilder packages.
|
||||
|
||||
## Package Distribution
|
||||
|
||||
- **Total Packages**: 36
|
||||
- **Packages with `lua_test`**: 30 (83%)
|
||||
- **Packages without `lua_test`**: 6 (17%)
|
||||
|
||||
## Packages WITHOUT lua_test
|
||||
|
||||
The following packages do not use `lua_test` as a devDependency:
|
||||
|
||||
1. **audit_log** - Security audit log viewer
|
||||
- Now includes `package_validator` as devDependency
|
||||
- Could benefit from tests for stats and filtering logic
|
||||
|
||||
2. **code_editor** - Code editor components
|
||||
- JSON, Lua, and theme editing functionality
|
||||
- Could benefit from editor validation tests
|
||||
|
||||
3. **dbal_demo** - DBAL Integration Demo
|
||||
- Demonstrates database operations
|
||||
- May not need tests as it's a demo package
|
||||
|
||||
4. **package_validator** - This package
|
||||
- Has its own test files using lua_test patterns
|
||||
- Should add `lua_test` as devDependency for consistency
|
||||
|
||||
5. **quick_guide** - Quick guide builder
|
||||
- Has initialization and media handling
|
||||
- Could benefit from component tests
|
||||
|
||||
6. **ui_level6** - Supergod Panel
|
||||
- Tenant management and system administration
|
||||
- Could benefit from permission/layout tests
|
||||
|
||||
## Packages WITH lua_test (30 packages)
|
||||
|
||||
These packages follow the standard testing pattern with test files in `seed/scripts/tests/`:
|
||||
|
||||
- admin_dialog
|
||||
- arcade_lobby
|
||||
- codegen_studio
|
||||
- dashboard
|
||||
- data_table
|
||||
- form_builder
|
||||
- forum_forge
|
||||
- irc_webchat
|
||||
- lua_test (the testing framework itself)
|
||||
- nav_menu
|
||||
- notification_center
|
||||
- schema_editor
|
||||
- screenshot_analyzer
|
||||
- social_hub
|
||||
- stream_cast
|
||||
- ui_auth
|
||||
- ui_dialogs
|
||||
- ui_footer
|
||||
- ui_header
|
||||
- ui_home
|
||||
- ui_intro
|
||||
- ui_level2
|
||||
- ui_level3
|
||||
- ui_level4
|
||||
- ui_level5
|
||||
- ui_login
|
||||
- ui_pages
|
||||
- ui_permissions
|
||||
- user_manager
|
||||
- workflow_editor
|
||||
|
||||
## Common Test File Patterns
|
||||
|
||||
Packages with lua_test typically have:
|
||||
- `metadata.test.lua` - Validates package metadata structure
|
||||
- `components.test.lua` - Validates component definitions
|
||||
- Additional `*.test.lua` files for package-specific logic
|
||||
|
||||
## Recommendations
|
||||
|
||||
### For Packages Without lua_test
|
||||
|
||||
1. **package_validator** - Should add lua_test for consistency
|
||||
2. **audit_log** - Add tests for stats calculations and filtering
|
||||
3. **code_editor** - Add tests for editor validation logic
|
||||
4. **quick_guide** - Add tests for step management and media handling
|
||||
5. **ui_level6** - Add tests for tenant management logic
|
||||
|
||||
### For All Packages
|
||||
|
||||
- Use `package_validator` as a devDependency
|
||||
- Follow consistent test file naming conventions
|
||||
- Include both metadata and component tests
|
||||
- Add package-specific logic tests
|
||||
|
||||
## Validator Behavior
|
||||
|
||||
The `package_validator` intelligently handles both patterns:
|
||||
|
||||
**With lua_test:**
|
||||
```json
|
||||
{
|
||||
"devDependencies": ["lua_test"]
|
||||
}
|
||||
```
|
||||
- ✅ Expects test files
|
||||
- ⚠️ Warns if missing `metadata.test.lua` or `components.test.lua`
|
||||
|
||||
**Without lua_test:**
|
||||
```json
|
||||
{
|
||||
"devDependencies": []
|
||||
}
|
||||
```
|
||||
- ✅ No test expectations
|
||||
- 📦 Tests are optional
|
||||
|
||||
## Conclusion
|
||||
|
||||
83% of packages use lua_test, showing a strong testing culture. The 6 packages without tests are opportunities for improving test coverage, particularly for utility packages like `audit_log`, `code_editor`, and `quick_guide`.
|
||||
@@ -7,6 +7,9 @@
|
||||
"author": "MetaBuilder",
|
||||
"category": "tools",
|
||||
"dependencies": [],
|
||||
"devDependencies": [
|
||||
"lua_test"
|
||||
],
|
||||
"exports": {
|
||||
"components": [],
|
||||
"scripts": [
|
||||
|
||||
176
packages/package_validator/seed/scripts/tests/cases.json
Normal file
176
packages/package_validator/seed/scripts/tests/cases.json
Normal file
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"valid_metadata_cases": [
|
||||
{
|
||||
"name": "minimal valid metadata",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test"
|
||||
},
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"name": "with dependencies",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test",
|
||||
"dependencies": ["other_package"]
|
||||
},
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"name": "with devDependencies",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test",
|
||||
"devDependencies": ["lua_test", "package_validator"]
|
||||
},
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"name": "with minLevel",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test",
|
||||
"minLevel": 3
|
||||
},
|
||||
"expected": true
|
||||
}
|
||||
],
|
||||
"invalid_metadata_cases": [
|
||||
{
|
||||
"name": "missing packageId",
|
||||
"data": {
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test"
|
||||
},
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"name": "invalid packageId format",
|
||||
"data": {
|
||||
"packageId": "TestPackage",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test"
|
||||
},
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"name": "invalid version format",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test"
|
||||
},
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"name": "minLevel out of range",
|
||||
"data": {
|
||||
"packageId": "test_package",
|
||||
"name": "Test Package",
|
||||
"version": "1.0.0",
|
||||
"description": "A test package",
|
||||
"author": "MetaBuilder",
|
||||
"category": "test",
|
||||
"minLevel": 10
|
||||
},
|
||||
"expected": false
|
||||
}
|
||||
],
|
||||
"valid_component_cases": [
|
||||
{
|
||||
"name": "minimal component",
|
||||
"data": {
|
||||
"id": "test_component",
|
||||
"type": "TestComponent"
|
||||
},
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"name": "component with layout",
|
||||
"data": {
|
||||
"id": "test_component",
|
||||
"type": "TestComponent",
|
||||
"layout": {
|
||||
"type": "Box",
|
||||
"children": []
|
||||
}
|
||||
},
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"name": "component with nested layout",
|
||||
"data": {
|
||||
"id": "test_component",
|
||||
"type": "TestComponent",
|
||||
"layout": {
|
||||
"type": "Box",
|
||||
"children": [
|
||||
{
|
||||
"type": "Card",
|
||||
"children": [
|
||||
{
|
||||
"type": "CardHeader",
|
||||
"props": { "text": "Title" }
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"expected": true
|
||||
}
|
||||
],
|
||||
"invalid_component_cases": [
|
||||
{
|
||||
"name": "missing id",
|
||||
"data": {
|
||||
"type": "TestComponent"
|
||||
},
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"name": "missing type",
|
||||
"data": {
|
||||
"id": "test_component"
|
||||
},
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"name": "layout missing type",
|
||||
"data": {
|
||||
"id": "test_component",
|
||||
"type": "TestComponent",
|
||||
"layout": {
|
||||
"props": {}
|
||||
}
|
||||
},
|
||||
"expected": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
-- Parameterized tests using cases.json
|
||||
local metadata_schema = require("metadata_schema")
|
||||
local component_schema = require("component_schema")
|
||||
|
||||
describe("Parameterized Metadata Validation", function()
|
||||
local cases = load_cases("cases.json")
|
||||
|
||||
-- Test valid metadata cases
|
||||
describe("Valid Metadata Cases", function()
|
||||
for _, case in ipairs(cases.valid_metadata_cases) do
|
||||
it("should pass: " .. case.name, function()
|
||||
local valid, errors = metadata_schema.validate_metadata(case.data)
|
||||
expect(valid).toBe(case.expected)
|
||||
if case.expected then
|
||||
expect(#errors).toBe(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Test invalid metadata cases
|
||||
describe("Invalid Metadata Cases", function()
|
||||
for _, case in ipairs(cases.invalid_metadata_cases) do
|
||||
it("should fail: " .. case.name, function()
|
||||
local valid, errors = metadata_schema.validate_metadata(case.data)
|
||||
expect(valid).toBe(case.expected)
|
||||
if not case.expected then
|
||||
expect(#errors).toBeGreaterThan(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("Parameterized Component Validation", function()
|
||||
local cases = load_cases("cases.json")
|
||||
|
||||
-- Test valid component cases
|
||||
describe("Valid Component Cases", function()
|
||||
for _, case in ipairs(cases.valid_component_cases) do
|
||||
it("should pass: " .. case.name, function()
|
||||
local errors = component_schema.validate_component(case.data)
|
||||
expect(#errors).toBe(0)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Test invalid component cases
|
||||
describe("Invalid Component Cases", function()
|
||||
for _, case in ipairs(cases.invalid_component_cases) do
|
||||
it("should fail: " .. case.name, function()
|
||||
local errors = component_schema.validate_component(case.data)
|
||||
expect(#errors).toBeGreaterThan(0)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user