cc-libs/tests/postinstall.lua

93 lines
2.8 KiB
Lua

local createLibTest = require('/apis/libtest');
local testlib = createLibTest({ ... });
local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr';
local function fakeSettings(values)
return {
values = values or {},
saved = 0,
get = function(self, key)
return self.values[key];
end,
set = function(self, key, value)
self.values[key] = value;
end,
save = function(self)
self.saved = self.saved + 1;
end,
};
end
local function runPostinstall(settingsLib)
local lines = {};
local env = setmetatable({
require = require,
settings = {
get = function(key) return settingsLib:get(key); end,
set = function(key, value) settingsLib:set(key, value); end,
save = function() settingsLib:save(); end,
},
print = function(line)
lines[#lines + 1] = line or '';
end,
}, { __index = _G });
local chunk, loadErr = loadfile('/trapos/programs/trapos-postinstall.lua', 't', env);
if not chunk then error(loadErr, 0); end
local ok, err = pcall(chunk);
if not ok then error(err, 0); end
return lines;
end
local function containsLine(lines, expected)
for _, line in ipairs(lines) do
if line == expected then return true; end
end
return false;
end
testlib.test('postinstall defaults missing sandbox url', function()
local settingsLib = fakeSettings();
local lines = runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
testlib.assertEquals(settingsLib.saved, 1);
testlib.assertTrue(containsLine(lines, '=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.'));
testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.'));
end);
testlib.test('postinstall treats empty sandbox url as missing', function()
local settingsLib = fakeSettings({ ['sandbox.url'] = '' });
runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
testlib.assertEquals(settingsLib.saved, 1);
end);
testlib.test('postinstall preserves existing sandbox url and password', function()
local settingsLib = fakeSettings({
['sandbox.url'] = 'wss://custom.example',
['sandbox.password'] = 'secret',
});
local lines = runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], 'wss://custom.example');
testlib.assertEquals(settingsLib.saved, 0);
testlib.assertTrue(containsLine(lines, '=> Keeping existing sandbox.url.'));
testlib.assertTrue(containsLine(lines, '=> Sandbox password already configured.'));
end);
testlib.test('postinstall treats empty sandbox password as missing', function()
local settingsLib = fakeSettings({
['sandbox.url'] = 'wss://custom.example',
['sandbox.password'] = '',
});
local lines = runPostinstall(settingsLib);
testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.'));
end);
testlib.run();