diff --git a/apps/mobility-bap/components/bottomModalRenderer/bottomModalRenderer.tsx b/apps/mobility-bap/components/bottomModalRenderer/bottomModalRenderer.tsx index 7aecffd61..7fb81ab58 100644 --- a/apps/mobility-bap/components/bottomModalRenderer/bottomModalRenderer.tsx +++ b/apps/mobility-bap/components/bottomModalRenderer/bottomModalRenderer.tsx @@ -99,6 +99,7 @@ const BottomModalRenderer = (props: BottomModalRendererProps) => { return ( diff --git a/cypress/e2e/mobility-bap/homePage.cy.ts b/cypress/e2e/mobility-bap/homePage.cy.ts new file mode 100644 index 000000000..cd9822841 --- /dev/null +++ b/cypress/e2e/mobility-bap/homePage.cy.ts @@ -0,0 +1,88 @@ +import { testIds } from '../../../shared/dataTestIds' + +describe('Home Page Tests', () => { + before(() => { + cy.visit(`${testIds.url_base}${testIds.url_home}`) + cy.setGeolocation('getAddress', { latitude: 18.6087413, longitude: 73.75189209999999 }, 'mobility-bap/address.json') + cy.wait('@getAddress') + }) + + it('should render homepage with google map', () => { + cy.getByData(testIds.mobility_map_container).should('be.visible') + cy.getByData(testIds.mobility_map).should('be.visible') + }) + + it('should render the pickup-dropoff modal', () => { + cy.getByData(testIds.mobility_pickup_dropoff).should('be.visible') + cy.getByData(testIds.mobility_pickup_dropoff).should('contain.text', 'Where Would You Like To Go?') + cy.getByData(testIds.mobility_pickup_label).should('contain.text', 'Pickup') + cy.getByData(testIds.mobility_dropoff_label).should('contain.text', 'Dropoff') + }) + + it('should contain pickup address on load', () => { + cy.getByData(testIds.mobility_pickup_label).should('contain.text', 'Pickup') + cy.getByData(testIds.mobility_pickup_address).should('contain.text', 'Decathlon Sports Wakad') + }) + + it('should contain empty dropoff address on load', () => { + cy.getByData(testIds.mobility_dropoff_label).should('contain.text', 'Dropoff') + cy.getByData(testIds.mobility_dropoff_address).should('contain.text', '') + }) + + it('The search button should render as disabled on initial load', () => { + cy.getByData(testIds.mobility_search_btn).should('be.disabled') + }) + + it('should render the geolocation search component onclick of dropoff field', () => { + cy.getByData(testIds.mobility_dropoff_address).click() + cy.getByData(testIds.loaction_list).should('be.visible') + }) + + it('should render the location list on input change', () => { + cy.getByData(testIds.loaction_list).should('be.visible') + cy.getByData(testIds.loaction_list).type('Maharashtra Cricket Association Stadium') + cy.getByData(testIds.location_list_item).should('be.visible') + }) + + it('should update the dropoff address on select', () => { + cy.getByData(testIds.location_list_item).should('be.visible').eq(0).click() + cy.getByData(testIds.mobility_dropoff_address).should('contain.text', 'Maharashtra Cricket Association Stadium') + }) + + it('search button should be enabled when both drop-off and pickup addresses are set', () => { + cy.getByData(testIds.mobility_search_btn).should('not.be.disabled') + }) + + it('should check for violation for drop-off and pickup when search button click', () => { + cy.performCheckViolation( + { + policyCheckResult: [ + { + location: '18.6744633,73.7065161', + violation: false, + violatedPolicies: [ + { + id: '6b298', + name: 'Quarantine Policy' + } + ] + } + ] + }, + 'checkViolation' + ) + cy.getByData(testIds.mobility_search_btn).click() + cy.getByData(testIds.mobility_cancel_search).should('be.visible') + cy.getByData(testIds.mobility_cancel_search).should('contain.text', 'Cancel Search') + }) + + it('should cancel the search when the user clicks the cancel button', () => { + cy.getByData(testIds.mobility_cancel_search).click() + cy.getByData(testIds.mobility_search_btn).should('not.be.disabled') + cy.getByData(testIds.mobility_cancel_search).should('not.exist') + }) + + it('should render the toast when the user cancels the search', () => { + cy.getByData(testIds.feedback).should('contain.text', 'Cab search request canceled.') + }) +}) diff --git a/cypress/fixtures/mobility-bap/address.json b/cypress/fixtures/mobility-bap/address.json new file mode 100644 index 000000000..a197d1c9c --- /dev/null +++ b/cypress/fixtures/mobility-bap/address.json @@ -0,0 +1,16 @@ +{ + "ok": true, + "status": 200, + "results": [ + { + "address_components": [ + { + "long_name": "India", + "short_name": "IN", + "types": ["country", "political"] + } + ], + "formatted_address": "Decathlon Sports Wakad, Tathawade Road, Tathawade, Pimpri-Chinchwad, Maharashtra, India" + } + ] +} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 4ba86aafd..e6ab977a1 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -52,7 +52,7 @@ declare global { interface Chainable { getByData(dataTestAttribute: string): Chainable> login(baseUrl: string, email: string, password: string): Chainable - setGeolocation(aliasName: string): Chainable + setGeolocation(aliasName: string, location: { latitude: number; longitude: number }, data?: any): Chainable performSearch(searchTerm: string, response: RouteHandler): Chainable mockReduxState(type: string, data: Record): Chainable selectProduct(index: number): Chainable @@ -78,6 +78,7 @@ declare global { fillConsentDetails(): Chainable fillAssemblyDetails(): Chainable performXinput_Submit(response: RouteHandler, aliasName: string): Chainable + performCheckViolation(response: RouteHandler, aliasName: string): Chainable //Created by omkar loginDynamic(email: string, password: string): Chainable performSearchDynamic(searchTerm: string): Chainable @@ -89,6 +90,7 @@ const GCL_URL = 'https://bap-gcl-**.becknprotocol.io' const STRAPI_URL = 'https://bap-backend-**.becknprotocol.io/api' const XINPUT_SUBMIT = 'https://bpp-unified-strapi-dev.becknprotocol.io/beckn-bpp-adapter/x-input' const S3Integration_URL = 'https://bap-s3integration-api-dev.becknprotocol.io' +const CHECK_VIOLATION_URL = 'https://bpp-unified-strapi-dev.becknprotocol.io/policy-violation/bap' Cypress.Commands.add('getByData', selector => { return cy.get(`[data-test=${selector}]`) @@ -123,17 +125,20 @@ Cypress.Commands.add('login', (baseUrl, email, password) => { ) }) -Cypress.Commands.add('setGeolocation', aliasName => { - cy.window().then(win => { - cy.intercept('GET', '**/maps.googleapis.com/maps/api/geocode/json*', { - fixture: 'homePage/address.json' - }).as(aliasName as string) - cy.stub(win.navigator.geolocation, 'getCurrentPosition').callsFake(success => { - success({ coords: { latitude: 28.4594965, longitude: 77.0266383 } }) +Cypress.Commands.add( + 'setGeolocation', + (aliasName, location = { latitude: 28.4594965, longitude: 77.0266383 }, data = 'homePage/address.json') => { + cy.window().then(win => { + cy.intercept('GET', '**/maps.googleapis.com/maps/api/geocode/json*', { + fixture: data + }).as(aliasName as string) + cy.stub(win.navigator.geolocation, 'getCurrentPosition').callsFake(success => { + success({ coords: location }) + }) }) - }) - cy.wait(500) -}) + cy.wait(500) + } +) Cypress.Commands.add('performSearch', (searchTerm, response) => { const searchInputId = 'search-input' @@ -229,6 +234,10 @@ Cypress.Commands.add('performXinput_Submit', (response, aliasName) => { cy.intercept('POST', `${GCL_URL}/x-input/submit`, response).as(aliasName) }) +Cypress.Commands.add('performCheckViolation', (response, aliasName) => { + cy.intercept('POST', `${CHECK_VIOLATION_URL}/policy/checkViolation`, response).as(aliasName) +}) + Cypress.Commands.add('fillComplaintDetails', complaintDetails => { cy.getByData(testIds.checkoutpage_complaints_Details).getByData(testIds.checkoutpage_openForm).eq(0).click() cy.getByData(testIds.checkoutpage_complaints_Details) diff --git a/shared/dataTestIds.ts b/shared/dataTestIds.ts index 92218b781..7cb50562a 100644 --- a/shared/dataTestIds.ts +++ b/shared/dataTestIds.ts @@ -341,7 +341,8 @@ const testIds = { job_details_name: 'job-details-name', job_details_provider_name: 'job-details-provider-name', job_details_description: 'job-details-description', - job_details_apply: 'job-details-apply' + job_details_apply: 'job-details-apply', + mobility_cancel_search: 'cancel-search' } export { testIds }