const test = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const path = require('node:path') const root = path.resolve(__dirname, '../..') const read = file => fs.readFileSync(path.join(root, file), 'utf8') const pages = [ 'assets/admin/src/pages/users/UsersWechatTemplate.vue', 'assets/admin/src/pages/users/UsersLevel.vue', 'assets/admin/src/pages/users/UsersVerify.vue', 'assets/admin/src/pages/CmsCredits.vue', 'assets/admin/src/pages/permissions/PermissionsCapabilities.vue', 'assets/admin/src/pages/content/FooterTabbarSettings.vue', ] test('custom settings pages use the shared dirty save bar without page-level save buttons', () => { for (const page of pages) { const source = read(page) assert.equal((source.match(/]*:dirty="dirty"[^>]*@save="[^"]+"[^>]*@reload="[^"]+"/, page) assert.doesNotMatch(source, /class="jio-form-(?:actions|footer)"/, page) assert.doesNotMatch(source, /@click="(?:handleSave|save|saveCfg)"/, page) } }) test('footer tabbar single-post mode is persisted by the save endpoint', () => { const controller = read('src/Admin/GlobalController.php') assert.match(controller, /'footer_tabbar_single'\s*=>\s*in_array\(\$params\['footer_tabbar_single'\]/) })