PromucFlow_constructor/app/client/cypress/support/index.js
Anand Srinivasan 9af64f7310
test: handle login success & errors properly (#22524)
Fixes #22537

- [x] check for test failures in CE & EE
- [ ] check for merge conflicts in EE (index.js)

## Description

cy command : `LoginFromAPI`

We were calling the login API as a XHR call and navigated to
`/applications` manually in cases where login has actually failed.

Login success & errors are now handled properly.
- Now it will behave like submitting a form.
(https://docs.cypress.io/api/commands/visit#Submit-a-form)
- Performs navigation to `/applications` automatically on login success.
- Performs navigation to `/login?error=true` automatically on login
failure.
- Added origin as a header.


## Media
Before: (navigates to /application even when login fails)
https://www.loom.com/share/086ef8c743ab460194b785a4d22e87cf

Now: (stops when login fails)
https://www.loom.com/share/cc78be2ee2944d0ab9f094f8fd709539


## Type of change
- Chore (housekeeping or task changes that don't impact user perception)


## How Has This Been Tested?
- Cypress


## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
2023-04-19 15:20:54 +05:30

134 lines
3.8 KiB
JavaScript

// ***********************************************************
// This example support/index.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
// ***********************************************************
/// <reference types="Cypress" />
import "cypress-real-events/support";
import "cypress-wait-until";
import "cypress-xpath";
import * as MESSAGES from "../../../client/src/ce/constants/messages.ts";
import "./ApiCommands";
// Import commands.js using ES2015 syntax:
import "./commands";
import { initLocalstorage } from "./commands";
import "./dataSourceCommands";
import "./gitSync";
import { initLocalstorageRegistry } from "./Objects/Registry";
import "./WorkspaceCommands";
import "./queryCommands";
import "./widgetCommands";
import "./themeCommands";
import "./AdminSettingsCommands";
/// <reference types="cypress-xpath" />
Cypress.on("uncaught:exception", () => {
// returning false here prevents Cypress from
// failing the test
return false;
});
Cypress.on("fail", (error) => {
throw error; // throw error to have test still fail
});
Cypress.env("MESSAGES", MESSAGES);
before(function () {
//console.warn = () => {}; //to remove all warnings in cypress console
initLocalstorage();
initLocalstorageRegistry();
cy.startServerAndRoutes();
// Clear indexedDB
cy.window().then((window) => {
window.indexedDB.deleteDatabase("Appsmith");
});
cy.visit("/setup/welcome");
cy.wait("@getMe");
cy.wait(2000);
cy.url().then((url) => {
if (url.indexOf("setup/welcome") > -1) {
cy.createSuperUser();
cy.LogOut();
cy.SignupFromAPI(
Cypress.env("TESTUSERNAME1"),
Cypress.env("TESTPASSWORD1"),
);
cy.LogOut();
cy.SignupFromAPI(
Cypress.env("TESTUSERNAME2"),
Cypress.env("TESTPASSWORD2"),
);
cy.LogOut();
cy.SignupFromAPI(
Cypress.env("TESTUSERNAME3"),
Cypress.env("TESTPASSWORD3"),
);
cy.LogOut();
cy.SignupFromAPI(
Cypress.env("TESTUSERNAME4"),
Cypress.env("TESTPASSWORD4"),
);
cy.LogOut();
}
});
});
before(function () {
//console.warn = () => {};
Cypress.Cookies.preserveOnce("SESSION", "remember_token");
const username = Cypress.env("USERNAME");
const password = Cypress.env("PASSWORD");
cy.LoginFromAPI(username, password);
cy.wait("@getMe");
cy.wait(3000);
cy.get(".t--applications-container .createnew")
.should("be.visible")
.should("be.enabled");
cy.generateUUID().then((id) => {
cy.CreateAppInFirstListedWorkspace(id);
localStorage.setItem("AppName", id);
});
cy.fixture("example").then(function (data) {
this.data = data;
});
});
beforeEach(function () {
//cy.window().then((win) => (win.onbeforeunload = undefined));
if (!navigator.userAgent.includes("Cypress")) {
window.addEventListener("beforeunload", this.beforeunloadFunction);
}
initLocalstorage();
Cypress.Cookies.preserveOnce("SESSION", "remember_token");
cy.startServerAndRoutes();
//-- Delete local storage data of entity explorer
cy.DeleteEntityStateLocalStorage();
cy.intercept("api/v1/admin/env", (req) => {
req.headers["origin"] = Cypress.config("baseUrl");
});
});
after(function () {
//-- Deleting the application by Api---//
cy.DeleteAppByApi();
//-- LogOut Application---//
cy.LogOut();
// Commenting until Upgrade Appsmith cases are fixed
// const tedUrl = "http://localhost:5001/v1/parent/cmd";
// cy.log("Start the appsmith container");
// cy.StartContainer(tedUrl, "appsmith"); // start the old container
});