mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-28 17:01:18 +00:00
3eae2b8d30
Compare the fxmanifest version against the latest published sky_phone release tag and report update, current, ahead, and failure states without blocking resource startup. Document the startup check and cover the HTTP and version comparison behavior with a focused Lua test.
70 lines
2.8 KiB
Lua
70 lines
2.8 KiB
Lua
local source_path = "sky_phone/source/server/update_check.lua"
|
|
local original_print = print
|
|
|
|
local function run_check(installed_version, status_code, release_version)
|
|
local output = {}
|
|
local request
|
|
|
|
print = function(message)
|
|
output[#output + 1] = tostring(message)
|
|
end
|
|
GetCurrentResourceName = function()
|
|
return "sky_phone"
|
|
end
|
|
GetResourceMetadata = function(resource_name, key, index)
|
|
assert(resource_name == "sky_phone", "update check must read its own resource metadata")
|
|
assert(key == "version" and index == 0, "update check must read the fxmanifest version")
|
|
return installed_version
|
|
end
|
|
PerformHttpRequest = function(url, callback, method, body, headers)
|
|
request = {
|
|
url = url,
|
|
callback = callback,
|
|
method = method,
|
|
body = body,
|
|
headers = headers,
|
|
}
|
|
end
|
|
CreateThread = function(callback)
|
|
callback()
|
|
end
|
|
json = {
|
|
decode = function()
|
|
return { tag_name = release_version }
|
|
end,
|
|
}
|
|
|
|
dofile(source_path)
|
|
|
|
if request then
|
|
assert(request.url == "https://api.github.com/repos/sky-systems/sky_phone/releases/latest")
|
|
assert(request.method == "GET" and request.body == "", "update check must use a read-only GET request")
|
|
assert(request.headers["Accept"] == "application/vnd.github+json")
|
|
assert(request.headers["User-Agent"] == "sky_phone-update-check")
|
|
request.callback(status_code, "{}")
|
|
end
|
|
|
|
return table.concat(output, "\n"), request
|
|
end
|
|
|
|
local current_output = run_check("0.1.0", 200, "0.1.0")
|
|
assert(current_output:find("Version 0.1.0 is up to date", 1, true), "matching versions must report up to date")
|
|
|
|
local outdated_output = run_check("0.1.0", 200, "0.2.0")
|
|
assert(outdated_output:find("SKY PHONE UPDATE AVAILABLE", 1, true), "newer releases must show an update notice")
|
|
assert(outdated_output:find("Installed version: ^10.1.0", 1, true), "notice must show the manifest version")
|
|
assert(outdated_output:find("Latest release: ^20.2.0", 1, true), "notice must show the release tag")
|
|
|
|
local ahead_output = run_check("1.0.0", 200, "0.9.9")
|
|
assert(ahead_output:find("newer than the latest GitHub release", 1, true), "ahead versions must be distinguished")
|
|
|
|
local invalid_output, invalid_request = run_check("development", 200, "0.1.0")
|
|
assert(not invalid_request, "invalid manifest versions must not make an HTTP request")
|
|
assert(invalid_output:find("fxmanifest.lua has an invalid version", 1, true), "invalid manifests must be visible")
|
|
|
|
local failed_output = run_check("0.1.0", 429, "0.1.0")
|
|
assert(failed_output:find("GitHub update check failed with HTTP 429", 1, true), "HTTP failures must be visible")
|
|
|
|
print = original_print
|
|
io.write("Sky Phone update check tests passed\n")
|