mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-27 07:14:56 +00:00
65 lines
2.1 KiB
Lua
65 lines
2.1 KiB
Lua
-- Gate Wrap Tests
|
|
-- Parameterized tests for auth gate wrap functionality
|
|
|
|
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 beforeEach = require("lua_test.beforeEach")
|
|
local mock = require("lua_test.mock")
|
|
|
|
local cases = require("tests.gate.cases")
|
|
local wrapModule = require("gate.wrap")
|
|
|
|
describe("gate.wrap", function()
|
|
-- Mock the check module
|
|
beforeEach(function()
|
|
_G.check = {
|
|
can_access = mock.fn(function(user, level)
|
|
return user.level and user.level >= level
|
|
end)
|
|
}
|
|
end)
|
|
|
|
describe("when authenticated and authorized", function()
|
|
it_each(cases.wrap.allowed, "$description", function(case)
|
|
local user = { id = "user_123", level = case.userLevel }
|
|
local children = { type = "Dashboard", props = {} }
|
|
local ctx = { user = user, requiredLevel = case.requiredLevel, children = children }
|
|
|
|
local result = wrapModule.wrap(ctx)
|
|
expect(result).toBe(children)
|
|
end)
|
|
end)
|
|
|
|
describe("when not authenticated", function()
|
|
it_each(cases.wrap.redirect, "$description", function(case)
|
|
local ctx = { user = nil, children = {} }
|
|
local result = wrapModule.wrap(ctx)
|
|
expect(result.type).toBe("Redirect")
|
|
expect(result.props.to).toBe("/login")
|
|
end)
|
|
end)
|
|
|
|
describe("when not authorized", function()
|
|
it_each(cases.wrap.denied, "$description (level $userLevel < $requiredLevel)", function(case)
|
|
local user = { id = "user_123", level = case.userLevel }
|
|
local ctx = { user = user, requiredLevel = case.requiredLevel, children = {} }
|
|
|
|
-- Ensure mock returns false
|
|
_G.check.can_access = mock.fn(function(u, l)
|
|
return u.level >= l
|
|
end)
|
|
|
|
local result = wrapModule.wrap(ctx)
|
|
expect(result.type).toBe("AccessDenied")
|
|
expect(result.props.reason).toBe("insufficient_permission")
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
return {
|
|
name = "gate.wrap.test",
|
|
description = "Tests for auth gate wrap function"
|
|
}
|