PromucFlow_constructor/app/client/src/widgets/MultiSelectWidgetV2/widget/derived.test.js
Tolulope Adetula 9e66a774dd
feat: Multiselect defaultValue Validation Check for ServerSide Filtering(On/Off) (#15491)
* feat: Multiselect default Check

* Fix: failing tests

* fix: review issues

* fix: build errors

* fix: review issues

* fix: unused vars

* fix: failing tests
2022-08-03 14:17:07 +01:00

310 lines
9.6 KiB
JavaScript

import _ from "lodash";
import derivedProperty from "./derived";
describe("Derived property - MultiSelect Widget", () => {
describe("#getIsValid", () => {
it("return true when isRequired false and selectedOptionValues is empty string", () => {
const isValid = derivedProperty.getIsValid(
{
isRequired: false,
selectedOptionValues: [""],
},
null,
_,
);
expect(isValid).toBeTruthy();
});
it("return true when isRequired true and selectedOptionValues is not empty", () => {
const isValid = derivedProperty.getIsValid(
{
selectedOptionValues: ["GREEN"],
isRequired: true,
},
null,
_,
);
expect(isValid).toBeTruthy();
});
it("return false when isRequired true and selectedOptionValues is empty", () => {
const isValid = derivedProperty.getIsValid(
{
selectedOptionValues: [],
isRequired: true,
},
null,
_,
);
expect(isValid).toBeFalsy();
});
});
describe("#getSelectedOptionValues", () => {
it("selectedOptionValues should have a value if defaultValue(String) is in option", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
selectedOptions: ["GREEN"],
serverSideFiltering: false,
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual(["GREEN"]);
});
it("selectedOptionValues should have a value if defaultValue(Object) is in option", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: false,
selectedOptions: [{ label: "Green", value: "GREEN" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual(["GREEN"]);
});
it("selectedOptionValues should have only values present in the options; defaultValue(Object), serverSideFiltering(false)", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: false,
selectedOptions: [
{ label: "Yellow", value: "YELLOW" },
{ label: "Green", value: "GREEN" },
],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual(["GREEN"]);
});
it("selectedOptionValues should have only values present in the options; defaultValue(Object), serverSideFiltering(false)", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: false,
selectedOptions: [{ label: "Yellow", value: "YELLOW" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual([]);
});
it("selectedOptionValues should have only values present in the options; defaultValue(String), serverSideFiltering(false)", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: false,
selectedOptions: ["YELLOW"],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual([]);
});
it("selectedOptionValues should have only values present in the options; defaultValue(Object), serverSideFiltering(true)", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: true,
selectedOptions: [{ label: "Yellow", value: "YELLOW" }],
isDirty: false,
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual([]);
});
it("selectedOptionValues should have only values present in the options; defaultValue(String), serverSideFiltering(true)", () => {
const selectedOptionValues = derivedProperty.getSelectedOptionValues(
{
serverSideFiltering: true,
selectedOptions: ["YELLOW"],
isDirty: false,
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionValues).toStrictEqual([]);
});
});
describe("#getSelectedOptionLabels", () => {
it("selectedOptionLabels should have a value if defaultValue(String) is in option", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: ["GREEN"],
serverSideFiltering: false,
selectedOptions: ["GREEN"],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual(["Green"]);
});
it("selectedOptionLabels should have a value if defaultValue(Object) is in option", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: ["GREEN"],
serverSideFiltering: false,
selectedOptions: [{ label: "Green", value: "GREEN" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual(["Green"]);
});
it("selectedOptionLabels should have it's value from the options and not from defaultValue(Object)", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: ["GREEN"],
serverSideFiltering: false,
selectedOptions: [{ label: "Greenish", value: "GREEN" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual(["Green"]);
});
it("selectedOptionLabels should not have a value if defaultValue(Object) is not in option and serverSideFiltering is false", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: [],
serverSideFiltering: false,
selectedOptions: [{ label: "Yellow", value: "Yellow" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual([]);
});
it("selectedOptionLabels should have a value if defaultValue(object) is not in option and serverSideFiltering is true", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: [],
serverSideFiltering: false,
selectedOptions: ["YELLOW"],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual([]);
});
it("selectedOptionLabels should have it's value from the options and not from defaultValue(Object) and serverSideFiltering is true", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: ["GREEN"],
serverSideFiltering: true,
selectedOptions: [{ label: "Greenish", value: "GREEN" }],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual(["Green"]);
});
it("selectedOptionLabels should have it's value if defaultValue(string) and serverSideFiltering is true", () => {
const selectedOptionLabels = derivedProperty.getSelectedOptionLabels(
{
selectedOptionValues: [],
serverSideFiltering: true,
selectedOptions: ["YELLOW"],
options: [
{ label: "Blue", value: "BLUE" },
{ label: "Green", value: "GREEN" },
{ label: "Red", value: "RED" },
],
},
null,
_,
);
expect(selectedOptionLabels).toStrictEqual([]);
});
});
});