Files
metabuilder/packages/ui_auth/seed/scripts/tests/gate.check.test.lua
2025-12-30 12:57:10 +00:00

74 lines
2.6 KiB
Lua

-- Gate Check Tests
-- Parameterized tests for auth gate check 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 checkModule = require("gate.check")
describe("gate", 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("check", function()
describe("authentication", function()
it_each(cases.check.unauthenticated, "$description", function(case)
local ctx = { user = case.user, requiredLevel = case.requiredLevel }
local result = checkModule.check(ctx)
expect(result.allowed).toBe(false)
expect(result.reason).toBe("not_authenticated")
expect(result.redirect).toBe("/login")
end)
end)
describe("authorization", function()
it_each(cases.check.authorized, "$description (level $userLevel >= $requiredLevel)", function(case)
local user = { id = "user_123", level = case.userLevel }
local ctx = { user = user, requiredLevel = case.requiredLevel }
local result = checkModule.check(ctx)
expect(result.allowed).toBe(true)
expect(result.reason).toBe(nil)
end)
it_each(cases.check.unauthorized, "$description (level $userLevel < $requiredLevel)", function(case)
local user = { id = "user_123", level = case.userLevel }
local ctx = { user = user, requiredLevel = case.requiredLevel }
-- Ensure mock returns false for insufficient level
_G.check.can_access = mock.fn(function(u, l)
return u.level >= l
end)
local result = checkModule.check(ctx)
expect(result.allowed).toBe(false)
expect(result.reason).toBe("insufficient_permission")
end)
end)
describe("no level requirement", function()
it_each(cases.check.noLevelRequired, "$description", function(case)
local user = { id = "user_123", level = case.userLevel }
local ctx = { user = user } -- No requiredLevel
local result = checkModule.check(ctx)
expect(result.allowed).toBe(true)
end)
end)
end)
end)
return {
name = "gate.check.test",
description = "Tests for auth gate check function"
}