PromucFlow_constructor/app/client/src/reducers/entityReducers/metaReducer/metaReducer.test.ts
Rahul Barwal 5d213dddc6
chore: Split derived.test.js to separate files. (#38162)
## Description
This PR started with this goal:
- Deleted the unreadable `derived.test.js` (4668 lines) file and split
each suite to its file.
- Moved all `derived.js` related specs in widget folder to __tests__
folder

Later we found that `testRegex` in `jest.config` will treat anything
inside `__tests__` as runnable, so we modify this rule and are moving to
a consistent naming for our unit tests(any file ending with `.test.` or
`.spec.`

This refactor aims to improve maintainability and ensure that the table
widget's derived properties are thoroughly tested.


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags=""

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
b3168bb1a6d3070a910972d1d9a78d61a3aaee91 yet
> <hr>Tue, 17 Dec 2024 10:20:54 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
	- Expanded properties for table widget configuration.
- Introduced sample data constants for column schemas and processed
table data.

- **Bug Fixes**
- Improved validation tests for editable cells and row selection
functions.

- **Tests**
- Added comprehensive test suites for various table widget
functionalities, including filtering, sorting, and row selection.
	- Introduced tests for handling HTML content within table columns.
	- Added tests for new functions related to row updates and indices.
- Enhanced test coverage for existing utility functions and table
properties.

- **Chores**
- Updated import paths to reflect a new directory structure across
various test files.
- Modified Jest configuration for improved readability and regex
adjustments.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-12-17 18:16:27 +05:30

129 lines
3.3 KiB
TypeScript

import metaReducer, { initialState } from "./index";
import { updateMetaState } from "actions/metaActions";
import type { ReduxAction } from "ee/constants/ReduxActionConstants";
import { ReduxActionTypes } from "ee/constants/ReduxActionConstants";
let currentMetaState = initialState;
const inputWidget = {
widgetId: "incwlne",
propertyName: "selectedValues",
propertyValue: ["GREEN", "BLUE", "YELLOW"],
};
const noAction = (): ReduxAction<unknown> => {
return {
type: "NO_ACTION",
payload: {},
};
};
test("should return the initial state", () => {
expect(metaReducer(undefined, noAction())).toEqual(currentMetaState);
});
test("Add a widget meta values", () => {
currentMetaState = initialState;
expect(
metaReducer(currentMetaState, {
type: ReduxActionTypes.SET_META_PROP,
payload: {
widgetId: inputWidget.widgetId,
propertyName: inputWidget.propertyName,
propertyValue: inputWidget.propertyValue,
},
}),
).toEqual({
incwlne: {
selectedValues: ["GREEN", "BLUE", "YELLOW"],
},
});
});
test("Update widget meta state using evalMetaUpdates", () => {
const evalMetaUpdates = [
{ widgetId: "incwlne", metaPropertyPath: ["text"], value: "test123" },
{
widgetId: "incwlne",
metaPropertyPath: ["selectedValues"],
value: ["YELLOW"],
},
];
currentMetaState = metaReducer(
currentMetaState,
updateMetaState(evalMetaUpdates),
);
expect(currentMetaState).toEqual({
incwlne: {
text: "test123",
selectedValues: ["YELLOW"],
},
});
});
describe("Reset widget meta action", () => {
test("Reset widget with only widgetId", () => {
currentMetaState = metaReducer(currentMetaState, {
type: ReduxActionTypes.RESET_WIDGET_META,
payload: {
widgetId: inputWidget.widgetId,
},
});
expect(currentMetaState).toEqual({
incwlne: {},
});
});
currentMetaState = initialState;
expect(
metaReducer(currentMetaState, {
type: ReduxActionTypes.SET_META_PROP,
payload: {
widgetId: inputWidget.widgetId,
propertyName: inputWidget.propertyName,
propertyValue: inputWidget.propertyValue,
},
}),
).toEqual({
incwlne: {
selectedValues: ["GREEN", "BLUE", "YELLOW"],
},
});
test("Reset widget with evaluated values", () => {
expect(
metaReducer(currentMetaState, {
type: ReduxActionTypes.RESET_WIDGET_META,
payload: {
widgetId: inputWidget.widgetId,
evaluatedWidget: {
defaultSelectedValues: ["GREEN"],
selectedValues: ["GREEN", "BLUE", "YELLOW"],
widgetId: inputWidget.widgetId,
propertyOverrideDependency: {
selectedValues: {
DEFAULT: "defaultSelectedValues",
META: "meta.selectedValues",
},
},
},
evaluatedWidgetConfig: {
widgetId: inputWidget.widgetId,
propertyOverrideDependency: {
selectedValues: {
DEFAULT: "defaultSelectedValues",
META: "meta.selectedValues",
},
},
},
},
}),
).toEqual({
incwlne: {
selectedValues: ["GREEN"],
},
});
});
});