Skip to content

Commit 4cc23fc

Browse files
authored
FIO-9344 fixed require validation for day component (#192)
1 parent 310d86d commit 4cc23fc

File tree

2 files changed

+72
-5
lines changed

2 files changed

+72
-5
lines changed

src/process/validation/rules/__tests__/validateRequiredDay.test.ts

+45
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,49 @@ describe('validateRequiredDay', function () {
5252
expect(result).to.be.instanceOf(FieldError);
5353
expect(result?.errorKeyOrMessage).to.equal('requiredYearField');
5454
});
55+
56+
it('Validating a day component that requires month and year will not return a FieldError if year and month are given', async function () {
57+
const component = {
58+
...simpleDayField,
59+
fields: {
60+
year: { required: true },
61+
month: { required: true },
62+
day: { hide: true }
63+
},
64+
};
65+
const data = { component: '07/2024' };
66+
const context = generateProcessorContext(component, data);
67+
const result = await validateRequiredDay(context);
68+
expect(result).to.equal(null);
69+
});
70+
71+
it('Validating a day component that requires day and year will not return a FieldError if year and day are given', async function () {
72+
const component = {
73+
...simpleDayField,
74+
fields: {
75+
year: { required: true },
76+
day: { required: true },
77+
month: { hide: true }
78+
},
79+
};
80+
const data = { component: '24/2024' };
81+
const context = generateProcessorContext(component, data);
82+
const result = await validateRequiredDay(context);
83+
expect(result).to.equal(null);
84+
});
85+
86+
it('Validating a day component that requires day and month will not return a FieldError if day and month are given', async function () {
87+
const component = {
88+
...simpleDayField,
89+
fields: {
90+
month: { required: true },
91+
day: { required: true },
92+
year: { hide: true }
93+
},
94+
};
95+
const data = { component: '07/24' };
96+
const context = generateProcessorContext(component, data);
97+
const result = await validateRequiredDay(context);
98+
expect(result).to.equal(null);
99+
});
55100
});

src/process/validation/rules/validateRequiredDay.ts

+27-5
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,33 @@ export const validateRequiredDaySync: RuleFnSync = (context: ValidationContext)
3939
'validate:validateRequiredDay',
4040
);
4141
}
42-
const [DAY, MONTH, YEAR] = component.dayFirst ? [0, 1, 2] : [1, 0, 2];
43-
const values = value.split('/').map((x) => parseInt(x, 10)),
44-
day = values[DAY],
45-
month = values[MONTH],
46-
year = values[YEAR];
42+
let [DAY, MONTH, YEAR] = component.dayFirst ? [0, 1, 2] : [1, 0, 2];
43+
const values = value.split('/').map((x) => parseInt(x, 10));
44+
let day = values[DAY];
45+
let month = values[MONTH];
46+
let year = values[YEAR];
47+
48+
if (values.length !== 3) {
49+
if (component.fields.day.hide) {
50+
MONTH = MONTH === 0 ? 0 : MONTH - 1;
51+
YEAR = YEAR - 1;
52+
day = 0;
53+
month = values[MONTH];
54+
year = values[YEAR];
55+
}
56+
if (component.fields.month.hide) {
57+
DAY = DAY === 0 ? 0 : DAY - 1;
58+
YEAR = YEAR - 1;
59+
day = component.fields.day.hide && day === 0 ? 0 : values[DAY];
60+
month = 0;
61+
year = values[YEAR];
62+
}
63+
if (component.fields.year.hide) {
64+
day = component.fields.day.hide && day === 0 ? 0 : values[DAY];
65+
month = component.fields.month.hide && month === 0 ? 0 : values[MONTH];
66+
year = 0;
67+
}
68+
}
4769

4870
if (!day && component.fields?.day?.required) {
4971
return new FieldError('requiredDayField', context, 'day');

0 commit comments

Comments
 (0)