Add update verification button to sidebar

This commit is contained in:
Jony
2026-09-24 22:10:42 +08:00
parent 0cf99740c0
commit 96010c058f
4 changed files with 92 additions and 4 deletions
+23 -3
View File
@@ -96,6 +96,7 @@ let observer;
const requests = [];
const responses = [];
let fetchFailure = false;
let dismissNotice;
const reply = (body, status = 200) => ({ ok: status < 400, status, async json() { return body; } });
const app = { registerExtension(value) { extension = value; } };
const api = {
@@ -110,7 +111,11 @@ class MutationObserver {
observe() {}
disconnect() { this.disconnected = true; }
}
vm.runInNewContext(source, { app, api, document, window: {}, MutationObserver });
const window = {
setTimeout(callback) { dismissNotice = callback; return 1; },
clearTimeout() { dismissNotice = null; },
};
vm.runInNewContext(source, { app, api, document, window, MutationObserver });
extension.setup();
assert.ok(observer);
@@ -130,14 +135,29 @@ toolbar.append(token, restart);
observer.callback();
const update = document.querySelector("#o1key-update-button");
const detect = document.querySelector("#o1key-detect-button");
assert.equal(toolbar.children[0], token);
assert.equal(toolbar.children[1], update);
assert.equal(toolbar.children[2], restart);
assert.equal(toolbar.children[2], detect);
assert.equal(toolbar.children[3], restart);
assert.equal(update.querySelector(".side-bar-button-label").textContent, "更新");
assert.match(update.querySelector(".side-bar-button-icon").className, /pi-download/);
assert.equal(detect.querySelector(".side-bar-button-label").textContent, "检测");
assert.match(detect.querySelector(".side-bar-button-icon").className, /pi-check-circle/);
assert.ok(observer.disconnected);
extension.setup();
assert.equal(toolbar.children.length, 3);
assert.equal(toolbar.children.length, 4);
detect.listeners.get("click")();
const notice = document.querySelector("#o1key-detect-notice");
assert.equal(notice.children[1].textContent, "检测按钮已加载");
assert.equal(notice.hidden, false);
assert.equal(requests.length, 0);
dismissNotice();
assert.equal(notice.hidden, true);
detect.listeners.get("click")();
assert.equal(notice.hidden, false);
assert.equal(document.body.children.filter((child) => child.id === "o1key-detect-notice").length, 1);
responses.push(reply({ update_available: false }));
update.listeners.get("click")();