chore: jest test spy on klona/full to prevent regression (#27983)

## Description
Added jest test that tracks the number of times klona/full is called
during first update tree code flow. This is to prevent regressing on the
number of clone operations performed during each evaluation cycle
>

#### Media
> A video or a GIF is preferred. when using Loom, don’t embed because it
looks like it’s a GIF. instead, just link to the video
>
>
#### Type of change
- Chore (housekeeping or task changes that don't impact user perception)
>
## Testing
>
#### How Has This Been Tested?
- [x] Manual
>
>
#### Test Plan
> Add Testsmith test cases links that relate to this PR
>
>
#### 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
- [ ] 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
- [ ] 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/Guidelines-for-test-plans#speedbreakers-)
have been covered
- [ ] Test plan covers all impacted features and [areas of
interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#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
This commit is contained in:
arunvjn 2023-10-16 12:09:32 +05:30 committed by GitHub
parent 094e859973
commit f1595dbedc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,15 @@ import { ValidationTypes } from "constants/WidgetValidation";
import WidgetFactory from "WidgetProvider/factory";
import { generateDataTreeWidget } from "entities/DataTree/dataTreeWidget";
import { sortObjectWithArray } from "../../../utils/treeUtils";
import klona from "klona";
const klonaFullSpy = jest.fn();
jest.mock("klona/full", () => ({
klona: (arg: any) => {
klonaFullSpy(arg);
return klona.klona(arg);
},
}));
const WIDGET_CONFIG_MAP: WidgetTypeConfigMap = {
CONTAINER_WIDGET: {
@ -334,6 +343,9 @@ const initialdependencies = {
};
describe("DataTreeEvaluator", () => {
afterEach(() => {
jest.clearAllMocks();
});
metaMock.mockImplementation((type) => {
return WIDGET_CONFIG_MAP[type].metaProperties;
});
@ -548,8 +560,14 @@ describe("DataTreeEvaluator", () => {
};
const evaluator = new DataTreeEvaluator(WIDGET_CONFIG_MAP);
evaluator.setupFirstTree(unEvalTree, configTree);
evaluator.evalAndValidateFirstTree();
it("Checks the number of clone operations in first tree flow", () => {
evaluator.setupFirstTree(unEvalTree, configTree);
evaluator.evalAndValidateFirstTree();
// Hard check to not regress on the number of clone operations. Try to improve this number.
expect(klonaFullSpy).toBeCalledTimes(41);
});
it("Evaluates a binding in first run", () => {
const evaluation = evaluator.evalTree;
const dependencies = evaluator.dependencies;
@ -1021,4 +1039,38 @@ describe("DataTreeEvaluator", () => {
expect(dataTree).toHaveProperty("TextX.text", 123);
expect(dataTree).toHaveProperty("Text1.text", "Label");
});
it("Checks the number of clone operations performed in update tree flow", () => {
const { configEntity, unEvalEntity } = generateDataTreeWidget(
{
...BASE_WIDGET_CONFIG,
...BASE_WIDGET,
widgetName: "TextY",
text: "{{Text1.text = 123}}",
dynamicBindingPathList: [{ key: "text" }],
type: "TEXT_WIDGET",
},
{},
new Set(),
);
const updatedUnEvalTree = {
...unEvalTree,
TextY: unEvalEntity,
};
const updatedConfigTree = {
...configTree,
TextY: configEntity,
};
const { evalOrder, nonDynamicFieldValidationOrder, unEvalUpdates } =
evaluator.setupUpdateTree(updatedUnEvalTree, updatedConfigTree);
expect(evalOrder).toContain("TextY.text");
expect(evalOrder.length).toBe(2);
evaluator.evalAndValidateSubTree(
evalOrder,
nonDynamicFieldValidationOrder,
updatedConfigTree,
unEvalUpdates,
);
// Hard check to not regress on the number of clone operations. Try to improve this number.
expect(klonaFullSpy).toBeCalledTimes(7);
});
});