diff --git a/packages/arcade_lobby/seed/scripts/tests/matchmaking.test.lua b/packages/arcade_lobby/seed/scripts/tests/matchmaking.test.lua index 542bc23e9..dab8b763c 100644 --- a/packages/arcade_lobby/seed/scripts/tests/matchmaking.test.lua +++ b/packages/arcade_lobby/seed/scripts/tests/matchmaking.test.lua @@ -1,20 +1,20 @@ --- Matchmaking tests for arcade_lobby package --- Tests assign_bucket function with various party sizes - -local matchmaking = require("matchmaking") - -describe("Matchmaking", function() - describe("assign_bucket", function() - it.each({ - { party = { size = 1 }, expected = "solo", desc = "solo player" }, - { party = { size = 2 }, expected = "duo", desc = "duo party" }, - { party = { size = 3 }, expected = "solo", desc = "trio falls to solo" }, - { party = { size = 4 }, expected = "squad", desc = "full squad" }, - { party = { size = 5 }, expected = "squad", desc = "oversized party" }, - { party = {}, expected = "solo", desc = "missing size defaults to solo" }, - })("should return $expected for $desc", function(testCase) - local result = matchmaking.assign_bucket(testCase.party) - expect(result).toBe(testCase.expected) - end) - end) -end) +-- Matchmaking tests for arcade_lobby package +-- Tests assign_bucket function with various party sizes + +local matchmaking = require("matchmaking") + +describe("Matchmaking", function() + describe("assign_bucket", function() + it.each({ + { party = { size = 1 }, expected = "solo", desc = "solo player" }, + { party = { size = 2 }, expected = "duo", desc = "duo party" }, + { party = { size = 3 }, expected = "solo", desc = "trio falls to solo" }, + { party = { size = 4 }, expected = "squad", desc = "full squad" }, + { party = { size = 5 }, expected = "squad", desc = "oversized party" }, + { party = {}, expected = "solo", desc = "missing size defaults to solo" }, + })("should return $expected for $desc", function(testCase) + local result = matchmaking.assign_bucket(testCase.party) + expect(result).toBe(testCase.expected) + end) + end) +end) diff --git a/packages/arcade_lobby/seed/scripts/tests/permissions.test.lua b/packages/arcade_lobby/seed/scripts/tests/permissions.test.lua index 22059bcb9..23766aa5e 100644 --- a/packages/arcade_lobby/seed/scripts/tests/permissions.test.lua +++ b/packages/arcade_lobby/seed/scripts/tests/permissions.test.lua @@ -1,19 +1,19 @@ --- Permissions tests for arcade_lobby package --- Tests can_create_tournament function with various roles - -local permissions = require("permissions") - -describe("Permissions", function() - describe("can_create_tournament", function() - it.each({ - { user = { role = "public" }, expected = false, desc = "public user" }, - { user = { role = "admin" }, expected = true, desc = "admin" }, - { user = { role = "god" }, expected = true, desc = "god" }, - { user = { role = "supergod" }, expected = true, desc = "supergod" }, - { user = {}, expected = false, desc = "no role defaults to public" }, - })("should return $expected for $desc", function(testCase) - local result = permissions.can_create_tournament(testCase.user) - expect(result).toBe(testCase.expected) - end) - end) -end) +-- Permissions tests for arcade_lobby package +-- Tests can_create_tournament function with various roles + +local permissions = require("permissions") + +describe("Permissions", function() + describe("can_create_tournament", function() + it.each({ + { user = { role = "public" }, expected = false, desc = "public user" }, + { user = { role = "admin" }, expected = true, desc = "admin" }, + { user = { role = "god" }, expected = true, desc = "god" }, + { user = { role = "supergod" }, expected = true, desc = "supergod" }, + { user = {}, expected = false, desc = "no role defaults to public" }, + })("should return $expected for $desc", function(testCase) + local result = permissions.can_create_tournament(testCase.user) + expect(result).toBe(testCase.expected) + end) + end) +end) diff --git a/packages/arcade_lobby/seed/scripts/tests/queue_metrics.test.lua b/packages/arcade_lobby/seed/scripts/tests/queue_metrics.test.lua index 4f5779125..8991792a7 100644 --- a/packages/arcade_lobby/seed/scripts/tests/queue_metrics.test.lua +++ b/packages/arcade_lobby/seed/scripts/tests/queue_metrics.test.lua @@ -1,39 +1,39 @@ --- Queue metrics tests for arcade_lobby package --- Tests summarize function with various queue states - -local queue_metrics = require("queue_metrics") - -describe("Queue Metrics", function() - describe("summarize", function() - it.each({ - { - queues = {}, - expected = { totalPlayers = 0, longestWaitSeconds = 0 }, - desc = "empty queues" - }, - { - queues = { { players = 10, waitSeconds = 30 } }, - expected = { totalPlayers = 10, longestWaitSeconds = 30 }, - desc = "single queue" - }, - { - queues = { - { players = 5, waitSeconds = 20 }, - { players = 15, waitSeconds = 60 }, - { players = 8, waitSeconds = 45 } - }, - expected = { totalPlayers = 28, longestWaitSeconds = 60 }, - desc = "multiple queues" - }, - { - queues = { {}, { players = 10 }, { waitSeconds = 100 } }, - expected = { totalPlayers = 10, longestWaitSeconds = 100 }, - desc = "queues with missing fields" - }, - })("should calculate $desc correctly", function(testCase) - local result = queue_metrics.summarize(testCase.queues) - expect(result.totalPlayers).toBe(testCase.expected.totalPlayers) - expect(result.longestWaitSeconds).toBe(testCase.expected.longestWaitSeconds) - end) - end) -end) +-- Queue metrics tests for arcade_lobby package +-- Tests summarize function with various queue states + +local queue_metrics = require("queue_metrics") + +describe("Queue Metrics", function() + describe("summarize", function() + it.each({ + { + queues = {}, + expected = { totalPlayers = 0, longestWaitSeconds = 0 }, + desc = "empty queues" + }, + { + queues = { { players = 10, waitSeconds = 30 } }, + expected = { totalPlayers = 10, longestWaitSeconds = 30 }, + desc = "single queue" + }, + { + queues = { + { players = 5, waitSeconds = 20 }, + { players = 15, waitSeconds = 60 }, + { players = 8, waitSeconds = 45 } + }, + expected = { totalPlayers = 28, longestWaitSeconds = 60 }, + desc = "multiple queues" + }, + { + queues = { {}, { players = 10 }, { waitSeconds = 100 } }, + expected = { totalPlayers = 10, longestWaitSeconds = 100 }, + desc = "queues with missing fields" + }, + })("should calculate $desc correctly", function(testCase) + local result = queue_metrics.summarize(testCase.queues) + expect(result.totalPlayers).toBe(testCase.expected.totalPlayers) + expect(result.longestWaitSeconds).toBe(testCase.expected.longestWaitSeconds) + end) + end) +end) diff --git a/packages/audit_log/seed/scripts/filters.lua b/packages/audit_log/seed/scripts/filters.lua index 867c39313..e9f30e575 100644 --- a/packages/audit_log/seed/scripts/filters.lua +++ b/packages/audit_log/seed/scripts/filters.lua @@ -1,200 +1,13 @@ --- Audit log filtering logic -local M = {} +-- Audit log filtering module +-- DEPRECATED: This file redirects to filters/init.lua +-- Individual functions are now in separate files under filters/ +-- +-- Migration guide: +-- Old: local filters = require("filters") +-- New: local filters = require("filters.init") +-- Or import individual functions: +-- local filterByOperation = require("filters.filter_by_operation") +-- +-- Types are defined in filters/types.lua ----@class AuditLog ----@field id string ----@field operation string ----@field resource string ----@field resourceId string ----@field username string ----@field timestamp number ----@field ipAddress string ----@field success boolean ----@field errorMessage string? - ----@class FilterOptions ----@field operations string[] ----@field resources string[] ----@field usernames string[] - ----@class ApplyFiltersInput ----@field operation string? ----@field resource string? ----@field success boolean? ----@field username string? ----@field startTime number? ----@field endTime number? - ---- Filter logs by operation type ----@param logs AuditLog[] | nil ----@param operation string? ----@return AuditLog[] -function M.filterByOperation(logs, operation) - if not operation or operation == "" then - return logs - end - - local result = {} - for _, log in ipairs(logs or {}) do - if log.operation == operation then - result[#result + 1] = log - end - end - return result -end - ---- Filter logs by resource type ----@param logs AuditLog[] | nil ----@param resource string? ----@return AuditLog[] -function M.filterByResource(logs, resource) - if not resource or resource == "" then - return logs - end - - local result = {} - for _, log in ipairs(logs or {}) do - if log.resource == resource then - result[#result + 1] = log - end - end - return result -end - ---- Filter logs by success status ----@param logs AuditLog[] | nil ----@param success boolean? ----@return AuditLog[] -function M.filterBySuccess(logs, success) - if success == nil then - return logs - end - - local result = {} - for _, log in ipairs(logs or {}) do - if log.success == success then - result[#result + 1] = log - end - end - return result -end - ---- Filter logs by username ----@param logs AuditLog[] | nil ----@param username string? ----@return AuditLog[] -function M.filterByUsername(logs, username) - if not username or username == "" then - return logs - end - - local result = {} - local lowerUsername = string.lower(username) - for _, log in ipairs(logs or {}) do - if log.username and string.match(string.lower(log.username), lowerUsername) then - result[#result + 1] = log - end - end - return result -end - ---- Filter logs by date range (timestamps in milliseconds) ----@param logs AuditLog[] | nil ----@param startTime number? ----@param endTime number? ----@return AuditLog[] -function M.filterByDateRange(logs, startTime, endTime) - local result = {} - for _, log in ipairs(logs or {}) do - local ts = log.timestamp - local include = true - if startTime and ts < startTime then - include = false - end - if endTime and ts > endTime then - include = false - end - if include then - result[#result + 1] = log - end - end - return result -end - ---- Apply multiple filters to logs ----@param logs AuditLog[] | nil ----@param filters ApplyFiltersInput ----@return AuditLog[] -function M.applyFilters(logs, filters) - filters = filters or {} - local result = logs - - if filters.operation then - result = M.filterByOperation(result, filters.operation) - end - - if filters.resource then - result = M.filterByResource(result, filters.resource) - end - - if filters.success ~= nil then - result = M.filterBySuccess(result, filters.success) - end - - if filters.username then - result = M.filterByUsername(result, filters.username) - end - - if filters.startTime or filters.endTime then - result = M.filterByDateRange(result, filters.startTime, filters.endTime) - end - - return result -end - ---- Get unique values for filter dropdowns ----@param logs AuditLog[] | nil ----@return FilterOptions -function M.getFilterOptions(logs) - local operations = {} - local resources = {} - local usernames = {} - - for _, log in ipairs(logs or {}) do - if log.operation then - operations[log.operation] = true - end - if log.resource then - resources[log.resource] = true - end - if log.username then - usernames[log.username] = true - end - end - - local opList = {} - for op in pairs(operations) do - opList[#opList + 1] = op - end - table.sort(opList) - - local resList = {} - for res in pairs(resources) do - resList[#resList + 1] = res - end - table.sort(resList) - - local userList = {} - for user in pairs(usernames) do - userList[#userList + 1] = user - end - table.sort(userList) - - return { - operations = opList, - resources = resList, - usernames = userList - } -end - -return M +return require("filters.init")