Files
AstrBot/dashboard/tests/extensionPreferenceStorage.test.mjs
Weilong Liao d72cb78f37 feat: re-implement plugin pinning functionality for extensions (#7918)
* feat: re-implement plugin pinning functionality for extensions

Co-authored-by: Copilot <copilot@github.com>

* chore: update subset

---------

Co-authored-by: Copilot <copilot@github.com>
2026-04-30 22:17:52 +08:00

55 lines
1.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
PINNED_EXTENSIONS_STORAGE_KEY,
readPinnedExtensions,
writePinnedExtensions,
} from '../src/views/extension/extensionPreferenceStorage.mjs';
test('readPinnedExtensions uses the legacy pinned extension storage key', () => {
assert.equal(PINNED_EXTENSIONS_STORAGE_KEY, 'astrbot.pinnedExtensions');
});
test('readPinnedExtensions parses stored pinned extension names', () => {
const storage = {
getItem(key) {
return key === PINNED_EXTENSIONS_STORAGE_KEY
? JSON.stringify(['alpha', 'beta', 'alpha', '', 1])
: null;
},
};
assert.deepEqual(readPinnedExtensions(storage), ['alpha', 'beta']);
});
test('readPinnedExtensions returns an empty array when storage access fails', () => {
const storage = {
getItem() {
throw new Error('SecurityError');
},
};
assert.deepEqual(readPinnedExtensions(storage), []);
});
test('writePinnedExtensions stores normalized pinned extension names', () => {
const writes = [];
const storage = {
setItem(key, value) {
writes.push([key, value]);
},
};
writePinnedExtensions(['alpha', 'beta', 'alpha', '', null], storage);
assert.deepEqual(writes, [
[PINNED_EXTENSIONS_STORAGE_KEY, JSON.stringify(['alpha', 'beta'])],
]);
});
test('writePinnedExtensions ignores unavailable storage', () => {
assert.doesNotThrow(() => writePinnedExtensions(['alpha'], null));
assert.doesNotThrow(() => writePinnedExtensions(['alpha'], {}));
});