From 2e50f5a063dc8fb52b9a29b5f78d2beb80550e5d Mon Sep 17 00:00:00 2001 From: inuur Date: Sun, 4 Dec 2022 10:37:39 +0300 Subject: [PATCH] HSPC-23 Add request interceptors --- dist/hstest/environment/page.js | 7 ++++ dist/hstest/environment/page.js.map | 2 +- dist/package.json | 6 ++-- hstest/environment/page.ts | 9 +++++ package-lock.json | 4 +-- package.json | 2 +- tests/vanilla/page/requests/index.html | 21 ++++++++++++ tests/vanilla/page/requests/test.html | 19 +++++++++++ .../requests/testRequestInterception.test.mjs | 33 ++++++++++++++++++ ...equestInterceptionAfterNavigation.test.mjs | 34 +++++++++++++++++++ 10 files changed, 130 insertions(+), 7 deletions(-) create mode 100644 tests/vanilla/page/requests/index.html create mode 100644 tests/vanilla/page/requests/test.html create mode 100644 tests/vanilla/page/requests/testRequestInterception.test.mjs create mode 100644 tests/vanilla/page/requests/testRequestInterceptionAfterNavigation.test.mjs diff --git a/dist/hstest/environment/page.js b/dist/hstest/environment/page.js index ab4f2c5..1854ee5 100644 --- a/dist/hstest/environment/page.js +++ b/dist/hstest/environment/page.js @@ -15,6 +15,7 @@ class Page { this.browser = browser; this.isOpened = false; this.gotoOptions = gotoOptions; + this.requests = []; } async open() { if (this.isOpened) { @@ -24,8 +25,14 @@ class Page { await this.pageInstance.goto(this.url, this.gotoOptions); await browserPageHandler_js_1.default.initHyperskillContext(this.pageInstance); await browserPageHandler_js_1.default.initKeyboardEvents(this.pageInstance); + await this.setUpRequestInterceptor(); this.isOpened = true; } + async setUpRequestInterceptor() { + this.pageInstance.on('request', async (request) => { + this.requests.push(request); + }); + } execute(func) { return async () => { await this.open(); diff --git a/dist/hstest/environment/page.js.map b/dist/hstest/environment/page.js.map index 1d4ed3d..2e58b19 100644 --- a/dist/hstest/environment/page.js.map +++ b/dist/hstest/environment/page.js.map @@ -1 +1 @@ -{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../hstest/environment/page.ts"],"names":[],"mappings":";;;;;AAEA,6FAAkE;AAClE,+EAAoD;AACpD,yFAA8D;AAC9D,uFAA4D;AAC5D,8DAAmC;AACnC,iFAAsD;AAEtD,MAAM,IAAI;IAON,YAAY,GAAW,EAAE,OAAgB,EAAE,WAAqC;QAC5E,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;QACD,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,+BAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,+BAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,IAAoB;QACxB,OAAO,KAAK,IAAI,EAAE;YACd,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAkB,CAAC,CAAC;YACpE,OAAO,wBAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAA4B;QAC1C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAoB;QAC/B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAkB,CAAC,CAAC;QAC9E,IAAI,wBAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;YAC7C,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;gBAC7B,MAAM,IAAI,wBAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACpD;iBAAM;gBACH,MAAM,IAAI,uBAAU,EAAE,CAAC;aAC1B;SACJ;QACD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,MAAM,CAAC;QAC5B,OAAO,MAAM,oBAAO,CAAC,GAAG,CACpB,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAA4B,EAClE,IAAI,EACJ,IAAI,CAAC,YAAY,CACpB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACrB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACnC,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB;QACjC,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACtC,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAgB;QACpC,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACtB,6DAA6D;QAC7D,aAAa;QACb,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B,SAAS,EAAE,kBAAkB;SAChC,CAAC,CAAC;IACP,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,OAAO,GAAG,KAAK;QACjD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,yBAAY,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,YAAoB,EAAE,IAAoB;QAC3D,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;CACJ;AAED,kBAAe,IAAI,CAAC"} \ No newline at end of file +{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../hstest/environment/page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/package.json b/dist/package.json index d398731..801df45 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "hs-test-web-ts", - "version": "1.0.0", + "version": "4.0.1", "description": "Hyperskill Testing Library on TypeScript", "main": "dist/hstest/index.js", "scripts": { @@ -36,8 +36,8 @@ "style-loader": "^1.2.1", "ts-node": "^10.4.0", "typescript": "^4.5.4", - "webpack": "^4.43.0", + "webpack": "^4.46.0", "webpack-cli": "^3.3.11", - "webpack-dev-server": "^3.10.3" + "webpack-dev-server": "^4.11.1" } } diff --git a/hstest/environment/page.ts b/hstest/environment/page.ts index e503b12..74e09f3 100644 --- a/hstest/environment/page.ts +++ b/hstest/environment/page.ts @@ -13,12 +13,14 @@ class Page { isOpened: boolean; pageInstance!: puppeteer.Page; gotoOptions: puppeteer.WaitForOptions; + requests: Array; constructor(url: string, browser: Browser, gotoOptions: puppeteer.WaitForOptions) { this.url = url; this.browser = browser; this.isOpened = false; this.gotoOptions = gotoOptions; + this.requests = []; } async open(): Promise { @@ -29,9 +31,16 @@ class Page { await this.pageInstance.goto(this.url, this.gotoOptions); await BrowserPageHandler.initHyperskillContext(this.pageInstance); await BrowserPageHandler.initKeyboardEvents(this.pageInstance); + await this.setUpRequestInterceptor(); this.isOpened = true; } + async setUpRequestInterceptor(): Promise { + this.pageInstance.on('request', async request => { + this.requests.push(request); + }); + } + execute(func: NoArgsFunction): NoArgsFunction { return async () => { await this.open(); diff --git a/package-lock.json b/package-lock.json index e9cd2a9..6764cc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "hs-test-web-ts", - "version": "1.0.0", + "version": "4.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "hs-test-web-ts", - "version": "1.0.0", + "version": "4.0.0", "dependencies": { "@types/callsite": "^1.0.31", "callsite": "^1.0.0", diff --git a/package.json b/package.json index a793723..dc457c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hs-test-web-ts", - "version": "4.0.0", + "version": "4.0.1", "description": "Hyperskill Testing Library on TypeScript", "main": "dist/hstest/index.js", "scripts": { diff --git a/tests/vanilla/page/requests/index.html b/tests/vanilla/page/requests/index.html new file mode 100644 index 0000000..d853ad8 --- /dev/null +++ b/tests/vanilla/page/requests/index.html @@ -0,0 +1,21 @@ + + + + + Index HTML + + + +
+ + Navigate to another page +
+ + + + + diff --git a/tests/vanilla/page/requests/test.html b/tests/vanilla/page/requests/test.html new file mode 100644 index 0000000..5be2a4f --- /dev/null +++ b/tests/vanilla/page/requests/test.html @@ -0,0 +1,19 @@ + + + + + Test HTML + + + +
+ +
+ + + + diff --git a/tests/vanilla/page/requests/testRequestInterception.test.mjs b/tests/vanilla/page/requests/testRequestInterception.test.mjs new file mode 100644 index 0000000..432b0a5 --- /dev/null +++ b/tests/vanilla/page/requests/testRequestInterception.test.mjs @@ -0,0 +1,33 @@ +import {StageTest, correct, wrong} from "../../../../dist/hstest/index.js" +import path from 'path' + +global.browserOptions = { + args: ['--start-maximized', '--disable-infobar', '--disable-site-isolation-trials'] +} + +const pagePath = path.join(import.meta.url, '../index.html') + +class TestRequestInterceptionTest extends StageTest { + + page = this.getPage(pagePath) + + tests = [ + this.node.execute(async () => { + const button = await this.page.findById('http'); + await button.click() + await new Promise(r => setTimeout(r, 2000)); + if (this.page.requests.length !== 1) { + return wrong('Expected only one request!') + } + await button.click() + if (this.page.requests.length !== 2) { + return wrong('Expected 2 requests!') + } + return correct() + }) + ]; +} + +it('Test request interception', async () => { + await new TestRequestInterceptionTest().runTests() +}).timeout(15000); diff --git a/tests/vanilla/page/requests/testRequestInterceptionAfterNavigation.test.mjs b/tests/vanilla/page/requests/testRequestInterceptionAfterNavigation.test.mjs new file mode 100644 index 0000000..6822b8f --- /dev/null +++ b/tests/vanilla/page/requests/testRequestInterceptionAfterNavigation.test.mjs @@ -0,0 +1,34 @@ +import {StageTest, correct, wrong} from "../../../../dist/hstest/index.js" +import path from 'path' + +const pagePath = path.join(import.meta.url, '../index.html') + +class TestRequestInterceptionTest extends StageTest { + + page = this.getPage(pagePath) + + tests = [ + this.node.execute(async () => { + const button = await this.page.findById('http'); + await button.click(); + if (this.page.requests.length !== 1) { + return wrong('Expected only one request'); + } + const navigateButton = await this.page.findById('navigate'); + await navigateButton.clickForNavigation(); + const anotherButton = await this.page.findById('http'); + await anotherButton.click(); + if (this.page.requests.length === 1) { + return wrong('Expected more than 1 request'); + } + if (this.page.requests[0].url() !== 'https://get.geojs.io/v1/ip/country.json?ip=8.8.8.8') { + return wrong('Wrong url') + } + return correct() + }) + ]; +} + +it('Test request interception', async () => { + await new TestRequestInterceptionTest().runTests() +});