|
1 | 1 | import pkg from "../../package.json" assert { type: "json" }; |
2 | 2 | import { expect, test } from "../fixtures"; |
| 3 | +import { getExtensionToolbar } from "../pages/extension"; |
| 4 | +import { |
| 5 | + enableStableDomainInStorage, |
| 6 | + expectSvelteAppLoaded, |
| 7 | + openStableTestPage, |
| 8 | +} from "../pages/web"; |
| 9 | + |
| 10 | +declare const chrome: { |
| 11 | + tabs: { |
| 12 | + query: (queryInfo: { |
| 13 | + active: boolean; |
| 14 | + currentWindow: boolean; |
| 15 | + }) => Promise<Array<{ id?: number }>>; |
| 16 | + sendMessage: (tabId: number, message: unknown) => Promise<void>; |
| 17 | + }; |
| 18 | +}; |
3 | 19 |
|
4 | 20 | function toUnknownRecord(value: unknown): Record<string, unknown> { |
5 | 21 | if (typeof value !== "object" || value === null) return {}; |
@@ -73,4 +89,47 @@ test.describe("Popup", () => { |
73 | 89 | expect(beforeDomainValue === undefined || beforeDomainValue === false).toBeTruthy(); |
74 | 90 | expect(afterDomainValue).toBeTruthy(); |
75 | 91 | }); |
| 92 | + |
| 93 | + test("popup toggle off and on restores toolbar without reload", async ({ |
| 94 | + context, |
| 95 | + extensionId: _extensionId, |
| 96 | + page, |
| 97 | + }) => { |
| 98 | + await enableStableDomainInStorage(context); |
| 99 | + await openStableTestPage(page); |
| 100 | + await expectSvelteAppLoaded(page); |
| 101 | + await expect(getExtensionToolbar(page)).toBeVisible(); |
| 102 | + let [worker] = context.serviceWorkers(); |
| 103 | + if (!worker) { |
| 104 | + worker = await context.waitForEvent("serviceworker"); |
| 105 | + } |
| 106 | + await worker.evaluate(async () => { |
| 107 | + const [tab] = await chrome.tabs.query({ |
| 108 | + active: true, |
| 109 | + currentWindow: true, |
| 110 | + }); |
| 111 | + if (!tab?.id) return; |
| 112 | + await chrome.tabs.sendMessage(tab.id, { |
| 113 | + type: "EXTENSION_TOGGLE", |
| 114 | + payload: { isActive: false }, |
| 115 | + source: { popup: true }, |
| 116 | + timestamp: Date.now(), |
| 117 | + }); |
| 118 | + }); |
| 119 | + await expect(getExtensionToolbar(page)).toHaveCount(0); |
| 120 | + await worker.evaluate(async () => { |
| 121 | + const [tab] = await chrome.tabs.query({ |
| 122 | + active: true, |
| 123 | + currentWindow: true, |
| 124 | + }); |
| 125 | + if (!tab?.id) return; |
| 126 | + await chrome.tabs.sendMessage(tab.id, { |
| 127 | + type: "EXTENSION_TOGGLE", |
| 128 | + payload: { isActive: true }, |
| 129 | + source: { popup: true }, |
| 130 | + timestamp: Date.now(), |
| 131 | + }); |
| 132 | + }); |
| 133 | + await expect(getExtensionToolbar(page)).toBeVisible(); |
| 134 | + }); |
76 | 135 | }); |
0 commit comments