Files
metabuilder/packages/forum_forge/seed/scripts/tests/permissions.test.lua
2025-12-30 13:09:18 +00:00

88 lines
2.6 KiB
Lua

-- Forum Forge permissions and functionality tests
-- Uses lua_test framework with parameterized test cases
describe("Forum Permissions", function()
local cases = load_cases("permissions.cases.json")
describe("can_post", function()
local can_post = require("can_post")
it_each(cases.can_post, "$desc", function(tc)
local user = { role = tc.role }
local result = can_post(user)
expect(result).toBe(tc.expected)
end)
end)
describe("can_moderate", function()
local can_moderate = require("can_moderate")
it_each(cases.can_moderate, "$desc", function(tc)
local user = { role = tc.role }
local result = can_moderate(user)
expect(result).toBe(tc.expected)
end)
end)
end)
describe("Content Moderation", function()
local cases = load_cases("permissions.cases.json")
describe("flag_post", function()
local flag_post = require("flag_post")
it_each(cases.flag_post, "$desc", function(tc)
local post = { content = tc.content }
local result = flag_post(post)
expect(result.flagged).toBe(tc.expected_flagged)
if tc.expected_reasons then
expect(#result.reasons).toBe(tc.expected_reasons)
end
end)
it("flags posts over 5000 characters", function()
local long_content = string.rep("a", 5001)
local post = { content = long_content }
local result = flag_post(post)
expect(result.flagged).toBe(true)
expect(#result.reasons).toBe(1)
expect(result.reasons[1]).toContain("5000 characters")
end)
end)
end)
describe("Thread Ranking", function()
local cases = load_cases("permissions.cases.json")
describe("rank_thread", function()
local rank_thread = require("rank_thread")
it_each(cases.rank_thread, "$desc", function(tc)
local thread = {
replyCount = tc.replyCount,
likeCount = tc.likeCount,
lastReplyAt = tc.lastReplyAt
}
local score = rank_thread(thread)
expect(score >= tc.expected_min).toBe(true)
end)
it("calculates score correctly: (replies * 2) + likes + (recency / 1000000)", function()
local thread = {
replyCount = 10,
likeCount = 5,
lastReplyAt = 2000000
}
local score = rank_thread(thread)
-- 10 * 2 + 5 + 2 = 27
expect(score).toBe(27)
end)
it("handles missing fields with defaults", function()
local thread = {}
local score = rank_thread(thread)
expect(score).toBe(0)
end)
end)
end)