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();