From 89206852488d5163b196ec14ce08065c40c3f8fb Mon Sep 17 00:00:00 2001 From: Tom Meyer Date: Fri, 15 Apr 2022 11:07:16 -0400 Subject: [PATCH 1/4] Add remaining mocked responses for `Basic universal flow` test. This PR adds the ability to mock Universal AutoComplete responses. These mocked reponses are used by the `Basic universal flow` test, in place of hitting LiveAPI. The entire test is now using fully mocked LiveAPI responses. TEST=auto Ensured the acceptance test ran fine. --- .../acceptancesuites/acceptancesuite.js | 10 +++- .../fixtures/responses/universal.js | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/tests/acceptance/acceptancesuites/acceptancesuite.js b/tests/acceptance/acceptancesuites/acceptancesuite.js index 3dbfc621a..a86ba180a 100644 --- a/tests/acceptance/acceptancesuites/acceptancesuite.js +++ b/tests/acceptance/acceptancesuites/acceptancesuite.js @@ -8,7 +8,7 @@ import { VERTICAL_SEARCH_URL_REGEX } from '../constants'; import FacetsPage from '../pageobjects/facetspage'; -import { MockedUniversalSearchRequest } from '../fixtures/responses/universal'; +import { MockedUniversalAutoCompleteRequest, MockedUniversalSearchRequest } from '../fixtures/responses/universal'; import { Selector, RequestLogger } from 'testcafe'; import { browserBackButton, @@ -26,7 +26,13 @@ import SearchRequestLogger from '../searchrequestlogger'; */ fixture`Universal search page works as expected` - .requestHooks([SearchRequestLogger.createUniversalSearchLogger(), MockedUniversalSearchRequest]) + .requestHooks( + [ + SearchRequestLogger.createUniversalSearchLogger(), + MockedUniversalSearchRequest, + MockedUniversalAutoCompleteRequest + ] + ) .beforeEach(async t => { await registerIE11NoCacheHook(t, UNIVERSAL_SEARCH_URL_REGEX); }) diff --git a/tests/acceptance/fixtures/responses/universal.js b/tests/acceptance/fixtures/responses/universal.js index 8e4de0b06..8d9fd9d40 100644 --- a/tests/acceptance/fixtures/responses/universal.js +++ b/tests/acceptance/fixtures/responses/universal.js @@ -1,5 +1,44 @@ import { RequestMock } from 'testcafe'; +function generateAutoCompleteResponse (prompt) { + const mockedResponse = { + meta: { + uuid: '01802d71-9901-1b83-9d50-ff143088f1ab', + errors: [] + }, + response: { + input: { + value: prompt, + queryIntents: [] + }, + results: [] + } + }; + + if (prompt === '') { + mockedResponse.response.results = [ + { + value: 'a Rose by any other name', + matchedSubstrings: [], + queryIntents: [], + verticalKeys: [] + }, + { + value: 'amani farooque phone number', + matchedSubstrings: [], + queryIntents: [], + verticalKeys: [] + } + ]; + } else if (prompt.includes('a')) { + mockedResponse.response.results = [ + { value: 'amani farooque phone number', matchedSubstrings: [], queryIntents: [], verticalKeys: [] } + ]; + } + + return mockedResponse; +} + const UniversalSearchResponse = { meta: { uuid: '0180235e-7fcd-5262-247b-d3537eea0002', @@ -484,3 +523,15 @@ export const MockedUniversalSearchRequest = RequestMock() return urlRegex.test(request.url) && request.method === 'get'; }) .respond(UniversalSearchResponse, 200, CORSHeaders); + +export const MockedUniversalAutoCompleteRequest = RequestMock() + .onRequestTo(async request => { + const urlRegex = /^https:\/\/liveapi-cached.yext.com\/v2\/accounts\/me\/answers\/autocomplete/; + return urlRegex.test(request.url) && request.method === 'get'; + }) + .respond((req, res) => { + const parsedUrl = new URL(req.url); + res.body = JSON.stringify(generateAutoCompleteResponse(parsedUrl.searchParams.get('input'))); + res.headers = CORSHeaders; + res.statusCode = 200; + }); From 50e2070376483860ce3d7129946bb50ed7351c5b Mon Sep 17 00:00:00 2001 From: Tom Meyer Date: Fri, 15 Apr 2022 11:58:25 -0400 Subject: [PATCH 2/4] Address feedback. --- tests/acceptance/fixtures/responses/universal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/acceptance/fixtures/responses/universal.js b/tests/acceptance/fixtures/responses/universal.js index 8d9fd9d40..45ab115ef 100644 --- a/tests/acceptance/fixtures/responses/universal.js +++ b/tests/acceptance/fixtures/responses/universal.js @@ -30,7 +30,7 @@ function generateAutoCompleteResponse (prompt) { verticalKeys: [] } ]; - } else if (prompt.includes('a')) { + } else if (prompt.startsWith('a')) { mockedResponse.response.results = [ { value: 'amani farooque phone number', matchedSubstrings: [], queryIntents: [], verticalKeys: [] } ]; From e153ed03166d2646dc471cc44d17711bd97f03a0 Mon Sep 17 00:00:00 2001 From: Tom Meyer Date: Fri, 15 Apr 2022 13:40:40 -0400 Subject: [PATCH 3/4] Feedback. --- .../acceptancesuites/acceptancesuite.js | 3 +- tests/acceptance/fixtures/responses/cors.js | 1 + .../responses/universal/autocomplete.js | 53 +++++++++++++++++++ .../{universal.js => universal/search.js} | 53 +------------------ 4 files changed, 57 insertions(+), 53 deletions(-) create mode 100644 tests/acceptance/fixtures/responses/cors.js create mode 100644 tests/acceptance/fixtures/responses/universal/autocomplete.js rename tests/acceptance/fixtures/responses/{universal.js => universal/search.js} (94%) diff --git a/tests/acceptance/acceptancesuites/acceptancesuite.js b/tests/acceptance/acceptancesuites/acceptancesuite.js index a86ba180a..64719fc3f 100644 --- a/tests/acceptance/acceptancesuites/acceptancesuite.js +++ b/tests/acceptance/acceptancesuites/acceptancesuite.js @@ -8,7 +8,8 @@ import { VERTICAL_SEARCH_URL_REGEX } from '../constants'; import FacetsPage from '../pageobjects/facetspage'; -import { MockedUniversalAutoCompleteRequest, MockedUniversalSearchRequest } from '../fixtures/responses/universal'; +import { MockedUniversalAutoCompleteRequest } from '../fixtures/responses/universal/autocomplete'; +import { MockedUniversalSearchRequest } from '../fixtures/responses/universal/search'; import { Selector, RequestLogger } from 'testcafe'; import { browserBackButton, diff --git a/tests/acceptance/fixtures/responses/cors.js b/tests/acceptance/fixtures/responses/cors.js new file mode 100644 index 000000000..548c43761 --- /dev/null +++ b/tests/acceptance/fixtures/responses/cors.js @@ -0,0 +1 @@ +export const CORSHeaders = { 'access-control-allow-credentials': true, 'access-control-allow-origin': 'http://localhost:9999' }; \ No newline at end of file diff --git a/tests/acceptance/fixtures/responses/universal/autocomplete.js b/tests/acceptance/fixtures/responses/universal/autocomplete.js new file mode 100644 index 000000000..e6ffd5019 --- /dev/null +++ b/tests/acceptance/fixtures/responses/universal/autocomplete.js @@ -0,0 +1,53 @@ +import { RequestMock } from 'testcafe'; +import { CORSHeaders } from '../cors'; + +function generateAutoCompleteResponse (prompt) { + const mockedResponse = { + meta: { + uuid: '01802d71-9901-1b83-9d50-ff143088f1ab', + errors: [] + }, + response: { + input: { + value: prompt, + queryIntents: [] + }, + results: [] + } + }; + + if (prompt === '') { + mockedResponse.response.results = [ + { + value: 'a Rose by any other name', + matchedSubstrings: [], + queryIntents: [], + verticalKeys: [] + }, + { + value: 'amani farooque phone number', + matchedSubstrings: [], + queryIntents: [], + verticalKeys: [] + } + ]; + } else if (prompt.startsWith('a')) { + mockedResponse.response.results = [ + { value: 'amani farooque phone number', matchedSubstrings: [], queryIntents: [], verticalKeys: [] } + ]; + } + + return mockedResponse; +} + +export const MockedUniversalAutoCompleteRequest = RequestMock() + .onRequestTo(async request => { + const urlRegex = /^https:\/\/liveapi-cached.yext.com\/v2\/accounts\/me\/answers\/autocomplete/; + return urlRegex.test(request.url) && request.method === 'get'; + }) + .respond((req, res) => { + const parsedUrl = new URL(req.url); + res.body = JSON.stringify(generateAutoCompleteResponse(parsedUrl.searchParams.get('input'))); + res.headers = CORSHeaders; + res.statusCode = 200; + }); diff --git a/tests/acceptance/fixtures/responses/universal.js b/tests/acceptance/fixtures/responses/universal/search.js similarity index 94% rename from tests/acceptance/fixtures/responses/universal.js rename to tests/acceptance/fixtures/responses/universal/search.js index 45ab115ef..089c1e36e 100644 --- a/tests/acceptance/fixtures/responses/universal.js +++ b/tests/acceptance/fixtures/responses/universal/search.js @@ -1,43 +1,5 @@ import { RequestMock } from 'testcafe'; - -function generateAutoCompleteResponse (prompt) { - const mockedResponse = { - meta: { - uuid: '01802d71-9901-1b83-9d50-ff143088f1ab', - errors: [] - }, - response: { - input: { - value: prompt, - queryIntents: [] - }, - results: [] - } - }; - - if (prompt === '') { - mockedResponse.response.results = [ - { - value: 'a Rose by any other name', - matchedSubstrings: [], - queryIntents: [], - verticalKeys: [] - }, - { - value: 'amani farooque phone number', - matchedSubstrings: [], - queryIntents: [], - verticalKeys: [] - } - ]; - } else if (prompt.startsWith('a')) { - mockedResponse.response.results = [ - { value: 'amani farooque phone number', matchedSubstrings: [], queryIntents: [], verticalKeys: [] } - ]; - } - - return mockedResponse; -} +import { CORSHeaders } from '../cors'; const UniversalSearchResponse = { meta: { @@ -515,7 +477,6 @@ const UniversalSearchResponse = { } } }; -const CORSHeaders = { 'access-control-allow-credentials': true, 'access-control-allow-origin': 'http://localhost:9999' }; export const MockedUniversalSearchRequest = RequestMock() .onRequestTo(async request => { @@ -523,15 +484,3 @@ export const MockedUniversalSearchRequest = RequestMock() return urlRegex.test(request.url) && request.method === 'get'; }) .respond(UniversalSearchResponse, 200, CORSHeaders); - -export const MockedUniversalAutoCompleteRequest = RequestMock() - .onRequestTo(async request => { - const urlRegex = /^https:\/\/liveapi-cached.yext.com\/v2\/accounts\/me\/answers\/autocomplete/; - return urlRegex.test(request.url) && request.method === 'get'; - }) - .respond((req, res) => { - const parsedUrl = new URL(req.url); - res.body = JSON.stringify(generateAutoCompleteResponse(parsedUrl.searchParams.get('input'))); - res.headers = CORSHeaders; - res.statusCode = 200; - }); From 5ef0c2fa1e4e77e4d0b23cf7c2f03dd9fa47deeb Mon Sep 17 00:00:00 2001 From: Tom Meyer Date: Fri, 15 Apr 2022 13:41:10 -0400 Subject: [PATCH 4/4] ESLint. --- tests/acceptance/fixtures/responses/cors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/acceptance/fixtures/responses/cors.js b/tests/acceptance/fixtures/responses/cors.js index 548c43761..ea5e709d6 100644 --- a/tests/acceptance/fixtures/responses/cors.js +++ b/tests/acceptance/fixtures/responses/cors.js @@ -1 +1 @@ -export const CORSHeaders = { 'access-control-allow-credentials': true, 'access-control-allow-origin': 'http://localhost:9999' }; \ No newline at end of file +export const CORSHeaders = { 'access-control-allow-credentials': true, 'access-control-allow-origin': 'http://localhost:9999' };