diff --git a/e2e/tests/regression/authorization/authenticate.js b/e2e/tests/regression/authorization/authenticate.js
new file mode 100644
index 0000000..2b331f4
--- /dev/null
+++ b/e2e/tests/regression/authorization/authenticate.js
@@ -0,0 +1,21 @@
+///
+describe("When authenticating", () => {
+ it("logs in and logs out superuser without error", () => {
+ cy.visit("/login");
+
+ cy.get("input[name=username]").clear().type(Cypress.env("adminusername"));
+
+ // {enter} causes the form to submit
+ cy.get("input[name=password]")
+ .clear()
+ .type(`${Cypress.env("adminpassword")}{enter}`);
+
+ //LOGOUT
+ cy.get("[data-cy=navicon]").click();
+ cy.contains("AyaNova SuperUser");
+ cy.get("[data-cy=logout]").click({force:true});
+ cy.url().should("include", "/login");
+
+ //-----------------------------------------------------
+ });
+});
diff --git a/e2e/tests/smoke/smoke.js b/e2e/tests/smoke/smoke.js
new file mode 100644
index 0000000..0950d6e
--- /dev/null
+++ b/e2e/tests/smoke/smoke.js
@@ -0,0 +1,445 @@
+// Basic smoke test, visit every form to ensure they load
+///
+describe("SMOKE", () => {
+ it.skip("Every form opens without error", () => {
+ cy.visit("/login");
+
+ cy.get("input[name=username]").clear().type(Cypress.env("adminusername"));
+
+ // {enter} causes the form to submit
+ cy.get("input[name=password]")
+ .clear()
+ .type(`${Cypress.env("adminpassword")}{enter}`);
+
+ //################# HOME
+ cy.visit("/home-dashboard");
+ cy.url({ timeout: 10000 }).should("include", "/home-dashboard");
+
+ cy.visit("/home-search");
+ cy.url({ timeout: 10000 }).should("include", "/home-search");
+ cy.get("[data-cy=phrase]");
+
+ cy.visit("/home-schedule");
+ cy.url({ timeout: 10000 }).should("include", "/home-schedule");
+ cy.get("[data-cy=btnTodayHomeSchedule]");
+
+ cy.visit("/home-memos");
+ cy.url({ timeout: 10000 }).should("include", "/home-memos");
+ cy.get("[data-cy=memosTable]");
+
+ cy.visit("/home-memos/0"); //no reliable single id would work for existing
+ cy.url({ timeout: 10000 }).should("include", "/home-memos/0");
+ cy.get("[data-cy=pickListSelectedUserId]");
+
+ cy.visit("/home-reminders");
+ cy.url({ timeout: 10000 }).should("include", "/home-reminders");
+ cy.get("[data-cy=remindersTable]");
+
+ cy.visit("/home-reminders/0");
+ cy.url({ timeout: 10000 }).should("include", "/home-reminders/0");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/home-reviews");
+ cy.url({ timeout: 10000 }).should("include", "/home-reviews");
+ cy.get("[data-cy=reviewsTable]");
+
+ cy.visit("/home-reviews/8/1");
+ cy.url({ timeout: 10000 }).should("include", "/home-reviews/8/1");
+ cy.get("[data-cy=clickThru]");
+
+ cy.visit("/home-user-settings");
+ cy.url({ timeout: 10000 }).should("include", "/home-user-settings");
+ cy.get("[data-cy=emailAddress]");
+
+ cy.visit("/home-password");
+ cy.url({ timeout: 10000 }).should("include", "/home-password");
+ cy.get("[data-cy=loginName]");
+
+ cy.visit("/home-security");
+ cy.url({ timeout: 10000 }).should("include", "/home-security");
+ cy.get("[data-cy=tfa]");
+
+ //can't do this without reset code etc, just logs out
+ // cy.visit("/home-reset");
+ // cy.url({ timeout: 10000 }).should("include", "/home-reset");
+ // cy.get("[data-cy=loginName]");
+
+ cy.visit("/home-notify-subscriptions");
+ cy.url({ timeout: 10000 }).should("include", "/home-notify-subscriptions");
+ cy.get("[data-cy=subsTable]");
+
+ cy.visit("/home-notify-subscriptions/0");
+ cy.url({ timeout: 10000 }).should(
+ "include",
+ "/home-notify-subscriptions/0"
+ );
+ cy.get("[data-cy=eventType]");
+
+ cy.visit("/home-notifications");
+ cy.url({ timeout: 10000 }).should("include", "/home-notifications");
+ cy.get("[data-cy=notifications]");
+
+ cy.visit("/home-notify-direct");
+ cy.url({ timeout: 10000 }).should("include", "/home-notify-direct");
+ cy.get("[data-cy=pickListSelectedUserId]");
+
+ //################# CUSTOMERS
+ cy.visit("/cust-customers");
+ cy.url({ timeout: 10000 }).should("include", "/cust-customers");
+ cy.get("[data-cy=customersTable]");
+
+ cy.visit("/cust-customers/1");
+ cy.url({ timeout: 10000 }).should("include", "/cust-customers/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/cust-customer-notes/1");
+ cy.url({ timeout: 10000 }).should("include", "/cust-customer-notes/1");
+ cy.get("[data-cy=clickThru]");
+
+ cy.visit("/cust-customer-note/0");
+ cy.url({ timeout: 10000 }).should("include", "/cust-customer-note/0");
+ cy.get("[data-cy=notes]");
+
+ cy.visit("/cust-head-offices");
+ cy.url({ timeout: 10000 }).should("include", "/cust-head-offices");
+ cy.get("[data-cy=headofficesTable]");
+
+ cy.visit("/cust-head-offices/1");
+ cy.url({ timeout: 10000 }).should("include", "cust-head-offices/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/cust-users");
+ cy.url({ timeout: 10000 }).should("include", "/cust-users");
+ cy.get("[data-cy=custUsersTable]");
+
+ // cy.visit("/cust-users/0");
+ // cy.url({ timeout: 10000 }).should("include", "/cust-users/0");
+ // cy.get("[data-cy=customerId]");
+
+ //################# SERVICE
+ cy.visit("/svc-schedule");
+ cy.url({ timeout: 10000 }).should("include", "/svc-schedule");
+ cy.get("[data-cy=btnTodaySvcSchedule]");
+
+ cy.visit("/svc-workorders");
+ cy.url({ timeout: 10000 }).should("include", "/svc-workorders");
+ cy.get("[data-cy=workordersTable]");
+
+ cy.visit("/svc-workorders/1");
+ cy.url({ timeout: 10000 }).should("include", "svc-workorders/1");
+ cy.get("[data-cy=customerId]");
+
+ cy.visit("/svc-quotes");
+ cy.url({ timeout: 10000 }).should("include", "/svc-quotes");
+ cy.get("[data-cy=quotesTable]");
+
+ cy.visit("/svc-pms");
+ cy.url({ timeout: 10000 }).should("include", "/svc-pms");
+ cy.get("[data-cy=pmsTable]");
+
+ cy.visit("/svc-units");
+ cy.url({ timeout: 10000 }).should("include", "/svc-units");
+ cy.get("[data-cy=unitsTable]");
+
+ cy.visit("/svc-units/1");
+ cy.url({ timeout: 10000 }).should("include", "/svc-units/1");
+ cy.get("[data-cy=serial]");
+
+ cy.visit("/svc-unit-models");
+ cy.url({ timeout: 10000 }).should("include", "/svc-unit-models");
+ cy.get("[data-cy=unitmodelsTable]");
+
+ cy.visit("/svc-unit-models/1");
+ cy.url({ timeout: 10000 }).should("include", "svc-unit-models/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/svc-loaners");
+ cy.url({ timeout: 10000 }).should("include", "/svc-loaners");
+ cy.get("[data-cy=loanUnitsTable]");
+
+ cy.visit("/svc-loaners/1");
+ cy.url({ timeout: 10000 }).should("include", "/svc-loaners/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/svc-contracts");
+ cy.url({ timeout: 10000 }).should("include", "/svc-contracts");
+ cy.get("[data-cy=contractsTable]");
+
+ cy.visit("/svc-contracts/1");
+ cy.url({ timeout: 10000 }).should("include", "/svc-contracts/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/svc-projects");
+ cy.url({ timeout: 10000 }).should("include", "/svc-projects");
+ cy.get("[data-cy=projectsTable]");
+
+ cy.visit("/svc-projects/1");
+ cy.url({ timeout: 10000 }).should("include", "/svc-projects/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/svc-csr");
+ cy.url({ timeout: 10000 }).should("include", "/svc-csr");
+ cy.get("[data-cy=csrTable]");
+
+ cy.visit("/svc-csr/1");
+ cy.url({ timeout: 10000 }).should("include", "/svc-csr/1");
+ cy.get("[data-cy=name]");
+
+ //################# INVENTORY
+ cy.visit("/inv-parts");
+ cy.url({ timeout: 10000 }).should("include", "/inv-parts");
+ cy.get("[data-cy=partsTable]");
+
+ cy.visit("/inv-parts/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-parts/1");
+ cy.get("[data-cy=partNumber]");
+
+ cy.visit("/inv-purchase-orders");
+ cy.url({ timeout: 10000 }).should("include", "/inv-purchase-orders");
+ cy.get("[data-cy=purchaseordersTable]");
+
+ cy.visit("/inv-purchase-orders/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-purchase-orders/1");
+ cy.get("[data-cy=serial]");
+
+ cy.visit("/inv-part-inventory");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-inventory");
+ cy.get("[data-cy=partInventoryTable]");
+
+ cy.visit("/inv-part-inventory-transactions");
+ cy.url({ timeout: 10000 }).should(
+ "include",
+ "/inv-part-inventory-transactions"
+ );
+ cy.get("[data-cy=partInventoryTransactionsTable]");
+
+ cy.visit("/inv-part-assemblies");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-assemblies");
+ cy.get("[data-cy=partassemblysTable]");
+
+ cy.visit("/inv-part-assemblies/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-assemblies/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/inv-part-serials/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-serials/1");
+ cy.get("[data-cy=selectedPartId]");
+
+ cy.visit("/inv-part-stock-levels/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-stock-levels/1");
+ cy.get("[data-cy=selectedPartId]");
+
+ cy.visit("/inv-part-warehouses");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-warehouses");
+ cy.get("[data-cy=partwarehousesTable]");
+
+ cy.visit("/inv-part-warehouses/1");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-warehouses/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/inv-part-adjustment");
+ cy.url({ timeout: 10000 }).should("include", "/inv-part-adjustment");
+ cy.get("[data-cy=description]");
+
+ //################# VENDORS
+ cy.visit("/vendors");
+ cy.url({ timeout: 10000 }).should("include", "/vendors");
+ cy.get("[data-cy=vendorsTable]");
+
+ cy.visit("/vendors/1");
+ cy.url({ timeout: 10000 }).should("include", "vendors/1");
+ cy.get("[data-cy=name]");
+
+ //################# ACCOUNTING
+ // cy.visit("/acc-service-banks");
+ // cy.url({ timeout: 10000 }).should("include", "/acc-service-banks");
+ // cy.get("[data-cy=serviceBanksTable]");
+
+ // cy.visit("/acc-service-banks/8/1");
+ // cy.url({ timeout: 10000 }).should("include", "/acc-service-banks/8/1");
+ // cy.get("[data-cy=clickThru]");
+
+ // cy.visit("/acc-service-banks/0/8/1");
+ // cy.url({ timeout: 10000 }).should("include", "/acc-service-banks/0/8/1");
+ // cy.get("[data-cy=name]");
+
+ cy.visit("/acc-service-rates");
+ cy.url({ timeout: 10000 }).should("include", "/acc-service-rates");
+ cy.get("[data-cy=serviceRatesTable]");
+
+ cy.visit("/acc-service-rates/1");
+ cy.url({ timeout: 10000 }).should("include", "/acc-service-rates/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/acc-travel-rates");
+ cy.url({ timeout: 10000 }).should("include", "/acc-travel-rates");
+ cy.get("[data-cy=travelRatesTable]");
+
+ cy.visit("/acc-travel-rates/1");
+ cy.url({ timeout: 10000 }).should("include", "/acc-travel-rates/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/acc-tax-codes");
+ cy.url({ timeout: 10000 }).should("include", "/acc-tax-codes");
+ cy.get("[data-cy=taxCodesTable]");
+
+ cy.visit("/acc-tax-codes/1");
+ cy.url({ timeout: 10000 }).should("include", "/acc-tax-codes/1");
+ cy.get("[data-cy=name]");
+
+ //################# ADMIN
+ cy.visit("/adm-global-settings");
+ cy.url({ timeout: 10000 }).should("include", "/adm-global-settings");
+ cy.get("[data-cy=filterCaseSensitive]");
+
+ cy.visit("/adm-global-select-templates");
+ cy.url({ timeout: 10000 }).should(
+ "include",
+ "/adm-global-select-templates"
+ );
+ cy.get("[data-cy=selectTemplate]");
+
+ cy.visit("/adm-global-logo");
+ cy.url({ timeout: 10000 }).should("include", "/adm-global-logo");
+ cy.get("[data-cy=uploadSmall]");
+
+ cy.visit("/adm-global-seeds");
+ cy.url({ timeout: 10000 }).should("include", "/adm-global-seeds");
+ cy.get("[data-cy=purchaseOrderNextSerial]");
+
+ cy.visit("/adm-license");
+ cy.url({ timeout: 10000 }).should("include", "/adm-license");
+ cy.get("[data-cy=licenseForm]");
+
+ cy.visit("/adm-users");
+ cy.url({ timeout: 10000 }).should("include", "/adm-users");
+ cy.get("[data-cy=usersTable]");
+
+ cy.visit("/adm-users/1");
+ cy.url({ timeout: 10000 }).should("include", "/adm-users/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/adm-translations");
+ cy.url({ timeout: 10000 }).should("include", "/adm-translations");
+ cy.get("[data-cy=transTable]");
+
+ cy.visit("/adm-translations/1");
+ cy.url({ timeout: 10000 }).should("include", "/adm-translations/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/adm-report-templates");
+ cy.url({ timeout: 10000 }).should("include", "/adm-report-templates");
+ cy.get("[data-cy=reportTemplatesTable]");
+
+ cy.visit("/report-edit/1");
+ cy.url({ timeout: 10000 }).should("include", "/report-edit/1");
+ cy.get("[data-cy=viewChange]");
+
+ cy.visit("/adm-attachments");
+ cy.url({ timeout: 10000 }).should("include", "/adm-attachments");
+ cy.get("[data-cy=attachTable]");
+
+ cy.visit("/adm-history");
+ cy.url({ timeout: 10000 }).should("include", "/adm-history");
+ cy.get("[data-cy=historyTable]");
+
+ cy.visit("/adm-import");
+ cy.url({ timeout: 10000 }).should("include", "/adm-import");
+ cy.get("[data-cy=ayaType]");
+
+ //################# OPERATIONS
+ cy.visit("/ops-backup");
+ cy.url({ timeout: 10000 }).should("include", "/ops-backup");
+ cy.get("[data-cy=backupTable]");
+
+ cy.visit("/ops-server-state");
+ cy.url({ timeout: 10000 }).should("include", "/ops-server-state");
+ cy.get("[data-cy=serverStateOpen]");
+
+ cy.visit("/ops-jobs");
+ cy.url({ timeout: 10000 }).should("include", "/ops-jobs");
+ cy.get("[data-cy=jobsTable]");
+
+ cy.visit("/ops-log");
+ cy.url({ timeout: 10000 }).should("include", "/ops-log");
+ cy.get("[data-cy=selectedLog]");
+
+ cy.visit("/ops-metrics");
+ cy.url({ timeout: 10000 }).should("include", "/ops-metrics");
+ cy.get("[data-cy=selectedTimePeriod]");
+
+ cy.visit("/ops-profile");
+ cy.url({ timeout: 10000 }).should("include", "/ops-profile");
+ cy.get("[data-cy=profileCard]");
+
+ cy.visit("/ops-notification-settings");
+ cy.url({ timeout: 10000 }).should("include", "/ops-notification-settings");
+ cy.get("[data-cy=smtpDeliveryActive]");
+
+ cy.visit("/ops-notify-queue");
+ cy.url({ timeout: 10000 }).should("include", "/ops-notify-queue");
+ cy.get("[data-cy=notifyQueueTable]");
+
+ cy.visit("/ops-view-configuration");
+ cy.url({ timeout: 10000 }).should("include", "/ops-view-configuration");
+ cy.get("[data-cy=configCard]");
+
+ //################# MISC
+ cy.visit("/about");
+ cy.url({ timeout: 10000 }).should("include", "/about");
+ cy.get("[data-cy=versionCard]");
+
+ cy.visit("/applog");
+ cy.url({ timeout: 10000 }).should("include", "/applog");
+ cy.get("[data-cy=logText]");
+
+ cy.visit("/customize/Customer");
+ cy.url({ timeout: 10000 }).should("include", "/customize/Customer");
+ cy.get("[data-cy=customizeForm]");
+
+ cy.visit("/data-list-column-view/CustomerDataList");
+ cy.url({ timeout: 10000 }).should(
+ "include",
+ "/data-list-column-view/CustomerDataList"
+ );
+ cy.get("[data-cy=dlcForm]");
+
+ cy.visit("/home-reviews/2/1");
+ cy.url({ timeout: 10000 }).should("include", "/home-reviews/2/1");
+ cy.get("[data-cy=reviewsTable]");
+
+ cy.visit("/history/3/1");
+ cy.url({ timeout: 10000 }).should("include", "/history/3/1");
+ cy.get("[data-cy=timeLine]");
+
+ cy.visit("/open/8/1");
+ cy.url({ timeout: 10000 }).should("include", "/cust-customers/1");
+ cy.get("[data-cy=name]");
+
+ cy.visit("/NOTFOUND");
+ cy.contains("404");
+
+ //LOGOUT MANAGER USER
+ cy.get("[data-cy=navicon]").click();
+ cy.get("[data-cy=logout]").click();
+ cy.url({ timeout: 10000 }).should("include", "/login");
+
+ //CUSTOMER PAGES
+ cy.get("input[name=username]").clear().type("Customer");
+ cy.get("input[name=password]").clear().type("Customer{enter}");
+
+ cy.url({ timeout: 10000 }).should("include", "/customer-csr");
+ cy.get("[data-cy=csrTable]");
+
+ cy.visit("/customer-workorders");
+ cy.url({ timeout: 10000 }).should("include", "/customer-workorders");
+ cy.get("[data-cy=underconstruction]");
+
+ //LOGOUT
+ cy.get("[data-cy=navicon]").click();
+ cy.get("[data-cy=logout]").click();
+ cy.url({ timeout: 10000 }).should("include", "/login");
+
+ //-----------------------------------------------------
+ });
+});