PromucFlow_constructor/app/client/cypress/support/Pages/DebuggerHelper.ts
ChandanBalajiBP 8810b0a8e2
fix: Open state of bottom bar (#23077)
## Description
>**Improved tab handling in DebuggerTabs.tsx and JSResponseView.tsx**
Added conditions to prevent unnecessary rendering when selecting
RESPONSE_TAB or HEADER_TAB, improving performance.

>**Responsive ActionExecutionResizerHeight**
Adjusted the height calculation to be 30% of the window height, making
it adaptable to different screen sizes.

>**Applied tab handling improvements to DataSourceEditor/Debugger**
Enhanced the performance of the DataSourceEditor/Debugger component by
implementing similar tab handling conditions.

#### PR fixes following issue(s)
Fixes #22810 

#### Type of change
- Bug fix (non-breaking change which fixes an issue)
>
>
>
## Testing
>
#### How Has This Been Tested?
> Please describe the tests that you ran to verify your changes. Also
list any relevant details for your test configuration.
> Delete anything that is not relevant
- [x] Manual
- [ ] Jest
- [x] Cypress
>
>
#### Test Plan
> Add Testsmith test cases links that relate to this PR

>[testplan](https://docs.google.com/spreadsheets/d/1Pj7iUNsmbDwjBARa1aI5vwieXvyuQd_4-hd9L0gaBpA/edit?usp=sharing)
>
#### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
>
>
>
## Checklist:
#### Dev activity
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [x] 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
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag


#### QA activity:
- [ ] [Speedbreak
features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change)
have been covered
- [ ] Test plan covers all impacted features and [areas of
interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest)
- [ ] Test plan has been peer reviewed by project stakeholders and other
QA members
- [ ] Manually tested functionality on DP
- [ ] We had an implementation alignment call with stakeholders post QA
Round 2
- [ ] Cypress test cases have been added and approved by SDET/manual QA
- [ ] Added `Test Plan Approved` label after Cypress tests were reviewed
- [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-05-12 11:17:26 +05:30

221 lines
5.9 KiB
TypeScript

import { ObjectsRegistry } from "../Objects/Registry";
export enum PageType {
Canvas,
API,
Query,
JsEditor,
DataSources,
}
export class DebuggerHelper {
private agHelper = ObjectsRegistry.AggregateHelper;
private commonLocators = ObjectsRegistry.CommonLocators;
// ActionExecutionResizerHeight -> in repo
private readonly bottomPaneHeight = 330;
// from design system
private readonly TAB_MIN_HEIGHT = 36;
public readonly locators = {
_debuggerIcon: ".t--debugger",
_debuggerToggle: "[data-cy=t--debugger-toggle]",
_debuggerDownStreamErrMsg: "[data-cy=t--debugger-downStreamErrorMsg]",
_tabsContainer: ".t--debugger-tabs-container",
_closeButton: ".t--close-debugger",
_logMessage: ".t--debugger-log-message",
_logEntityLink: ".t--debugger-log-entity-link",
_logState: ".t--debugger-log-state",
_errorCount: ".t--debugger-count",
_clearLogs: ".t--debugger-clear-logs",
_logMessageOccurence: ".t--debugger-log-message-occurence",
_debuggerMessage: "[data-cy=t--debugger-log-message]",
_contextMenuIcon: ".t--debugger-contextual-error-menu ",
_contextMenuItem: ".t--debugger-contextual-menuitem",
_debuggerLabel: "span.debugger-label",
_bottomPaneContainer: {
[PageType.API]: ".t--api-bottom-pane-container",
[PageType.Query]: ".t--query-bottom-pane-container",
[PageType.JsEditor]: ".t--js-editor-bottom-pane-container",
[PageType.DataSources]: ".t--datasource-bottom-pane-container",
},
_debuggerList: ".debugger-list",
_debuggerFilter: ".debugger-search",
_debuggerSelectedTab: ".react-tabs__tab--selected",
};
ClickDebuggerIcon(
index?: number,
force?: boolean,
waitTimeInterval?: number,
) {
this.agHelper.GetNClick(
this.locators._debuggerIcon,
index,
force,
waitTimeInterval,
);
}
ClickDebuggerToggle(expand = true, index = 0) {
cy.get(this.locators._debuggerToggle)
.eq(index)
.invoke("attr", "data-isOpen")
.then((arrow) => {
if (expand && arrow == "false")
cy.get(this.locators._debuggerToggle)
.eq(index)
.trigger("click", { multiple: true })
.wait(1000);
else if (!expand && arrow == "true")
cy.get(this.locators._debuggerToggle)
.eq(index)
.trigger("click", { multiple: true })
.wait(1000);
else this.agHelper.Sleep(500);
});
}
ClickResponseTab() {
this.agHelper.GetNClick(this.commonLocators._responseTab);
}
CloseBottomBar() {
this.agHelper.GetNClick(this.locators._closeButton);
}
AssertOpen(pageType: PageType) {
switch (pageType) {
case PageType.Canvas:
this.agHelper.AssertElementExist(this.locators._tabsContainer);
break;
case PageType.API:
case PageType.JsEditor:
this.agHelper.AssertHeight(
this.locators._bottomPaneContainer[pageType],
this.bottomPaneHeight,
);
break;
case PageType.Query:
case PageType.DataSources:
this.agHelper.AssertHeight(
this.locators._bottomPaneContainer[pageType],
this.bottomPaneHeight - 1, // -1 to offset error
);
break;
}
}
AssertClosed() {
this.agHelper.AssertElementAbsence(this.locators._tabsContainer);
}
AssertSelectedTab(text: string) {
this.agHelper.GetNAssertContains(this.locators._debuggerSelectedTab, text);
}
DoesConsoleLogExist(
text: string,
exists = true,
index?: number,
timeout?: number,
) {
this.agHelper.GetNAssertContains(
this.locators._logMessage,
text,
exists ? "exist" : "not.exist",
index,
timeout,
);
}
filter(text: string) {
this.agHelper.RemoveCharsNType(this.locators._debuggerFilter, -1, text);
}
LogStateContains(text: string, index?: number) {
this.agHelper.GetNAssertContains(
this.locators._logState,
text,
"exist",
index,
);
}
AssertErrorCount(count: number) {
this.agHelper.GetNAssertContains(this.locators._errorCount, count);
}
ClearLogs() {
this.agHelper.GetNClick(this.locators._clearLogs);
}
Assert_Consecutive_Console_Log_Count(count: number) {
count > 0
? this.agHelper.GetNAssertContains(
this.locators._logMessageOccurence,
count,
)
: this.agHelper.AssertElementAbsence(this.locators._logMessageOccurence);
}
AssertVisibleErrorMessagesCount(count: number) {
if (count > 0) {
this.agHelper.AssertElementVisible(this.locators._debuggerMessage);
this.agHelper.AssertElementLength(this.locators._debuggerMessage, count);
} else {
this.agHelper.AssertElementAbsence(this.locators._debuggerMessage);
}
}
ClickErrorMessage(index?: number) {
this.agHelper.GetNClick(this.locators._debuggerMessage, index);
}
ClicklogEntityLink(index?: number) {
this.agHelper.GetNClick(this.locators._logEntityLink, index);
}
AssertContextMenuItemVisible() {
this.agHelper.AssertElementVisible(this.locators._contextMenuItem);
}
AssertDebugError(
label: string,
message: string,
shouldOpenDebugger = true,
shouldToggleDebugger = true,
) {
if (shouldOpenDebugger) {
this.ClickDebuggerIcon();
}
this.agHelper.GetNClick(this.commonLocators._errorTab, 0, true, 0);
if (shouldToggleDebugger) {
this.ClickDebuggerToggle();
}
this.agHelper
.GetText(this.locators._debuggerLabel, "text", 0)
.then(($text) => {
expect($text).to.eq(label);
});
if (message) {
this.agHelper
.GetText(this.locators._debuggerDownStreamErrMsg, "text", 0)
.then(($text) => {
expect($text).to.contains(message);
});
}
}
DebuggerListDoesnotContain(text: string) {
this.agHelper.AssertContains(
text,
"not.exist",
this.locators._debuggerList,
);
}
}