Files
sky_phone/tests/custom_app_compat_server.lua
T
2026-08-11 18:26:22 +02:00

87 lines
2.9 KiB
Lua

local event_handlers = {}
local registered_event_handlers = {}
local registered_exports = {}
local sent_events = {}
local invoking_resource = nil
exports = setmetatable({}, {
__call = function(_, export_name, handler)
registered_exports[export_name] = handler
end,
})
function GetCurrentResourceName()
return "sky_phone"
end
function GetInvokingResource()
return invoking_resource
end
function GetGameTimer()
return 5000
end
function RegisterNetEvent(event_name, handler)
event_handlers[event_name] = handler
end
function AddEventHandler(event_name, handler)
local handlers = registered_event_handlers[event_name] or {}
handlers[#handlers + 1] = handler
registered_event_handlers[event_name] = handlers
end
function TriggerClientEvent(event_name, target, ...)
sent_events[#sent_events + 1] = {
arguments = { ... },
event_name = event_name,
target = target,
}
end
dofile("sky_phone/source/shared/custom_app_compat.lua")
dofile("sky_phone/source/server/custom_app_compat.lua")
local alias_handlers = registered_event_handlers["__cfx_export_high-phone_addApplication"]
assert(alias_handlers and #alias_handlers == 1, "Missing high-phone:addApplication export alias")
local high_add_application
local export_callback = setmetatable({
__cfx_functionReference = "test-export-callback",
}, {
__call = function(_, handler)
high_add_application = handler
end,
})
alias_handlers[1](export_callback)
assert(type(high_add_application) == "function", "Invalid high-phone:addApplication export alias")
invoking_resource = "high_server_app"
local add_success, add_error = high_add_application("bankingv2", {
externalUrl = "@high_server_app/ui/index.html",
}, {
en = {
label = "Banking",
description = "Banking app",
},
})
assert(add_success and add_error == nil, "High server addApplication must register")
assert(#sent_events == 1, "High server registration must broadcast an update")
assert(sent_events[1].event_name == "sky_phone:compat:high:client:syncApplication", "High sync event must be used")
assert(sent_events[1].arguments[1] == "high_server_app", "High sync must preserve the owner")
invoking_resource = "other_server_app"
local duplicate_success, duplicate_error = high_add_application("bankingv2", {
externalUrl = "@other_server_app/ui/index.html",
})
assert(not duplicate_success and duplicate_error == "duplicate_app_id", "High cross-owner replacement must fail")
source = 42
event_handlers["sky_phone:compat:high:server:requestSnapshot"]()
assert(#sent_events == 2, "High snapshot request must emit one response")
assert(sent_events[2].event_name == "sky_phone:compat:high:client:replaceSnapshot", "High snapshot event must be used")
assert(sent_events[2].target == 42, "High snapshot must target only the requester")
assert(#sent_events[2].arguments[1] == 1, "High snapshot must include the registered app")
print("Custom app compatibility server tests passed")