add test where we reconnect extension
This commit is contained in:
@@ -280,7 +280,7 @@ describe('MCP Server Tests', () => {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should handle new pages and toggling', async () => {
|
it('should handle new pages and toggling with new connections', async () => {
|
||||||
if (!browserContext) throw new Error('Browser not initialized')
|
if (!browserContext) throw new Error('Browser not initialized')
|
||||||
|
|
||||||
// Find the correct service worker by URL
|
// Find the correct service worker by URL
|
||||||
@@ -358,6 +358,71 @@ describe('MCP Server Tests', () => {
|
|||||||
|
|
||||||
await page.close()
|
await page.close()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should handle new pages and toggling with persistent connection', async () => {
|
||||||
|
if (!browserContext) throw new Error('Browser not initialized')
|
||||||
|
|
||||||
|
const serviceWorker = await getExtensionServiceWorker(browserContext)
|
||||||
|
|
||||||
|
// Connect once
|
||||||
|
const directBrowser = await chromium.connectOverCDP(getCdpUrl())
|
||||||
|
// Wait a bit for connection and initial target discovery
|
||||||
|
await new Promise(r => setTimeout(r, 500))
|
||||||
|
|
||||||
|
// 1. Create a new page
|
||||||
|
const page = await browserContext.newPage()
|
||||||
|
const testUrl = 'https://example.com/persistent'
|
||||||
|
await page.goto(testUrl)
|
||||||
|
await page.bringToFront()
|
||||||
|
|
||||||
|
// 2. Enable extension
|
||||||
|
await serviceWorker.evaluate(async () => {
|
||||||
|
await globalThis.toggleExtensionForActiveTab()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 3. Verify page appears (polling)
|
||||||
|
let foundPage
|
||||||
|
for (let i = 0; i < 50; i++) {
|
||||||
|
const pages = directBrowser.contexts()[0].pages()
|
||||||
|
foundPage = pages.find(p => p.url() === testUrl)
|
||||||
|
if (foundPage) break
|
||||||
|
await new Promise(r => setTimeout(r, 100))
|
||||||
|
}
|
||||||
|
expect(foundPage).toBeDefined()
|
||||||
|
expect(foundPage?.url()).toBe(testUrl)
|
||||||
|
|
||||||
|
// 4. Disable extension
|
||||||
|
await serviceWorker.evaluate(async () => {
|
||||||
|
await globalThis.toggleExtensionForActiveTab()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 5. Verify page disappears (polling)
|
||||||
|
for (let i = 0; i < 50; i++) {
|
||||||
|
const pages = directBrowser.contexts()[0].pages()
|
||||||
|
foundPage = pages.find(p => p.url() === testUrl)
|
||||||
|
if (!foundPage) break
|
||||||
|
await new Promise(r => setTimeout(r, 100))
|
||||||
|
}
|
||||||
|
expect(foundPage).toBeUndefined()
|
||||||
|
|
||||||
|
// 6. Re-enable extension
|
||||||
|
await serviceWorker.evaluate(async () => {
|
||||||
|
await globalThis.toggleExtensionForActiveTab()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 7. Verify page reappears (polling)
|
||||||
|
for (let i = 0; i < 50; i++) {
|
||||||
|
const pages = directBrowser.contexts()[0].pages()
|
||||||
|
foundPage = pages.find(p => p.url() === testUrl)
|
||||||
|
if (foundPage) break
|
||||||
|
await new Promise(r => setTimeout(r, 100))
|
||||||
|
}
|
||||||
|
expect(foundPage).toBeDefined()
|
||||||
|
expect(foundPage?.url()).toBe(testUrl)
|
||||||
|
|
||||||
|
await page.close()
|
||||||
|
await directBrowser.close()
|
||||||
|
})
|
||||||
it('should maintain connection across reloads and navigation', async () => {
|
it('should maintain connection across reloads and navigation', async () => {
|
||||||
if (!browserContext) throw new Error('Browser not initialized')
|
if (!browserContext) throw new Error('Browser not initialized')
|
||||||
const serviceWorker = await getExtensionServiceWorker(browserContext)
|
const serviceWorker = await getExtensionServiceWorker(browserContext)
|
||||||
|
|||||||
Reference in New Issue
Block a user