diff --git a/tests/cypress.config.js b/tests/cypress.config.js
new file mode 100644
index 000000000..618008651
--- /dev/null
+++ b/tests/cypress.config.js
@@ -0,0 +1,25 @@
+const { defineConfig } = require("cypress");
+
+module.exports = defineConfig({
+ video: true,
+ e2e: {
+ setupNodeEvents(on, config) {
+ // implement node event listeners here
+ },
+ baseUrl: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca',
+ env: {
+ idir_username: '',
+ idir_password: '',
+ bceid_username: '',
+ bceid_password: '',
+ update_term_oversize_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/applications/581',
+ new_tros_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/create-application/TROS',
+ new_trow_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/create-application/TROW',
+ new_power_unit_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-powerunit',
+ update_power_unit_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/power-units/106',
+ manage_vehicle_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles',
+ new_trailer_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-trailer',
+ update_trailer_url: 'https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/trailers/106',
+ },
+ },
+});
diff --git a/tests/cypress/e2e/bceid-crud-power-units.cy.js b/tests/cypress/e2e/bceid-crud-power-units.cy.js
new file mode 100644
index 000000000..3595ff44b
--- /dev/null
+++ b/tests/cypress/e2e/bceid-crud-power-units.cy.js
@@ -0,0 +1,111 @@
+describe('Crud for power unit', () => {
+ it('Should create, update or delete a power unit', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('bceid_username');
+ const password = Cypress.env('bceid_password');
+ const new_power_unit_url = '/manage-vehicles/add-powerunit';
+ const update_power_unit_url = Cypress.env('update_power_unit_url');
+ const manage_vehicle_url = '/manage-vehicles';
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-bceid').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ cy.visit(new_power_unit_url);
+ cy.wait(5000);
+
+ // create new power unit
+ // cy.get('[name="unitNumber"]').type('MCL37');
+ // cy.wait(5000);
+
+ cy.get('[name="make"]').type('Toyota');
+ cy.wait(5000);
+
+ cy.get('[name="year"]').type('2002');
+ cy.wait(5000);
+
+ cy.get('[name="vin"]').type('MCL37A');
+ cy.wait(5000);
+
+ cy.get('[name="plate"]').type('VB0007');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-powerUnitTypeCode"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="BUSCRUM"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="AB"]').click();
+ cy.wait(5000);
+
+ cy.get('[name="licensedGvw"]').type('2000');
+ cy.wait(5000);
+
+ cy.get('.css-xie432').click();
+ cy.wait(5000);
+
+ // update power unit
+ cy.visit(manage_vehicle_url);
+ cy.wait(5000);
+
+ cy.get('.css-15mydm5').first().scrollIntoView().wait(3000).click({ force: true });
+ cy.wait(5000);
+
+ cy.xpath("//li[text()='Edit']").click();
+ cy.wait(5000);
+
+ cy.get('[name="make"]').clear().type('Toyota');
+ cy.wait(5000);
+
+ cy.get('[name="year"]').clear().type('2021');
+ cy.wait(5000);
+
+ cy.get('[name="licensedGvw"]').clear().type('3000');
+ cy.wait(5000);
+
+ cy.get('.css-xie432').click();
+ cy.wait(5000);
+
+ // delete power unit
+ cy.visit(manage_vehicle_url);
+ cy.wait(5000);
+
+ cy.xpath("(//input[@type='checkbox'])[2]")
+ .then(($checkbox) => {
+ if (!$checkbox.prop('checked')) { // Check if it's not selected
+ cy.wrap($checkbox).click(); // Select it if not already checked
+ }
+ });
+ cy.wait(5000);
+
+ cy.get('.delete-btn--active').click();
+ cy.wait(5000);
+
+ cy.get('.css-1a53fri').click();
+ cy.wait(5000);
+
+ });
+});
+
diff --git a/tests/cypress/e2e/bceid-crud-trailers.cy.js b/tests/cypress/e2e/bceid-crud-trailers.cy.js
new file mode 100644
index 000000000..35d709633
--- /dev/null
+++ b/tests/cypress/e2e/bceid-crud-trailers.cy.js
@@ -0,0 +1,115 @@
+describe('Crud for trailer', () => {
+ it('Should create, update or delete a trailer', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('bceid_username');
+ const password = Cypress.env('bceid_password');
+ const new_trailer_url = '/manage-vehicles/add-trailer';
+ const update_trailer_url = Cypress.env('update_trailer_url');
+ const manage_vehicle_url = '/manage-vehicles';
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-bceid').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ cy.visit(new_trailer_url);
+ cy.wait(5000);
+
+ // create new trailer
+ // cy.get('[name="unitNumber"]').type('TCL37');
+ // cy.wait(5000);
+
+ cy.get('[name="make"]').type('NISSAN');
+ cy.wait(5000);
+
+ cy.get('[name="year"]').type('2005');
+ cy.wait(5000);
+
+ cy.get('[name="vin"]').type('TCL37A');
+ cy.wait(5000);
+
+ cy.get('[name="plate"]').type('VT0007');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-trailerTypeCode"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="BOOSTER"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="BC"]').click();
+ cy.wait(5000);
+
+ cy.get('.css-xie432').click();
+ cy.wait(5000);
+
+ // update power unit
+ cy.visit(manage_vehicle_url);
+ cy.wait(5000);
+
+ cy.get('.tab__label').contains('Trailer').click();
+ cy.wait(5000);
+
+ cy.get('.css-15mydm5').first().scrollIntoView().wait(3000).click({ force: true });
+ cy.wait(5000);
+
+ cy.xpath("//li[text()='Edit']").click();
+ cy.wait(5000);
+
+ cy.get('[name="make"]').clear().type('BMW');
+ cy.wait(5000);
+
+ // cy.get('[name="unitNumber"]').clear().type('TCL37');
+ // cy.wait(5000);
+
+ cy.get('[name="year"]').clear().type('2021');
+ cy.wait(5000);
+
+ cy.get('.css-xie432').click();
+ cy.wait(5000);
+
+
+ // delete trailer
+ cy.visit(manage_vehicle_url);
+ cy.wait(5000);
+
+ cy.get('.tab__label').contains('Trailer').click();
+ cy.wait(5000);
+
+ cy.xpath("(//input[@type='checkbox'])[2]")
+ .then(($checkbox) => {
+ if (!$checkbox.prop('checked')) { // Check if it's not selected
+ cy.wrap($checkbox).click(); // Select it if not already checked
+ }
+ });
+ cy.wait(5000);
+
+ cy.get('.delete-btn--active').click();
+ cy.wait(5000);
+
+ cy.get('.css-1a53fri').click();
+ cy.wait(5000);
+
+ });
+});
+
diff --git a/tests/cypress/e2e/bceid-new-term-oversize.cy.js b/tests/cypress/e2e/bceid-new-term-oversize.cy.js
new file mode 100644
index 000000000..932a83b7c
--- /dev/null
+++ b/tests/cypress/e2e/bceid-new-term-oversize.cy.js
@@ -0,0 +1,85 @@
+describe('Login Test for OnRouteBC', () => {
+ it('Should navigate to the login page, find the login button, and enter credentials', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('bceid_username');
+ const password = Cypress.env('bceid_password');
+ const new_tros_url = '/create-application/TROS';
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-bceid').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ cy.visit(new_tros_url);
+ cy.wait(5000);
+
+ // fill out the form
+ cy.get('#application-select-vehicle').type('MCL36');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.vin"]').click({ force: true }).type('MCL36A');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.plate"]').type('L4NDO');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.make"]').type('BMW');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.year"]').type('2020');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="BC"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleType"]').click(({ force: true }));
+ cy.wait(5000);
+
+ cy.get('[data-value="powerUnit"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleSubType"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="REGTRCK"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-testid="continue-application-button"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('input[type="checkbox"]').each(($checkbox) => {
+ cy.wrap($checkbox).click({ force: true });
+ });
+ cy.wait(5000);
+
+ cy.get('[data-testid="add-to-cart-btn"]').click({force: true});
+ cy.wait(5000);
+
+ cy.get('.shopping-cart-button').click({force: true});
+ cy.wait(5000);
+
+ cy.get('[data-testid="pay-now-btn"]').scrollIntoView().click({force: true});
+ cy.wait(5000);
+
+ });
+});
diff --git a/tests/cypress/e2e/bceid-new-term-overweight.cy.js b/tests/cypress/e2e/bceid-new-term-overweight.cy.js
new file mode 100644
index 000000000..579d53622
--- /dev/null
+++ b/tests/cypress/e2e/bceid-new-term-overweight.cy.js
@@ -0,0 +1,85 @@
+describe('Login Test for OnRouteBC', () => {
+ it('Should navigate to the login page, find the login button, and enter credentials', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('bceid_username');
+ const password = Cypress.env('bceid_password');
+ const new_trow_url = '/create-application/TROW';
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-bceid').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ cy.visit(new_trow_url);
+ cy.wait(5000);
+
+ // fill out the form
+ cy.get('#application-select-vehicle').type('123');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.vin"]').click({ force: true }).type('115588');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.plate"]').type('1B25F');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.make"]').type('PHIL');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.year"]').type('1992');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="BC"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleType"]').click(({ force: true }));
+ cy.wait(5000);
+
+ cy.get('[data-value="trailer"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleSubType"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="DOLLIES"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-testid="continue-application-button"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('input[type="checkbox"]').each(($checkbox) => {
+ cy.wrap($checkbox).click({ force: true });
+ });
+ cy.wait(5000);
+
+ cy.get('[data-testid="add-to-cart-btn"]').click({force: true});
+ cy.wait(5000);
+
+ cy.get('.shopping-cart-button').click({force: true});
+ cy.wait(5000);
+
+ cy.get('[data-testid="pay-now-btn"]').scrollIntoView().click({force: true});
+ cy.wait(5000);
+
+ });
+});
diff --git a/tests/cypress/e2e/bceid-update-term-oversize.cy.js b/tests/cypress/e2e/bceid-update-term-oversize.cy.js
new file mode 100644
index 000000000..8dc8816a4
--- /dev/null
+++ b/tests/cypress/e2e/bceid-update-term-oversize.cy.js
@@ -0,0 +1,88 @@
+describe('Login Test for OnRouteBC', () => {
+ it('Should navigate to the login page, find the login button, and enter credentials', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('bceid_username');
+ const password = Cypress.env('bceid_password');
+ // const update_term_oversize_url = Cypress.env('update_term_oversize_url');
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-bceid').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+
+
+
+ // new a TROS application first
+ cy.visit('/create-application/TROS');
+ cy.wait(5000);
+
+ // fill out the form
+ cy.get('#application-select-vehicle').type('MCL36');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.vin"]').click({ force: true }).type('MCL36A');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.plate"]').type('L4NDO');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.make"]').type('BMW');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.year"]').type('2020');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="BC"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleType"]').click(({ force: true }));
+ cy.wait(5000);
+
+ cy.get('[data-value="powerUnit"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleSubType"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="REGTRCK"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-testid="continue-application-button"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.visit('/applications');
+ cy.wait(5000);
+
+ cy.get('a.column-link--application-details').first().click();
+ cy.wait(5000);
+
+ // update phone ext
+ cy.get('[name="permitData.contactDetails.phone1Extension"]').clear().type('0003');
+ cy.wait(5000);
+
+ // save updates
+ cy.get('[data-testid="save-application-button"]').click();
+ cy.wait(5000);
+ });
+});
diff --git a/tests/cypress/e2e/idir-amend-term-oversize.cy.js b/tests/cypress/e2e/idir-amend-term-oversize.cy.js
new file mode 100644
index 000000000..134b96917
--- /dev/null
+++ b/tests/cypress/e2e/idir-amend-term-oversize.cy.js
@@ -0,0 +1,57 @@
+describe('Login Test for OnRouteBC', () => {
+ it('Should navigate to the login page, find the login button, and enter credentials', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('idir_username');
+ const password = Cypress.env('idir_password');
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-idir').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ // Step 5: Find the search button by its class name and click it
+ cy.get('.search-button').click();
+ cy.wait(5000);
+
+ // Step 6: Find the element with value="companies" and interact with it
+ cy.get('[value="companies"]').click();
+ cy.wait(5000);
+
+ // Step 7: Find elements to amend application
+ cy.get('.css-1pog434').type('t');
+ cy.wait(5000);
+ cy.get('.search-by__search').click();
+ cy.wait(5000);
+ cy.xpath("//button[text()='Test Transport Inc.']").click();
+ cy.wait(5000);
+ cy.xpath("//div[@class='tab__label' and text()='Active Permits']").click();
+ cy.wait(5000);
+ cy.get('.css-15mydm5').first().scrollIntoView().wait(3000).click({ force: true });
+ cy.wait(5000);
+ cy.xpath("//li[text()='Amend']").click();
+ cy.wait(5000);
+ cy.get('[name="permitData.vehicleDetails.year"').clear().type('2008');
+ cy.wait(5000);
+ cy.get('[name="comment"').clear().type('Make year updated');
+ cy.wait(5000);
+ cy.get('[data-testid="continue-application-button"]').click();
+ cy.wait(5000);
+ cy.get('[type="checkbox"]').check();
+ cy.wait(5000);
+ cy.xpath("//button[text()='Continue']").click();
+ cy.wait(5000);
+ cy.xpath("//button[text()='Finish']").click();
+ cy.wait(5000);
+ });
+});
\ No newline at end of file
diff --git a/tests/cypress/e2e/idir-void-term-oversize.cy.js b/tests/cypress/e2e/idir-void-term-oversize.cy.js
new file mode 100644
index 000000000..6f051f27c
--- /dev/null
+++ b/tests/cypress/e2e/idir-void-term-oversize.cy.js
@@ -0,0 +1,194 @@
+describe('Login Test for OnRouteBC', () => {
+ it('Should navigate to the login page, find the login button, and enter credentials', () => {
+ // Retrieve the environment variables
+ const username = Cypress.env('idir_username');
+ const password = Cypress.env('idir_password');
+ const void_url = Cypress.env('void_url');
+ const new_tros_url = '/create-application/TROS';
+
+ // Step 1: Visit the base URL
+ cy.visit('/');
+
+ // Step 2: Find and click the login button by its idir
+ cy.get('#login-idir').click();
+ cy.wait(5000);
+
+ // Step 3: Enter credentials
+ cy.get('#user').type(username);
+ cy.get('#password').type(password);
+ cy.wait(5000);
+
+ // Step 4: Submit the login form
+ cy.get('[name="btnSubmit"]').click();
+ cy.wait(5000);
+
+ // Step 5: Find the search button by its class name and click it
+ cy.get('.search-button').click();
+ cy.wait(5000);
+
+ // Step 6: Find the element with value="companies" and interact with it
+ cy.get('[value="companies"]').click();
+ cy.wait(5000);
+
+ // Step 7: Find elements to amend application
+ cy.get('.css-1pog434').type('t');
+ cy.wait(5000);
+
+ cy.get('.search-by__search').click();
+ cy.wait(5000);
+
+ cy.xpath("//button[text()='Test Transport Inc.']").click();
+ cy.wait(5000);
+
+ cy.xpath("//div[@class='tab__label' and text()='Active Permits']").click();
+ cy.wait(5000);
+
+ // create a permit first
+ // click select
+ cy.get('[aria-label="Select"]').eq(1).click({ force: true });
+ cy.wait(5000);
+
+ // click term
+ cy.get('.css-1hdidwq').eq(0).click({force: true});
+ cy.wait(5000);
+
+ // click term oversize
+ cy.get('.css-1sucic7').eq(0).click({force: true});
+ cy.wait(5000);
+
+ cy.get('li.start-application-action__menu-item')
+ .contains('p.MuiTypography-root', 'Term').first()
+ .click({force: true});
+ cy.wait(5000);
+
+ cy.contains('li', 'Oversize').first().click();
+ cy.wait(5000);
+
+ cy.get('body').click({force: true});
+ cy.wait(5000);
+
+ // click "start application"
+ cy.get('.start-application-action__btn').first().click({force: true});
+ cy.wait(5000);
+
+ cy.get('.start-application-action__btn').eq(1).click({force: true});
+ cy.wait(5000);
+
+ // fill out the form
+ cy.get('[name="permitData.contactDetails.firstName"]').type('Load');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.contactDetails.lastName"]').type('Test');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.contactDetails.phone1"]').type('2501111234');
+ cy.wait(5000);
+
+ cy.get('#application-select-vehicle').type('MCL36');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.vin"]').click({ force: true }).type('MCL36A');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.plate"]').type('L4NDO');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.make"]').type('BMW');
+ cy.wait(5000);
+
+ cy.get('[name="permitData.vehicleDetails.year"]').type('2020');
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.countryCode"]').scrollIntoView().click();
+ cy.wait(5000);
+
+ cy.get('[data-value="CA"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.provinceCode"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-value="BC"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleType"]').click(({ force: true }));
+ cy.wait(5000);
+
+ cy.get('[data-value="powerUnit"]').click();
+ cy.wait(5000);
+
+ cy.get('[id="mui-component-select-permitData.vehicleDetails.vehicleSubType"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('[data-value="REGTRCK"]').click();
+ cy.wait(5000);
+
+ cy.get('[data-testid="continue-application-button"]').click({ force: true });
+ cy.wait(5000);
+
+ cy.get('input[type="checkbox"]').each(($checkbox) => {
+ cy.wrap($checkbox).click({ force: true });
+ });
+ cy.wait(5000);
+
+ cy.get('[data-testid="add-to-cart-btn"]').click({force: true});
+ cy.wait(5000);
+
+ cy.get('.shopping-cart-button').click({force: true});
+ cy.wait(5000);
+
+ // cy.get('div.MuiSelect-select[aria-controls=":r1g:"]').click();
+ // cy.wait(5000);
+ cy.get('div[role="combobox"]')
+ .contains('Select')
+ .click();
+
+ cy.contains('li', 'Mastercard (Debit)').first().click();
+ cy.wait(5000);
+
+ cy.get('[name="additionalPaymentData.icepayTransactionId"]').type(1234);
+ cy.wait(5000);
+
+ cy.get('button[data-testid="pay-now-btn"]').click({force: true});
+ cy.wait(5000);
+
+ cy.visit('/');
+ cy.wait(5000);
+
+ // Search to find the search button by its class name and click it
+ cy.get('.search-button').click();
+ cy.wait(5000);
+
+ // Find the element with value="companies" and interact with it
+ cy.get('[value="companies"]').click();
+ cy.wait(5000);
+
+ // Find elements to amend application
+ cy.get('.css-1pog434').type('t');
+ cy.wait(5000);
+
+ cy.get('.search-by__search').click();
+ cy.wait(5000);
+
+ cy.xpath("//button[text()='Test Transport Inc.']").click();
+ cy.wait(5000);
+
+ cy.xpath("//div[@class='tab__label' and text()='Active Permits']").click();
+ cy.wait(5000);
+
+ cy.get('[id="actions-button"]').first().scrollIntoView().wait(3000).click({ force: true });
+ cy.wait(5000);
+
+ cy.xpath("//li[text()='Void/Revoke']").click();
+ cy.wait(5000);
+
+ cy.get('[name="reason"]').type('void it for test');
+ cy.wait(5000);
+
+ cy.xpath("//button[text()='Continue']").click();
+ cy.wait(5000);
+
+ cy.xpath("//button[text()='Finish']").click();
+ cy.wait(5000);
+ });
+});
\ No newline at end of file
diff --git a/tests/cypress/fixtures/example.json b/tests/cypress/fixtures/example.json
new file mode 100644
index 000000000..02e425437
--- /dev/null
+++ b/tests/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js
new file mode 100644
index 000000000..66ea16ef0
--- /dev/null
+++ b/tests/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
\ No newline at end of file
diff --git a/tests/cypress/support/e2e.js b/tests/cypress/support/e2e.js
new file mode 100644
index 000000000..f16d3a3f1
--- /dev/null
+++ b/tests/cypress/support/e2e.js
@@ -0,0 +1,21 @@
+// ***********************************************************
+// This example support/e2e.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
+require('cypress-xpath');
diff --git a/tests/loadtests/dops/orbc_load_test_plan_dops.jmx b/tests/loadtests/dops/orbc_load_test_plan_dops.jmx
new file mode 100644
index 000000000..3097efb4f
--- /dev/null
+++ b/tests/loadtests/dops/orbc_load_test_plan_dops.jmx
@@ -0,0 +1,678 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+ true
+ false
+ false
+
+
+
+
+ true
+ false
+
+
+
+
+
+ Accept-Language
+ en-us,en;q=0.5
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+ Keep-Alive
+ 115
+
+
+ User-Agent
+ Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
+
+
+ Accept-Encoding
+ gzip,deflate
+
+
+ Accept-Charset
+ ISO-8859-1,utf-8;q=0.7,*;q=0.7
+
+
+ X-BlazeMeter-Session
+ ${__P(blazemeter.session_id)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 2
+ ^((?!google|facebook|youtube|pinterest|twimg|doubleclick).)*$
+ 60000
+ 120000
+
+
+
+
+
+ NUM_THREADS
+ 200
+ =
+
+
+ FRONTEND_API_URL
+ onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ VEHICLES_API_URL
+ onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca
+ =
+
+
+ DOPS_API_URL
+ onroutebc-test-dops.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ IDIR_BEARER_TOKEN
+
+ =
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ ${NUM_THREADS}
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+
+ true
+
+
+
+
+
+ Authorization
+ Bearer ${IDIR_BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ https://${VEHICLES_API_URL}/permits?searchColumn=permitNumber&searchString=1&page=1&take=10
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${IDIR_BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ https://${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ https://${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${IDIR_BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://${DOPS_API_URL}/dms/1?download=url&companyId=74
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${IDIR_BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ https://${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ https://${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${IDIR_BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+ true
+
+
+
+ false
+ {
+ "reportTemplate": "PAYMENT_AND_REFUND_DETAILED_REPORT",
+ "reportData": {
+ "issuedBy": "Self Issued and PPC",
+ "runDate": "Jul. 17, 2023, 09:00 PM, PDT",
+ "permitType": "All Permit Types",
+ "paymentMethod": "Cash, Cheque, Icepay - Mastercard, Icepay - Mastercard (Debit), Icepay - Visa, Icepay - Visa (Debit), Web - Mastercard (Debit), Web - Visa (Debit), PoS - Mastercard (Debit), PoS - Visa (Debit), PoS - Mastercard",
+ "timePeriod": "Jul. 17, 2023, 09:00 PM, PDT – Jul. 18, 2023, 09:00 PM, PDT",
+ "payments": [
+ {
+ "issuedOn": "2023-11-11T23:26:51.170Z",
+ "providerTransactionId": "73582422238",
+ "orbcTransactionId": "OR-678904512857",
+ "paymentMethod": "Cash",
+ "receiptNo": "45098721098",
+ "permitNo": "P2-72106199-468",
+ "permitType": "STOS",
+ "users": "ANPETRIC",
+ "amount": "90.00"
+ }
+ ],
+ "refunds": [
+ {
+ "issuedOn": "2023-11-11T23:26:51.170Z",
+ "providerTransactionId": "73582422238",
+ "orbcTransactionId": "OR-678904512857",
+ "paymentMethod": "Cheque",
+ "receiptNo": "51961102630",
+ "permitNo": "P2-15348742-610",
+ "permitType": "TROS",
+ "users": "KOPARKIN",
+ "amount": "10.00"
+ }
+ ],
+ "summaryPaymentsAndRefunds": [
+ {
+ "paymentMethod": "Cash",
+ "payment": "90.00",
+ "refund": null,
+ "deposit": "90.00"
+ },
+ {
+ "paymentMethod": "Cheque",
+ "payment": null,
+ "refund": "10.00",
+ "deposit": "90.00"
+ },
+ {
+ "paymentMethod": "totalAmount",
+ "payment": "90.00",
+ "refund": "10.00",
+ "deposit": "80.00"
+ }
+ ],
+ "summaryPermits": [
+ {
+ "permitType": "STOS",
+ "permitCount": "1"
+ },
+ {
+ "permitType": "TROS",
+ "permitCount": "1"
+ },
+ {
+ "permitType": "totalPermitCount",
+ "permitCount": "2"
+ }
+ ]
+ },
+ "generatedDocumentFileName": "Financial-A-2-3-4-5"
+}
+ =
+
+
+
+
+
+
+
+ https://${DOPS_API_URL}/dgen/report/render
+ POST
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+ true
+
+
+
+ false
+ {
+ "templateName": "PERMIT",
+ "templateVersion": 1,
+ "templateData": {
+ "permitName": "Oversize: Term",
+ "permitNumber": "P9-00010001-354",
+ "permitType": "TROS",
+ "createdDateTime": "Jul. 7, 2023, 08:26 am",
+ "updatedDateTime": "Jul. 7, 2023, 08:26 am",
+ "companyName": "Parisian LLC Trucking",
+ "clientNumber": "B3-000005-722",
+ "revisions": [
+ {
+ "timeStamp": "",
+ "description": "N/A"
+ }
+ ],
+ "permitData": {
+ "startDate": "Jun. 5, 2023",
+ "expiryDate": "Jul. 4, 2023",
+ "permitDuration": 30,
+ "feeSummary": "30",
+ "commodities": [
+ {
+ "description": "General Permit Conditions",
+ "condition": "CVSE-1000",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1251",
+ "checked": true
+ },
+ {
+ "description": "Permit Scope and Limitation",
+ "condition": "CVSE-1070",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1261",
+ "checked": true
+ },
+ {
+ "description": "Log Permit Conditions",
+ "condition": "CVSE-1000L",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1250",
+ "checked": true
+ }
+ ],
+ "contactDetails": {
+ "firstName": "Lewis",
+ "lastName": "Hamilton",
+ "phone1": "(778) 952-1234",
+ "email": "lewis@f1.com",
+ "additionalEmail": "lewis2@f1.com",
+ "phone1Extension": "1",
+ "phone2": null,
+ "phone2Extension": null,
+ "fax": null
+ },
+ "mailingAddress": {
+ "addressLine1": "123 Short Street",
+ "addressLine2": null,
+ "city": "Victoria",
+ "provinceCode": "British Columbia",
+ "countryCode": "Canada",
+ "postalCode": "V8X2V5"
+ },
+ "vehicleDetails": {
+ "vin": "781452",
+ "plate": "PRJZZP",
+ "make": "GMC",
+ "year": 2001,
+ "countryCode": "Canada",
+ "provinceCode": "British Columbia",
+ "vehicleType": "Power Unit",
+ "vehicleSubType": "Logging Trucks",
+ "saveVehicle": true
+ }
+ }
+ },
+ "generatedDocumentFileName": "permit-A-2-3-4-5",
+ "documentsToMerge": [
+ "CVSE-1000"
+ ]
+}
+ =
+
+
+
+
+
+
+
+ https://${DOPS_API_URL}/dgen/template/render?companyId=74
+ POST
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/dops.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_amend_term_oversize.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_amend_term_oversize.jmx
new file mode 100644
index 000000000..881c5b061
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_amend_term_oversize.jmx
@@ -0,0 +1,458 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ AMEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/companies/1/permits/421/amend
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v129.network.Network;
+import java.util.Optional;
+import org.openqa.selenium.logging.LogType
+import org.openqa.selenium.logging.LogEntries
+import org.openqa.selenium.chrome.ChromeOptions
+import org.openqa.selenium.logging.LoggingPreferences
+import java.util.logging.Level
+import java.util.function.Consumer
+
+WDS.sampleResult.sampleStart()
+
+WDS.log.info "Groovy version: ${GroovySystem.version}"
+
+
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-idir button")
+ Thread.sleep(5000)
+ /*
+ try {
+ def user = WDS.browser.findElement(By.id('user'))
+ def password = WDS.browser.findElement(By.id('password'))
+ if (user != null) {
+ def userValue = WDS.vars.get("USER")
+ def passwordValue = WDS.vars.get("PASSWORD")
+ user.sendKeys(userValue)
+ password.sendKeys(passwordValue)
+ Thread.sleep(5000)
+
+ def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+ if (submitButton != null) {
+ submitButton.click()
+ } else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+ }
+ Thread.sleep(5000)
+ }
+ } catch (NoSuchElementException e) {
+ WDS.log.info('User element not found.')
+ }
+ */
+} else {
+ WDS.log.info("Button with id 'login-idir' not found")
+}
+
+Thread.sleep(5000)
+
+def devTools = ((org.openqa.selenium.chrome.ChromeDriver) WDS.browser).getDevTools()
+devTools.createSession()
+devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()))
+devTools.addListener(Network.requestWillBeSent(), { request ->
+ if (request.getRequest().getUrl().contains("https")) {
+ def headers = request.getRequest().getHeaders()
+ def authHeader = headers.get("Authorization")
+ if (authHeader != null && authHeader.startsWith("Bearer ")) {
+ def token = authHeader.replace("Bearer ", "")
+ WDS.log.info("Extracted Token: " + token)
+ WDS.vars.put("BEARER_TOKEN", token)
+ }
+ }
+ else {
+ WDS.log.info("bruce test no token: ")
+ }
+} as Consumer)
+Thread.sleep(5000)
+
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+/*
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+Thread.sleep(10000)
+
+def searchIcon = WDS.browser.findElement(By.className('search-button'))
+searchIcon.click()
+Thread.sleep(5000)
+
+def company = WDS.browser.findElement(By.cssSelector('[value="companies"]'))
+company.click()
+Thread.sleep(5000)
+
+
+def searchInput = WDS.browser.findElement(By.className('css-1pog434'))
+searchInput.sendKeys('p')
+Thread.sleep(5000)
+
+def searchButton = WDS.browser.findElement(By.className('search-by__search'))
+searchButton.click()
+Thread.sleep(5000)
+
+def button = WDS.browser.findElement(By.xpath("//button[text()='Test Transport Inc.']"))
+button.click()
+Thread.sleep(5000)
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='Active Permits']"))
+tab.click()
+Thread.sleep(5000)
+
+def amendUrl = WDS.vars.get("AMEND_URL")
+WDS.browser.get(amendUrl);
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.clear()
+year.sendKeys("2008")
+Thread.sleep(5000)
+
+def amendment = WDS.browser.findElement(By.cssSelector('[name="comment"]'))
+amendment.clear()
+amendment.sendKeys("Make year updated")
+Thread.sleep(5000)
+
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+Thread.sleep(5000)
+
+def continueBtn = WDS.browser.findElement(By.xpath("//button[text()='Continue']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", continueBtn)
+continueBtn.click()
+Thread.sleep(5000)
+
+def finish = WDS.browser.findElement(By.xpath("//button[text()='Finish']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", finish)
+finish.click()
+Thread.sleep(5000)
+*/
+
+def searchIcon = WDS.browser.findElement(By.className('search-button'))
+searchIcon.click()
+Thread.sleep(5000)
+
+def company = WDS.browser.findElement(By.cssSelector('[value="companies"]'))
+company.click()
+Thread.sleep(5000)
+
+
+def searchInput = WDS.browser.findElement(By.className('css-1pog434'))
+searchInput.sendKeys('t')
+Thread.sleep(5000)
+
+def searchButton = WDS.browser.findElement(By.className('search-by__search'))
+searchButton.click()
+Thread.sleep(5000)
+
+def button = WDS.browser.findElement(By.xpath("//button[text()='Test Transport Inc.']"))
+button.click()
+Thread.sleep(5000)
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='Active Permits']"))
+tab.click()
+Thread.sleep(5000)
+
+def firstDotButton = WDS.browser.findElement(By.className('css-15mydm5'))
+firstDotButton.click()
+Thread.sleep(5000)
+def amendButton = WDS.browser.findElement(By.xpath("//li[text()='Amend']"))
+amendButton.click()
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.clear()
+year.sendKeys("2008")
+Thread.sleep(5000)
+
+def amendment = WDS.browser.findElement(By.cssSelector('[name="comment"]'))
+amendment.clear()
+amendment.sendKeys("Make year updated")
+Thread.sleep(5000)
+
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+Thread.sleep(5000)
+
+def continueBtn = WDS.browser.findElement(By.xpath("//button[text()='Continue']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", continueBtn)
+continueBtn.click()
+Thread.sleep(5000)
+
+def finish = WDS.browser.findElement(By.xpath("//button[text()='Finish']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", finish)
+finish.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/amend_term_oversize.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_bceid.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_bceid.jmx
new file mode 100644
index 000000000..583ac958c
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_bceid.jmx
@@ -0,0 +1,394 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+ 8889
+
+
+ true
+ 0
+ false
+
+ false
+ true
+ true
+ true
+ false
+ 0
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ GET_POWERUNITS_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca/companies/104/vehicles/powerUnits
+ =
+
+
+ GET_TRAILERS_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca/companies/104/vehicles/trailers
+ =
+
+
+ BEARER_TOKEN
+
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v129.network.Network;
+import java.util.Optional;
+import org.openqa.selenium.logging.LogType
+import org.openqa.selenium.logging.LogEntries
+import org.openqa.selenium.chrome.ChromeOptions
+import org.openqa.selenium.logging.LoggingPreferences
+import java.util.logging.Level
+import java.util.function.Consumer
+
+WDS.sampleResult.sampleStart()
+
+WDS.log.info "Groovy version: ${GroovySystem.version}"
+
+
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-bceid'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(10000)
+def user = WDS.browser.findElement(By.id('user'))
+def password = WDS.browser.findElement(By.id('password'))
+
+def userValue = WDS.vars.get("USER")
+def passwordValue = WDS.vars.get("PASSWORD")
+user.sendKeys(userValue)
+password.sendKeys(passwordValue)
+Thread.sleep(5000)
+
+def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+if (submitButton != null) {
+ submitButton.click()
+} else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+}
+Thread.sleep(5000)
+
+def devTools = ((org.openqa.selenium.chrome.ChromeDriver) WDS.browser).getDevTools()
+devTools.createSession()
+devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()))
+devTools.addListener(Network.requestWillBeSent(), { request ->
+ if (request.getRequest().getUrl().contains("https")) {
+ def headers = request.getRequest().getHeaders()
+ def authHeader = headers.get("Authorization")
+ if (authHeader != null && authHeader.startsWith("Bearer ")) {
+ def token = authHeader.replace("Bearer ", "")
+ WDS.log.info("Extracted Token: " + token)
+ WDS.vars.put("BEARER_TOKEN", token)
+ }
+ }
+ else {
+ WDS.log.info("bruce test no token: ")
+ }
+} as Consumer)
+Thread.sleep(5000)
+
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+
+
+
+
+
+
+ ${GET_POWERUNITS_URL}
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${GET_TRAILERS_URL}
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_crud_vehicles.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_crud_vehicles.jmx
new file mode 100644
index 000000000..827d974da
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_crud_vehicles.jmx
@@ -0,0 +1,545 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ NEW_POWER_UNIT_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-powerunit
+ =
+
+
+ UPDATE_POWER_UNIT_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/power-units/106
+ =
+
+
+ MANAGE_VEHICLES_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles
+ =
+
+
+ NEW_TRAILER_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-trailer
+ =
+
+
+ UPDATE_TRAILER_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/trailers/106
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+
+
+def loginButton = WDS.browser.findElement(By.id('login-bceid'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(10000)
+def user = WDS.browser.findElement(By.id('user'))
+def password = WDS.browser.findElement(By.id('password'))
+
+def userValue = WDS.vars.get("USER")
+def passwordValue = WDS.vars.get("PASSWORD")
+user.sendKeys(userValue)
+password.sendKeys(passwordValue)
+Thread.sleep(5000)
+
+def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+if (submitButton != null) {
+ submitButton.click()
+} else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+}
+Thread.sleep(10000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(50000)
+
+// create a new power unit
+def newPowerUnitUrl = WDS.vars.get("NEW_POWER_UNIT_URL")
+WDS.browser.get(newPowerUnitUrl);
+Thread.sleep(5000)
+
+def unitNumber = WDS.browser.findElement(By.cssSelector('[name="unitNumber"]'))
+unitNumber.sendKeys("MCL37")
+Thread.sleep(5000)
+
+def make = WDS.browser.findElement(By.cssSelector('[name="make"]'))
+make.sendKeys("Toyota")
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="year"]'))
+year.sendKeys("2002")
+Thread.sleep(5000)
+
+def vin = WDS.browser.findElement(By.cssSelector('[name="vin"]'))
+vin.sendKeys("MCL37A")
+Thread.sleep(5000)
+
+def plate = WDS.browser.findElement(By.cssSelector('[name="plate"]'))
+plate.sendKeys("VB0007")
+Thread.sleep(5000)
+
+def vehicleSubType = WDS.browser.findElement(By.id('mui-component-select-powerUnitTypeCode'))
+vehicleSubType.click()
+def bus = WDS.browser.findElement(By.cssSelector('[data-value="BUSCRUM"]'))
+bus.click()
+Thread.sleep(5000)
+
+def country = WDS.browser.findElement(By.id('mui-component-select-countryCode'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", country)
+country.click()
+Thread.sleep(5000)
+def ca = WDS.browser.findElement(By.cssSelector('[data-value="CA"]'))
+ca.click()
+Thread.sleep(5000)
+
+def province = WDS.browser.findElement(By.id('mui-component-select-provinceCode'))
+province.click()
+Thread.sleep(5000)
+def ab = WDS.browser.findElement(By.cssSelector('[data-value="AB"]'))
+ab.click()
+Thread.sleep(5000)
+
+def licensedGvw = WDS.browser.findElement(By.cssSelector('[name="licensedGvw"]'))
+licensedGvw.sendKeys("2000")
+Thread.sleep(5000)
+
+def addToInventory = WDS.browser.findElement(By.className('css-xie432'))
+addToInventory.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// update a power unit
+def updatePowerUnitUrl = WDS.vars.get("UPDATE_POWER_UNIT_URL")
+WDS.browser.get(updatePowerUnitUrl);
+Thread.sleep(5000)
+
+def make = WDS.browser.findElement(By.cssSelector('[name="make"]'))
+make.clear()
+make.sendKeys("Toyota")
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="year"]'))
+year.clear()
+year.sendKeys("2021")
+Thread.sleep(5000)
+
+def licensedGvw = WDS.browser.findElement(By.cssSelector('[name="licensedGvw"]'))
+licensedGvw.clear()
+licensedGvw.sendKeys("5000")
+Thread.sleep(5000)
+
+def save = WDS.browser.findElement(By.className('css-xie432'))
+save.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+
+Thread.sleep(10000)
+
+// delete a power unit
+def manageVehiclesUrl = WDS.vars.get("MANAGE_VEHICLES_URL")
+WDS.browser.get(manageVehiclesUrl);
+Thread.sleep(5000)
+
+def checkbox = WDS.browser.findElement(By.xpath("(//input[@type='checkbox'])[2]"))
+if (!checkbox.isSelected()) {
+ checkbox.click()
+}
+
+def delete = WDS.browser.findElement(By.className('delete-btn--active'))
+delete.click()
+Thread.sleep(5000)
+
+def deleteConfirm = WDS.browser.findElement(By.className('css-1a53fri'))
+deleteConfirm.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// create a new trailer
+def newTrailerUrl = WDS.vars.get("NEW_TRAILER_URL")
+WDS.browser.get(newTrailerUrl);
+Thread.sleep(5000)
+
+def unitNumber = WDS.browser.findElement(By.cssSelector('[name="unitNumber"]'))
+unitNumber.sendKeys("TCL37")
+Thread.sleep(5000)
+
+def make = WDS.browser.findElement(By.cssSelector('[name="make"]'))
+make.sendKeys("Toyota")
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="year"]'))
+year.sendKeys("2002")
+Thread.sleep(5000)
+
+def vin = WDS.browser.findElement(By.cssSelector('[name="vin"]'))
+vin.sendKeys("TCL37A")
+Thread.sleep(5000)
+
+def plate = WDS.browser.findElement(By.cssSelector('[name="plate"]'))
+plate.sendKeys("VT0007")
+Thread.sleep(5000)
+
+def vehicleSubType = WDS.browser.findElement(By.id('mui-component-select-trailerTypeCode'))
+vehicleSubType.click()
+def bus = WDS.browser.findElement(By.cssSelector('[data-value="BOOSTER"]'))
+bus.click()
+Thread.sleep(5000)
+
+def country = WDS.browser.findElement(By.id('mui-component-select-countryCode'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", country)
+country.click()
+Thread.sleep(5000)
+def ca = WDS.browser.findElement(By.cssSelector('[data-value="CA"]'))
+ca.click()
+Thread.sleep(5000)
+
+def province = WDS.browser.findElement(By.id('mui-component-select-provinceCode'))
+province.click()
+Thread.sleep(5000)
+def ab = WDS.browser.findElement(By.cssSelector('[data-value="AB"]'))
+ab.click()
+Thread.sleep(5000)
+
+def addToInventory = WDS.browser.findElement(By.className('css-xie432'))
+addToInventory.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// update a trailer
+def updateTrailerUrl = WDS.vars.get("UPDATE_TRAILER_URL")
+WDS.browser.get(updateTrailerUrl);
+Thread.sleep(5000)
+
+def unitNumber = WDS.browser.findElement(By.cssSelector('[name="unitNumber"]'))
+unitNumber.clear()
+unitNumber.sendKeys("TCL37")
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="year"]'))
+year.clear()
+year.sendKeys("2021")
+Thread.sleep(5000)
+
+def save = WDS.browser.findElement(By.className('css-xie432'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", save)
+save.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// delete a trailer
+def manageVehiclesUrl = WDS.vars.get("MANAGE_VEHICLES_URL")
+WDS.browser.get(manageVehiclesUrl);
+Thread.sleep(5000)
+
+def trailerTab = WDS.browser.findElement(By.id('layout-tab-1'))
+trailerTab.click()
+Thread.sleep(5000)
+
+def checkbox = WDS.browser.findElement(By.xpath("(//input[@type='checkbox'])[2]"))
+if (!checkbox.isSelected()) {
+ checkbox.click()
+}
+
+def delete = WDS.browser.findElement(By.className('delete-btn--active'))
+delete.click()
+Thread.sleep(5000)
+
+def deleteConfirm = WDS.browser.findElement(By.className('css-1a53fri'))
+deleteConfirm.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_edit_profile.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_edit_profile.jmx
new file mode 100644
index 000000000..bf7592368
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_edit_profile.jmx
@@ -0,0 +1,416 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ NEW_POWER_UNIT_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-powerunit
+ =
+
+
+ UPDATE_POWER_UNIT_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/power-units/106
+ =
+
+
+ MANAGE_VEHICLES_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles
+ =
+
+
+ NEW_TRAILER_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/add-trailer
+ =
+
+
+ UPDATE_TRAILER_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-vehicles/trailers/106
+ =
+
+
+ EDIT_CONTACT_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-profiles
+ =
+
+
+ EDIT_USER_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/manage-profiles/edit-user/EB1CA523856F4E7C92F7322C0194CA3E
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+
+
+def loginButton = WDS.browser.findElement(By.id('login-bceid'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(10000)
+def user = WDS.browser.findElement(By.id('user'))
+def password = WDS.browser.findElement(By.id('password'))
+
+def userValue = WDS.vars.get("USER")
+def passwordValue = WDS.vars.get("PASSWORD")
+user.sendKeys(userValue)
+password.sendKeys(passwordValue)
+Thread.sleep(5000)
+
+def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+if (submitButton != null) {
+ submitButton.click()
+} else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+}
+Thread.sleep(10000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def editContactUrl = WDS.vars.get("EDIT_CONTACT_URL")
+WDS.browser.get(editContactUrl);
+Thread.sleep(5000)
+
+def edit = WDS.browser.findElement(By.className('css-5k7mli'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", edit)
+edit.click()
+Thread.sleep(5000)
+
+def phone = WDS.browser.findElement(By.cssSelector('[name="phone"]'))
+phone.clear()
+phone.sendKeys("(250) 205-0006")
+Thread.sleep(5000)
+
+def extension = WDS.browser.findElement(By.cssSelector('[name="extension"]'))
+extension.clear()
+extension.sendKeys("0001")
+Thread.sleep(5000)
+
+def fax = WDS.browser.findElement(By.cssSelector('[name="fax"]'))
+fax.clear()
+fax.sendKeys("(250) 205-0007")
+Thread.sleep(5000)
+
+
+
+def save = WDS.browser.findElement(By.className('css-xie432'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", save)
+save.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def editContactUrl = WDS.vars.get("EDIT_CONTACT_URL")
+WDS.browser.get(editContactUrl);
+Thread.sleep(5000)
+
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='My Information']"))
+tab.click()
+Thread.sleep(5000)
+
+def edit = WDS.browser.findElement(By.className('css-17ifrgy'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", edit)
+edit.click()
+Thread.sleep(5000)
+
+
+def extension = WDS.browser.findElement(By.cssSelector('[name="phone1Extension"]'))
+extension.clear()
+extension.sendKeys("0001")
+Thread.sleep(5000)
+
+def fax = WDS.browser.findElement(By.cssSelector('[name="fax"]'))
+fax.clear()
+fax.sendKeys("(250) 205-0007")
+Thread.sleep(5000)
+
+
+
+def save = WDS.browser.findElement(By.className('css-xie432'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", save)
+save.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def editUserUrl = WDS.vars.get("EDIT_USER_URL")
+WDS.browser.get(editUserUrl);
+Thread.sleep(5000)
+
+
+def phone2 = WDS.browser.findElement(By.cssSelector('[name="phone2"]'))
+phone2.clear()
+phone2.sendKeys("(250) 205-0007")
+Thread.sleep(5000)
+
+
+def extension = WDS.browser.findElement(By.cssSelector('[name="phone2Extension"]'))
+extension.clear()
+extension.sendKeys("0002")
+Thread.sleep(5000)
+
+def fax = WDS.browser.findElement(By.cssSelector('[name="fax"]'))
+fax.clear()
+fax.sendKeys("(250) 205-0009")
+Thread.sleep(5000)
+
+
+def save = WDS.browser.findElement(By.className('css-xie432'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", save)
+save.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir.jmx
new file mode 100644
index 000000000..b9501bf63
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir.jmx
@@ -0,0 +1,482 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+ 8889
+
+
+ true
+ 0
+ false
+
+ false
+ true
+ true
+ true
+ false
+ 0
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ GET_POWERUNITS_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca/companies/104/vehicles/powerUnits
+ =
+
+
+ GET_TRAILERS_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca/companies/104/vehicles/trailers
+ =
+
+
+ BEARER_TOKEN
+
+ =
+
+
+ VEHICLES_API_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v129.network.Network;
+import java.util.Optional;
+import org.openqa.selenium.logging.LogType
+import org.openqa.selenium.logging.LogEntries
+import org.openqa.selenium.chrome.ChromeOptions
+import org.openqa.selenium.logging.LoggingPreferences
+import java.util.logging.Level
+import java.util.function.Consumer
+
+WDS.sampleResult.sampleStart()
+
+WDS.log.info "Groovy version: ${GroovySystem.version}"
+
+
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(5000)
+
+/*
+try {
+ def user = WDS.browser.findElement(By.id('user'))
+ def password = WDS.browser.findElement(By.id('password'))
+ if (user != null) {
+ def userValue = WDS.vars.get("USER")
+ def passwordValue = WDS.vars.get("PASSWORD")
+ user.sendKeys(userValue)
+ password.sendKeys(passwordValue)
+ Thread.sleep(5000)
+
+ def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+ if (submitButton != null) {
+ submitButton.click()
+ } else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+ }
+ Thread.sleep(5000)
+ }
+} catch (NoSuchElementException e) {
+ WDS.log.info('User element not found.')
+}
+*/
+
+
+def devTools = ((org.openqa.selenium.chrome.ChromeDriver) WDS.browser).getDevTools()
+devTools.createSession()
+devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()))
+devTools.addListener(Network.requestWillBeSent(), { request ->
+ if (request.getRequest().getUrl().contains("https")) {
+ def headers = request.getRequest().getHeaders()
+ def authHeader = headers.get("Authorization")
+ if (authHeader != null && authHeader.startsWith("Bearer ")) {
+ def token = authHeader.replace("Bearer ", "")
+ WDS.log.info("Extracted Token: " + token)
+ WDS.vars.put("BEARER_TOKEN", token)
+ }
+ }
+ else {
+ WDS.log.info("bruce test no token: ")
+ }
+} as Consumer)
+Thread.sleep(5000)
+
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/permits?searchColumn=permitNumber&searchString=1&page=1&take=10
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users?userRole=PPCCLERK&permitIssuerPPCUser=true
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users/claims?companyId=74
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users/user-context
+ POST
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir_scenarios.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir_scenarios.jmx
new file mode 100644
index 000000000..94410bb39
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_idir_scenarios.jmx
@@ -0,0 +1,528 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+ brwang
+ =
+
+
+ PASSWORD
+ Dslcfjzbjhmdys_11
+ =
+
+
+ HOME_PAGE_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/home
+ =
+
+
+ VEHICLES_API_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca
+ =
+
+
+ BEARER_TOKEN
+
+ =
+
+
+ SEARCH_PERMITE_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/search-results?searchEntity=permits&searchByFilter=permitNumber&searchString=1
+ =
+
+
+ RESEND_EMAIL
+ bruce.wang@gov.bc.ca
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v129.network.Network;
+import java.util.Optional;
+import org.openqa.selenium.logging.LogType
+import org.openqa.selenium.logging.LogEntries
+import org.openqa.selenium.chrome.ChromeOptions
+import org.openqa.selenium.logging.LoggingPreferences
+import java.util.logging.Level
+import java.util.function.Consumer
+
+WDS.sampleResult.sampleStart()
+
+WDS.log.info "Groovy version: ${GroovySystem.version}"
+
+
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(5000)
+
+/*
+try {
+ def user = WDS.browser.findElement(By.id('user'))
+ def password = WDS.browser.findElement(By.id('password'))
+ if (user != null) {
+ def userValue = WDS.vars.get("USER")
+ def passwordValue = WDS.vars.get("PASSWORD")
+ user.sendKeys(userValue)
+ password.sendKeys(passwordValue)
+ Thread.sleep(5000)
+
+ def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+ if (submitButton != null) {
+ submitButton.click()
+ } else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+ }
+ Thread.sleep(5000)
+ }
+} catch (NoSuchElementException e) {
+ WDS.log.info('User element not found.')
+}
+*/
+
+
+def devTools = ((org.openqa.selenium.chrome.ChromeDriver) WDS.browser).getDevTools()
+devTools.createSession()
+devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()))
+devTools.addListener(Network.requestWillBeSent(), { request ->
+ if (request.getRequest().getUrl().contains("https")) {
+ def headers = request.getRequest().getHeaders()
+ def authHeader = headers.get("Authorization")
+ if (authHeader != null && authHeader.startsWith("Bearer ")) {
+ def token = authHeader.replace("Bearer ", "")
+ WDS.log.info("Extracted Token: " + token)
+ WDS.vars.put("BEARER_TOKEN", token)
+ }
+ }
+ else {
+ WDS.log.info("no token: ")
+ }
+} as Consumer)
+Thread.sleep(5000)
+
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def homePageUrl = WDS.vars.get("HOME_PAGE_URL")
+WDS.browser.get(homePageUrl);
+Thread.sleep(5000)
+
+// Check if the sidebar appears
+try {
+ // WebElement sidebar = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("nav-icon-side-bar")))
+ def sidebar = WDS.browser.findElement(By.className('nav-icon-side-bar'))// Adjust selector as needed
+ WDS.log.info("Sidebar is visible.")
+} catch (Exception e) {
+ WDS.log.error("Sidebar is not visible.")
+}
+
+// Check if the search button appears
+try {
+ def searchButton = WDS.browser.findElement(By.className('search-button')) //WebElement searchButton = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("search-button"))) // Adjust selector as needed
+
+ WDS.log.info("Search button is visible.")
+} catch (Exception e) {
+ WDS.log.error("Search button is not visible.")
+}
+
+// report button works
+try {
+ def report = WDS.browser.findElement(By.className('nav-button--report'))
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", report)
+ report.click()
+ WDS.log.info("Report button works.")
+ Thread.sleep(5000)
+ } catch (Exception e){
+ WDS.log.info("Report button does not work.")
+ }
+
+// home button works
+try {
+ def home = WDS.browser.findElement(By.className('nav-button--home'))
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", home)
+ home.click()
+ WDS.log.info("Home button works.")
+ Thread.sleep(5000)
+ } catch (Exception e){
+ WDS.log.info("Home button does not work.")
+ }
+
+
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def homePageUrl = WDS.vars.get("HOME_PAGE_URL")
+WDS.browser.get(homePageUrl);
+Thread.sleep(5000)
+
+// Check if the sidebar appears
+try {
+ // WebElement sidebar = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("nav-icon-side-bar")))
+ def sidebar = WDS.browser.findElement(By.className('nav-icon-side-bar'))// Adjust selector as needed
+ WDS.log.info("Sidebar is visible.")
+} catch (Exception e) {
+ WDS.log.error("Sidebar is not visible.")
+}
+
+// Check if the search button appears
+try {
+ def searchButton = WDS.browser.findElement(By.className('search-button')) //WebElement searchButton = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("search-button"))) // Adjust selector as needed
+
+ WDS.log.info("Search button is visible.")
+} catch (Exception e) {
+ WDS.log.error("Search button is not visible.")
+}
+
+// report button works
+try {
+ def report = WDS.browser.findElement(By.className('nav-button--report'))
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", report)
+ report.click()
+ WDS.log.info("Report button works.")
+ def viewReport = WDS.browser.findElement(By.className('css-xie432'))
+ viewReport.click()
+ Thread.sleep(5000)
+
+ def paymentAndRefundDetails = WDS.browser.findElement(By.className('css-hyxlzm'))
+ paymentAndRefundDetails.click()
+ Thread.sleep(5000)
+
+ viewReport.click()
+
+ } catch (Exception e){
+ WDS.log.info("Report button does not work.")
+ }
+
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/permits?searchColumn=permitNumber&searchString=1&page=1&take=10
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+Thread.sleep(5000)
+
+// edit contact details
+def searchPermitUrl = WDS.vars.get("SEARCH_PERMITE_URL")
+WDS.browser.get(searchPermitUrl);
+Thread.sleep(5000)
+
+def firstPermit = WDS.browser.findElement(By.className("css-mn35dv"))
+firstPermit.click();
+
+
+def firstThreeDot = WDS.browser.findElement(By.className("css-15mydm5"))
+firstThreeDot.click()
+Thread.sleep(2000)
+
+
+def viewReceipt = WDS.browser.findElement(By.cssSelector('[data-option-value="viewReceipt"]'))
+viewReceipt.click()
+Thread.sleep(2000)
+
+firstThreeDot.click()
+Thread.sleep(2000)
+
+def resend = WDS.browser.findElement(By.cssSelector('[data-option-value="resend"]'))
+resend.click()
+Thread.sleep(2000)
+
+def email = WDS.browser.findElement(By.cssSelector('[data-testid="input-email"]'))
+def resendEmail = WDS.vars.get("RESEND_EMAIL")
+email.sendKeys(resendEmail)
+Thread.sleep(2000)
+
+def checkboxes = WDS.browser.findElements(By.className('css-1nx7jar'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+
+def resendButton = WDS.browser.findElement(By.className('css-xie432'))
+resendButton.click()
+Thread.sleep(2000)
+
+WDS.sampleResult.sampleEnd()
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_oversize.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_oversize.jmx
new file mode 100644
index 000000000..d5db385bf
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_oversize.jmx
@@ -0,0 +1,334 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ NEW_APPLICATION_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/create-application/TROS
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+
+
+def loginButton = WDS.browser.findElement(By.id('login-bceid'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(10000)
+def user = WDS.browser.findElement(By.id('user'))
+def password = WDS.browser.findElement(By.id('password'))
+
+def userValue = WDS.vars.get("USER")
+def passwordValue = WDS.vars.get("PASSWORD")
+user.sendKeys(userValue)
+password.sendKeys(passwordValue)
+Thread.sleep(5000)
+
+def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+if (submitButton != null) {
+ submitButton.click()
+} else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+}
+Thread.sleep(10000)
+
+// start a new application
+def newApplicationUrl = WDS.vars.get("NEW_APPLICATION_URL")
+WDS.browser.get(newApplicationUrl);
+Thread.sleep(5000)
+
+def selectedVehicle = WDS.browser.findElement(By.id('application-select-vehicle'))
+selectedVehicle.sendKeys("MCL36")
+Thread.sleep(5000)
+def vin = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.vin"]'))
+vin.sendKeys("MCL36A")
+Thread.sleep(5000)
+def plate = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.plate"]'))
+plate.sendKeys("L4NDO")
+Thread.sleep(5000)
+def make = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.make"]'))
+make.sendKeys("BMW")
+Thread.sleep(5000)
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.sendKeys("2020")
+Thread.sleep(5000)
+def country = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.countryCode'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", country)
+country.click()
+Thread.sleep(5000)
+def ca = WDS.browser.findElement(By.cssSelector('[data-value="CA"]'))
+ca.click()
+Thread.sleep(5000)
+def province = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.provinceCode'))
+province.click()
+Thread.sleep(5000)
+def bc = WDS.browser.findElement(By.cssSelector('[data-value="BC"]'))
+bc.click()
+Thread.sleep(5000)
+def vehicleType = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.vehicleType'))
+vehicleType.click()
+def powerUnit = WDS.browser.findElement(By.cssSelector('[data-value="powerUnit"]'))
+powerUnit.click()
+Thread.sleep(5000)
+
+
+Thread.sleep(5000)
+def vehicleSubType = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.vehicleSubType'))
+vehicleSubType.click()
+def trucks = WDS.browser.findElement(By.cssSelector('[data-value="REGTRCK"]'))
+trucks.click()
+Thread.sleep(5000)
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+
+Thread.sleep(5000)
+def addToCart = WDS.browser.findElement(By.cssSelector('[data-testid="add-to-cart-btn"]'))
+addToCart.click()
+
+Thread.sleep(10000)
+def shoppingCart = WDS.browser.findElement(By.className('shopping-cart-button'))
+shoppingCart.click()
+
+Thread.sleep(5000)
+def payNow = WDS.browser.findElement(By.cssSelector('[data-testid="pay-now-btn"]'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", payNow)
+payNow.click()
+
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_overweight.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_overweight.jmx
new file mode 100644
index 000000000..b5c46d79c
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_term_overweight.jmx
@@ -0,0 +1,332 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 1
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ NEW_APPLICATION_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/create-application/TROW
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+
+
+def loginButton = WDS.browser.findElement(By.id('login-bceid'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+
+Thread.sleep(10000)
+def user = WDS.browser.findElement(By.id('user'))
+def password = WDS.browser.findElement(By.id('password'))
+
+def userValue = WDS.vars.get("USER")
+def passwordValue = WDS.vars.get("PASSWORD")
+user.sendKeys(userValue)
+password.sendKeys(passwordValue)
+Thread.sleep(5000)
+
+def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+if (submitButton != null) {
+ submitButton.click()
+} else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+}
+Thread.sleep(10000)
+
+// start a new application
+def newApplicationUrl = WDS.vars.get("NEW_APPLICATION_URL")
+WDS.browser.get(newApplicationUrl);
+Thread.sleep(5000)
+
+def selectedVehicle = WDS.browser.findElement(By.id('application-select-vehicle'))
+selectedVehicle.sendKeys("123")
+Thread.sleep(5000)
+def vin = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.vin"]'))
+vin.sendKeys("115588")
+Thread.sleep(5000)
+def plate = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.plate"]'))
+plate.sendKeys("1B25F")
+Thread.sleep(5000)
+def make = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.make"]'))
+make.sendKeys("PHIL")
+Thread.sleep(5000)
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.sendKeys("1992")
+Thread.sleep(5000)
+def country = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.countryCode'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", country)
+country.click()
+Thread.sleep(5000)
+def ca = WDS.browser.findElement(By.cssSelector('[data-value="CA"]'))
+ca.click()
+Thread.sleep(5000)
+def province = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.provinceCode'))
+province.click()
+Thread.sleep(5000)
+def bc = WDS.browser.findElement(By.cssSelector('[data-value="BC"]'))
+bc.click()
+Thread.sleep(5000)
+def vehicleType = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.vehicleType'))
+vehicleType.click()
+def trailer = WDS.browser.findElement(By.cssSelector('[data-value="trailer"]'))
+trailer.click()
+
+Thread.sleep(5000)
+def vehicleSubType = WDS.browser.findElement(By.id('mui-component-select-permitData.vehicleDetails.vehicleSubType'))
+vehicleSubType.click()
+def dollies = WDS.browser.findElement(By.cssSelector('[data-value="DOLLIES"]'))
+dollies.click()
+Thread.sleep(5000)
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+
+Thread.sleep(5000)
+def addToCart = WDS.browser.findElement(By.cssSelector('[data-testid="add-to-cart-btn"]'))
+addToCart.click()
+
+Thread.sleep(10000)
+def shoppingCart = WDS.browser.findElement(By.className('shopping-cart-button'))
+shoppingCart.click()
+
+Thread.sleep(5000)
+def payNow = WDS.browser.findElement(By.cssSelector('[data-testid="pay-now-btn"]'))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", payNow)
+payNow.click()
+
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/orbc_load_test_plan_frontend_void_term_oversize.jmx b/tests/loadtests/frontend/orbc_load_test_plan_frontend_void_term_oversize.jmx
new file mode 100644
index 000000000..596253c6d
--- /dev/null
+++ b/tests/loadtests/frontend/orbc_load_test_plan_frontend_void_term_oversize.jmx
@@ -0,0 +1,277 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 200
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+ VOID_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/companies/1/permits/457/void
+ =
+
+
+
+
+
+ false
+ true
+ ${__P(CHROME_DRIVER_PATH)}
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+Thread.sleep(10000)
+
+def searchIcon = WDS.browser.findElement(By.className('search-button'))
+searchIcon.click()
+Thread.sleep(5000)
+
+def company = WDS.browser.findElement(By.cssSelector('[value="companies"]'))
+company.click()
+Thread.sleep(5000)
+
+
+def searchInput = WDS.browser.findElement(By.className('css-1pog434'))
+searchInput.sendKeys('p')
+Thread.sleep(5000)
+
+def searchButton = WDS.browser.findElement(By.className('search-by__search'))
+searchButton.click()
+Thread.sleep(5000)
+
+def button = WDS.browser.findElement(By.xpath("//button[text()='Test Transport Inc.']"))
+button.click()
+Thread.sleep(5000)
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='Active Permits']"))
+tab.click()
+Thread.sleep(5000)
+
+def voidUrl = WDS.vars.get("VOID_URL")
+WDS.browser.get(voidUrl);
+Thread.sleep(5000)
+
+def reason = WDS.browser.findElement(By.cssSelector('[name="reason"]'))
+reason.sendKeys("test to void a appliation")
+Thread.sleep(5000)
+
+def continueBtn = WDS.browser.findElement(By.xpath("//button[text()='Continue']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", continueBtn)
+continueBtn.click()
+Thread.sleep(5000)
+
+def finish = WDS.browser.findElement(By.xpath("//button[text()='Finish']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", finish)
+finish.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/frontend.csv
+
+
+
+
+
diff --git a/tests/loadtests/frontend/results/amend_term_oversize.csv b/tests/loadtests/frontend/results/amend_term_oversize.csv
new file mode 100644
index 000000000..cb9f7dccf
--- /dev/null
+++ b/tests/loadtests/frontend/results/amend_term_oversize.csv
@@ -0,0 +1,7 @@
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
+1731007898927,27140,login,200,OK,Thread Group 1-1,text,true,,19992,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/home,0,0,0
+1731007926113,90377,amendApplications,200,OK,Thread Group 1-1,text,true,,43812,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/search-results?searchEntity=permits&searchByFilter=permitNumber&searchString=P2-00010506,0,0,0
+1731008129597,27172,login,200,OK,Thread Group 1-1,text,true,,19992,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/home,0,0,0
+1731008156806,91452,amendApplications,200,OK,Thread Group 1-1,text,true,,41490,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/search-results?searchEntity=permits&searchByFilter=permitNumber&searchString=P2-00010514,0,0,0
+1731008607583,26278,login,200,OK,Thread Group 1-1,text,true,,19992,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/home,0,0,0
+1731008633889,91847,amendApplications,200,OK,Thread Group 1-1,text,true,,43820,0,1,1,https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca/idir/search-results?searchEntity=permits&searchByFilter=permitNumber&searchString=P2-00010511,0,0,0
diff --git a/tests/loadtests/frontend/results/frontend.csv b/tests/loadtests/frontend/results/frontend.csv
new file mode 100644
index 000000000..d9ef28eda
--- /dev/null
+++ b/tests/loadtests/frontend/results/frontend.csv
@@ -0,0 +1 @@
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
diff --git a/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_bceid.jmx b/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_bceid.jmx
new file mode 100644
index 000000000..8093387ed
--- /dev/null
+++ b/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_bceid.jmx
@@ -0,0 +1,549 @@
+
+
+
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 2
+ ^((?!google|facebook|youtube|pinterest|twimg|doubleclick).)*$
+ 60000
+ 120000
+
+
+
+
+
+ Accept-Language
+ en-us,en;q=0.5
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+ Keep-Alive
+ 115
+
+
+ User-Agent
+ Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
+
+
+ Accept-Encoding
+ gzip,deflate
+
+
+ Accept-Charset
+ ISO-8859-1,utf-8;q=0.7,*;q=0.7
+
+
+ X-BlazeMeter-Session
+ ${__P(blazemeter.session_id)}
+
+
+
+
+
+
+ true
+ false
+
+
+
+ true
+ false
+ false
+
+
+
+
+
+ USERS
+ 200
+ =
+
+
+ VEHICLES_API_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca
+ =
+
+
+ FRONTEND_API_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ BEARER_TOKEN_BCEID
+
+ =
+
+
+ USER_GUID
+
+ =
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+
+ true
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN_BCEID}
+
+
+ Accept
+ */*
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+ true
+
+
+
+ false
+ {
+ "permitId": null,
+ "originalPermitId": null,
+ "applicationNumber": null,
+ "permitType": "TROS",
+ "permitStatus": "ISSUED",
+ "permitApprovalSource": "PPC",
+ "permitApplicationOrigin": "ONLINE",
+ "permitData": {
+ "startDate": "2023-06-05T19:12:22Z",
+ "expiryDate": "2023-07-04T19:12:22Z",
+ "permitDuration": 30,
+ "feeSummary": "30",
+ "commodities": [
+ {
+ "description": "General Permit Conditions",
+ "condition": "CVSE-1000",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1251",
+ "checked": true
+ },
+ {
+ "description": "Permit Scope and Limitation",
+ "condition": "CVSE-1070",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1261",
+ "checked": true
+ },
+ {
+ "description": "Log Permit Conditions",
+ "condition": "CVSE-1000L",
+ "conditionLink": "https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1250",
+ "checked": true
+ }
+ ],
+ "contactDetails": {
+ "firstName": "Lewis",
+ "lastName": "Hamilton",
+ "phone1": "(778) 952-1234",
+ "email": "lewis@f1.com",
+ "additionalEmail": "lewis2@f1.com",
+ "phone1Extension": "1",
+ "phone2": null,
+ "phone2Extension": null,
+ "fax": null
+ },
+ "mailingAddress": {
+ "addressLine1": "123 Short Street",
+ "addressLine2": null,
+ "city": "Victoria",
+ "provinceCode": "BC",
+ "countryCode": "CA",
+ "postalCode": "V8X2V5"
+ },
+ "vehicleDetails": {
+ "vin": "781452",
+ "plate": "PRJZZP",
+ "make": "GMC",
+ "year": 2001,
+ "countryCode": "CA",
+ "provinceCode": "BC",
+ "vehicleType": "powerUnit",
+ "vehicleSubType": "LOGGING",
+ "saveVehicle": true
+ }
+ },
+ "comment": "This application was amended because of so-and-so reason."
+}
+ =
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/applications
+ POST
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ ${USERS}
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+
+ true
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN_BCEID}
+
+
+ Accept
+ application/json
+
+
+ Content-Type
+ application/json
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/applications/393
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+ true
+
+
+
+ false
+ {
+ "permitType": "TROS",
+ "permitData": {},
+ "comment": "This application was amended because of so-and-so reason."
+}
+ =
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/applications/393
+ PUT
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ ${USERS}
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+
+ true
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN_BCEID}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/vehicles/powerUnits
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/vehicles/trailers
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/vehicles.csv
+
+
+
+
+
diff --git a/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_idir.jmx b/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_idir.jmx
new file mode 100644
index 000000000..fccfc85fa
--- /dev/null
+++ b/tests/loadtests/vehicles/orbc_load_test_plan_vehicles_idir.jmx
@@ -0,0 +1,893 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+ true
+ false
+ false
+
+
+
+
+ true
+ false
+
+
+
+
+
+ Accept-Language
+ en-us,en;q=0.5
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+ Keep-Alive
+ 115
+
+
+ User-Agent
+ Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
+
+
+ Accept-Encoding
+ gzip,deflate
+
+
+ Accept-Charset
+ ISO-8859-1,utf-8;q=0.7,*;q=0.7
+
+
+ X-BlazeMeter-Session
+ ${__P(blazemeter.session_id)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 2
+ ^((?!google|facebook|youtube|pinterest|twimg|doubleclick).)*$
+ 60000
+ 120000
+
+
+
+
+
+ USERS
+ 200
+ =
+
+
+ VEHICLES_API_URL
+ https://onroutebc-test-vehicles.apps.silver.devops.gov.bc.ca
+ =
+
+
+ FRONTEND_API_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ RESULTS_DIR
+ ~/results
+ =
+
+
+ BEARER_TOKEN_IDIR
+
+ =
+
+
+ USER_GUID
+
+ =
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+ 0
+ false
+
+
+
+ ${__P(Delay,10000)}
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN_IDIR}
+
+
+ Accept
+ */*
+
+
+
+
+
+ true
+ ${numUsers}
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/permits?searchColumn=permitNumber&searchString=1&page=1&take=10
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ ${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ ${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ application/json
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users?userRole=PPCCLERK&permitIssuerPPCUser=true
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ ${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ ${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users/claims?companyId=74
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ ${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ ${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users/user-context
+ POST
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ ${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ ${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/users/${USER_GUID}
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ Host
+ ${VEHICLES_API_URL}
+
+
+ Connection
+ keep-alive
+
+
+ sec-ch-ua
+ "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"
+
+
+ Accept
+ application/json
+
+
+ sec-ch-ua-mobile
+ ?0
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ User-Agent
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
+
+
+ sec-ch-ua-platform
+ "Windows"
+
+
+ Origin
+ ${FRONTEND_API_URL}
+
+
+ Sec-Fetch-Site
+ same-site
+
+
+ Sec-Fetch-Mode
+ cors
+
+
+ Sec-Fetch-Dest
+ empty
+
+
+ Referer
+ ${FRONTEND_API_URL}/
+
+
+ Accept-Encoding
+ gzip, deflate, br
+
+
+ Accept-Language
+ en-US,en;q=0.9
+
+
+ If-None-Match
+ W/"17b2-OQs45yY+9rxT8oaE549bg+d9IqA"
+
+
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ ${USERS}
+ ${__P(rampup,300)}
+ 1365261073000
+ 1365261073000
+ true
+ ${__P(duration,3000)}
+
+ true
+
+
+
+
+
+ Authorization
+ Bearer ${BEARER_TOKEN_IDIR}
+
+
+ Accept
+ */*
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/permits?searchColumn=permitNumber&searchString=1&page=1&take=10
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/permits/14/document
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+ false
+
+ =
+ true
+
+
+
+
+
+
+
+ ${VEHICLES_API_URL}/companies/104/permits/14/receipt
+ GET
+ true
+ false
+ true
+ false
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ ${RESULTS_DIR}/vehicles.csv
+
+
+
+
+
diff --git a/tests/package-lock.json b/tests/package-lock.json
new file mode 100644
index 000000000..ade2ecc39
--- /dev/null
+++ b/tests/package-lock.json
@@ -0,0 +1,1937 @@
+{
+ "name": "tests",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "cypress": "^13.15.2"
+ },
+ "devDependencies": {
+ "cypress-xpath": "^2.0.1"
+ }
+ },
+ "node_modules/@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/@cypress/request": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz",
+ "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~4.0.0",
+ "http-signature": "~1.4.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "6.13.0",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^5.0.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "22.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+ "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "undici-types": "~6.19.8"
+ }
+ },
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz",
+ "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==",
+ "license": "MIT"
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "license": "MIT"
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz",
+ "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
+ "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cypress": {
+ "version": "13.15.2",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.2.tgz",
+ "integrity": "sha512-ARbnUorjcCM3XiPwgHKuqsyr5W9Qn+pIIBPaoilnoBkLdSC2oLQjV1BUpnmc7KR+b7Avah3Ly2RMFnfxr96E/A==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cypress/request": "^3.0.6",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.7.1",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "ci-info": "^4.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.5.3",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.3",
+ "tree-kill": "1.2.2",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/cypress-xpath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cypress-xpath/-/cypress-xpath-2.0.1.tgz",
+ "integrity": "sha512-qMagjvinBppNJdMAkucWESP9aP4rDTs7c96m0vwMuZTVx3NqP2E3z/hkoRf8Ea9soL8yTvUuuyF1cg/Sb1Yhbg==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "license": "MIT"
+ },
+ "node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "license": "MIT",
+ "dependencies": {
+ "async": "^3.2.0"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
+ "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.18.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "license": "MIT"
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "license": "MIT"
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "license": "ISC"
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "license": "MIT",
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT"
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "license": "MIT"
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "license": "MIT"
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "license": "MIT"
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "license": "MIT",
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "license": "MIT"
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "license": "ISC"
+ },
+ "node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "license": "MIT",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "license": "MIT"
+ },
+ "node_modules/tldts": {
+ "version": "6.1.60",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.60.tgz",
+ "integrity": "sha512-TYVHm7G9NCnhgqOsFalbX6MG1Po5F4efF+tLfoeiOGQq48Oqgwcgz8upY2R1BHWa4aDrj28RYx0dkYJ63qCFMg==",
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.60"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.60",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.60.tgz",
+ "integrity": "sha512-XHjoxak8SFQnHnmYHb3PcnW5TZ+9ErLZemZei3azuIRhQLw4IExsVbL3VZJdHcLeNaXq6NqawgpDPpjBOg4B5g==",
+ "license": "MIT"
+ },
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "license": "Unlicense"
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ }
+ }
+}
diff --git a/tests/package.json b/tests/package.json
new file mode 100644
index 000000000..b6d6736b2
--- /dev/null
+++ b/tests/package.json
@@ -0,0 +1,8 @@
+{
+ "dependencies": {
+ "cypress": "^13.15.2"
+ },
+ "devDependencies": {
+ "cypress-xpath": "^2.0.1"
+ }
+}
diff --git a/tests/regression/orbc_load_test_plan_frontend_amend_term_oversize.jmx b/tests/regression/orbc_load_test_plan_frontend_amend_term_oversize.jmx
new file mode 100644
index 000000000..be42e0d70
--- /dev/null
+++ b/tests/regression/orbc_load_test_plan_frontend_amend_term_oversize.jmx
@@ -0,0 +1,420 @@
+
+
+
+
+
+ false
+ false
+
+
+
+ Duration
+ 3180
+ =
+
+
+
+
+
+
+
+
+
+ NUM_THREADS
+ 200
+ =
+
+
+ FRONTEND_URL
+ https://onroutebc-test-frontend.apps.silver.devops.gov.bc.ca
+ =
+
+
+ USER
+
+ =
+
+
+ PASSWORD
+
+ =
+
+
+
+
+
+ false
+ true
+ C:\Users\brwang\Software\chromedriver-win64\chromedriver-win64-129\chromedriver.exe
+ false
+ false
+ true
+
+
+ SYSTEM
+
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ true
+
+ 8080
+ localhost
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ false
+
+
+ true
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v129.network.Network;
+import java.util.Optional;
+import org.openqa.selenium.logging.LogType
+import org.openqa.selenium.logging.LogEntries
+import org.openqa.selenium.chrome.ChromeOptions
+import org.openqa.selenium.logging.LoggingPreferences
+import java.util.logging.Level
+import java.util.function.Consumer
+
+WDS.sampleResult.sampleStart()
+
+WDS.log.info "Groovy version: ${GroovySystem.version}"
+
+
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-idir button")
+ Thread.sleep(5000)
+ /*
+ try {
+ def user = WDS.browser.findElement(By.id('user'))
+ def password = WDS.browser.findElement(By.id('password'))
+ if (user != null) {
+ def userValue = WDS.vars.get("USER")
+ def passwordValue = WDS.vars.get("PASSWORD")
+ user.sendKeys(userValue)
+ password.sendKeys(passwordValue)
+ Thread.sleep(5000)
+
+ def submitButton = WDS.browser.findElement(By.name('btnSubmit'))
+ if (submitButton != null) {
+ submitButton.click()
+ } else {
+ WDS.log.info('Submit button with name="btnSubmit" not found')
+ }
+ Thread.sleep(5000)
+ }
+ } catch (NoSuchElementException e) {
+ WDS.log.info('User element not found.')
+ }
+ */
+} else {
+ WDS.log.info("Button with id 'login-idir' not found")
+}
+
+Thread.sleep(5000)
+
+def devTools = ((org.openqa.selenium.chrome.ChromeDriver) WDS.browser).getDevTools()
+devTools.createSession()
+devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()))
+devTools.addListener(Network.requestWillBeSent(), { request ->
+ if (request.getRequest().getUrl().contains("https")) {
+ def headers = request.getRequest().getHeaders()
+ def authHeader = headers.get("Authorization")
+ if (authHeader != null && authHeader.startsWith("Bearer ")) {
+ def token = authHeader.replace("Bearer ", "")
+ WDS.log.info("Extracted Token: " + token)
+ WDS.vars.put("BEARER_TOKEN", token)
+ }
+ }
+ else {
+ WDS.log.info("bruce test no token: ")
+ }
+} as Consumer)
+Thread.sleep(5000)
+
+WDS.browser.get(frontendUrl)
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+ import org.openqa.selenium.By
+import org.openqa.selenium.support.ui.ExpectedConditions
+import org.openqa.selenium.support.ui.WebDriverWait
+import org.openqa.selenium.WebElement
+
+WDS.sampleResult.sampleStart()
+def frontendUrl = WDS.vars.get("FRONTEND_URL")
+WDS.browser.get(frontendUrl);
+Thread.sleep(5000)
+/*
+def loginButton = WDS.browser.findElement(By.id('login-idir'))
+if (loginButton != null) {
+ loginButton.click()
+ WDS.log.info("Clicked on the login-bceid button")
+} else {
+ WDS.log.info("Button with id 'login-bceid' not found")
+}
+Thread.sleep(5000)
+
+
+def searchIcon = WDS.browser.findElement(By.className('search-button'))
+searchIcon.click()
+Thread.sleep(5000)
+
+def company = WDS.browser.findElement(By.cssSelector('[value="companies"]'))
+company.click()
+Thread.sleep(5000)
+
+
+def searchInput = WDS.browser.findElement(By.className('css-1pog434'))
+searchInput.sendKeys('t')
+Thread.sleep(5000)
+
+def searchButton = WDS.browser.findElement(By.className('search-by__search'))
+searchButton.click()
+Thread.sleep(5000)
+
+def button = WDS.browser.findElement(By.xpath("//button[text()='Test Transport Inc.']"))
+button.click()
+Thread.sleep(5000)
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='Active Permits']"))
+tab.click()
+Thread.sleep(5000)
+
+def firstDotButton = WDS.browser.findElement(By.className('css-15mydm5'))
+firstDotButton.click()
+Thread.sleep(5000)
+def amendButton = WDS.browser.findElement(By.xpath("//li[text()='Amend']"))
+amendButton.click()
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.clear()
+year.sendKeys("2008")
+Thread.sleep(5000)
+
+def amendment = WDS.browser.findElement(By.cssSelector('[name="comment"]'))
+amendment.clear()
+amendment.sendKeys("Make year updated")
+Thread.sleep(5000)
+
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+Thread.sleep(5000)
+
+def continueBtn = WDS.browser.findElement(By.xpath("//button[text()='Continue']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", continueBtn)
+continueBtn.click()
+Thread.sleep(5000)
+
+def finish = WDS.browser.findElement(By.xpath("//button[text()='Finish']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", finish)
+finish.click()
+Thread.sleep(5000)
+*/
+
+def searchIcon = WDS.browser.findElement(By.className('search-button'))
+searchIcon.click()
+Thread.sleep(5000)
+
+def company = WDS.browser.findElement(By.cssSelector('[value="companies"]'))
+company.click()
+Thread.sleep(5000)
+
+
+def searchInput = WDS.browser.findElement(By.className('css-1pog434'))
+searchInput.sendKeys('t')
+Thread.sleep(5000)
+
+def searchButton = WDS.browser.findElement(By.className('search-by__search'))
+searchButton.click()
+Thread.sleep(5000)
+
+def button = WDS.browser.findElement(By.xpath("//button[text()='Test Transport Inc.']"))
+button.click()
+Thread.sleep(5000)
+def tab = WDS.browser.findElement(By.xpath("//div[@class='tab__label' and text()='Active Permits']"))
+tab.click()
+Thread.sleep(5000)
+
+def firstDotButton = WDS.browser.findElement(By.className('css-15mydm5'))
+firstDotButton.click()
+Thread.sleep(5000)
+def amendButton = WDS.browser.findElement(By.xpath("//li[text()='Amend']"))
+amendButton.click()
+Thread.sleep(5000)
+
+def year = WDS.browser.findElement(By.cssSelector('[name="permitData.vehicleDetails.year"]'))
+year.clear()
+year.sendKeys("2008")
+Thread.sleep(5000)
+
+def amendment = WDS.browser.findElement(By.cssSelector('[name="comment"]'))
+amendment.clear()
+amendment.sendKeys("Make year updated")
+Thread.sleep(5000)
+
+
+def continueButton = WDS.browser.findElement(By.cssSelector('[data-testid="continue-application-button"]'))
+Thread.sleep(5000)
+
+if (continueButton != null) {
+ continueButton.click()
+ WDS.log.info('Clicked the button with data-testid="continue-application-button"')
+} else {
+ WDS.log.info('Button with data-testid="continue-application-button" not found')
+}
+
+Thread.sleep(10000)
+def checkboxes = WDS.browser.findElements(By.cssSelector('input[type="checkbox"]'))
+checkboxes.each { checkbox ->
+ WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", checkbox)
+ if (!checkbox.isSelected()) {
+ checkbox.click()
+ }
+}
+Thread.sleep(5000)
+
+def continueBtn = WDS.browser.findElement(By.xpath("//button[text()='Continue']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", continueBtn)
+continueBtn.click()
+Thread.sleep(5000)
+
+def finish = WDS.browser.findElement(By.xpath("//button[text()='Finish']"))
+WDS.browser.executeScript("window.scrollTo(0, arguments[0].getBoundingClientRect().top + window.pageYOffset - 100);", finish)
+finish.click()
+Thread.sleep(5000)
+
+WDS.sampleResult.sampleEnd()
+
+
+ groovy
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ true
+ 0
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+