c16e49e774
* fix: always-fresh service worker cache * chore: clarify service-worker * fix: cache in CacheStorage * feat: set __isDocumentCached * add back in manifest precaching * add unit tests (incomplete) * test: simplify test env * test: add service-worker cypress test * test: service-worker document handler * fix: CachedDocument ctor * fix: Readable for ReadableStream in jest * build: clean up module loading * fix: rename commands->ethereum * build: simplify package.json deps * build: clean up cypress usage * build: clean up yarn.lock * build: record cypress runs * build: disable chromeWebSecurity in cypress tests * build: rm babel * build: disable sw in ci cypress * build: nits * build: update workbox version * chore: fix merge * test: cache * test: cypress-ify the before hook * test: clear sw before each test * fix: cy then * test: cypress shenanigans * style: lint * chore: rm todo * test: fail fast for service worker with dev builds * docs: update contributing to tests * fix: clean up tests after merge - Add fast fail in case of dev server, which lacks ServiceWorker * fix: inject ethereum * test: service worker * test: increase sw timeout * test: sw state * test: run cypress in chrome * feat: add on-demand caching to improve sw startup time * test: test dynamically * fix: simplify cached doc * fix: optional sw * fix: expose response on cached doc * fix: stub out sw req * fix: intercept Co-authored-by: Christine Legge <christine.legge@uniswap.org>
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
// ***********************************************************
|
|
// This file is processed and loaded automatically before your test files.
|
|
//
|
|
// You can read more here:
|
|
// https://on.cypress.io/configuration
|
|
// ***********************************************************
|
|
|
|
// Import commands.ts using ES2015 syntax:
|
|
import { injected } from './ethereum'
|
|
import assert = require('assert')
|
|
|
|
declare global {
|
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
namespace Cypress {
|
|
interface ApplicationWindow {
|
|
ethereum: typeof injected
|
|
}
|
|
interface VisitOptions {
|
|
serviceWorker?: true
|
|
}
|
|
}
|
|
}
|
|
|
|
// sets up the injected provider to be a mock ethereum provider with the given mnemonic/index
|
|
// eslint-disable-next-line no-undef
|
|
Cypress.Commands.overwrite(
|
|
'visit',
|
|
(original, url: string | Partial<Cypress.VisitOptions>, options?: Partial<Cypress.VisitOptions>) => {
|
|
assert(typeof url === 'string')
|
|
|
|
cy.intercept('/service-worker.js', options?.serviceWorker ? undefined : { statusCode: 404 }).then(() => {
|
|
original({
|
|
...options,
|
|
url: (url.startsWith('/') && url.length > 2 && !url.startsWith('/#') ? `/#${url}` : url) + '?chain=rinkeby',
|
|
onBeforeLoad(win) {
|
|
options?.onBeforeLoad?.(win)
|
|
win.localStorage.clear()
|
|
win.ethereum = injected
|
|
},
|
|
})
|
|
})
|
|
}
|
|
)
|
|
|
|
beforeEach(() => {
|
|
// Infura security policies are based on Origin headers.
|
|
// These are stripped by cypress because chromeWebSecurity === false; this adds them back in.
|
|
cy.intercept(/infura.io/, (res) => {
|
|
res.headers['origin'] = 'http://localhost:3000'
|
|
res.continue()
|
|
})
|
|
})
|