fix: is Empty and is Not empty operators (#17317)

This commit is contained in:
Hariom Balhara authored and GitHub committed 2024-10-25 04:46:46 +00:00
1 parent 1c8cf62582
commit 4c6f242345
2 files changed
+54 -1

No files matched your search

@@ -15,6 +15,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: ["John"],
valueSrc: ["value"],
},
},
},
@@ -48,6 +49,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [],
valueSrc: ["value"],
},
},
},
@@ -84,6 +86,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [],
valueSrc: ["value"],
},
},
},
@@ -110,6 +113,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [[]],
valueSrc: ["value"],
},
},
},
@@ -136,6 +140,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [undefined, undefined],
valueSrc: ["value"],
},
},
},
@@ -162,6 +167,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [null],
valueSrc: ["value"],
},
},
},
@@ -183,6 +189,7 @@ describe("queryValueValidationSchema", () => {
field: "name",
operator: "equal",
value: [""],
valueSrc: ["value"],
},
},
},
@@ -209,4 +216,42 @@ describe("queryValueValidationSchema", () => {
const result2 = queryValueSaveValidationSchema.safeParse(undefined);
expect(result2.success).toBe(true);
});
it("should allow fields with no value if valueSrc is empty", () => {
const result = queryValueSaveValidationSchema.safeParse({
id: "7",
type: "group",
children1: {
rule1: {
type: "rule",
properties: {
field: "name",
operator: "is_empty",
value: [],
valueSrc: [],
},
},
},
});
expect(result.success).toBe(true);
});
it("should not allow fields with no value if valueSrc is not empty", () => {
const result = queryValueSaveValidationSchema.safeParse({
id: "7",
type: "group",
children1: {
rule1: {
type: "rule",
properties: {
field: "name",
operator: "is_empty",
value: [],
valueSrc: ["value"],
},
},
},
});
expect(result.success).toBe(false);
});
});
+9 -1
View File
@@ -64,6 +64,7 @@ export enum RouteActionType {
export const routeActionTypeSchema = z.nativeEnum(RouteActionType);
/**
* Stricter schema for validating before saving to DB
* It doesn't decide what will be saved, it is just to validate the data before saving
*/
export const queryValueSaveValidationSchema = queryValueSchema
.omit({ children1: true })
@@ -78,6 +79,7 @@ export const queryValueSaveValidationSchema = queryValueSchema
field: z.any().optional(),
operator: z.any().optional(),
value: z.any().optional(),
valueSrc: z.any().optional(),
})
.optional(),
})
@@ -94,7 +96,13 @@ export const queryValueSaveValidationSchema = queryValueSchema
if (!isObject(rule.properties)) return;
const value = rule.properties.value || [];
if (!(value instanceof Array)) {
const valueSrc = rule.properties.valueSrc;
if (!(value instanceof Array) || !(valueSrc instanceof Array)) {
return;
}
if (!valueSrc.length) {
// If valueSrc is empty, value could be empty for operators like is_empty, is_not_empty
return;
}