Skip to content

Commit

Permalink
Sette maks periode til ett år frem i tid (#2285)
Browse files Browse the repository at this point in the history
  • Loading branch information
frodehansen2 authored Oct 7, 2024
1 parent 27228b6 commit 88a3e54
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 31 deletions.
3 changes: 2 additions & 1 deletion apps/pleiepenger-sykt-barn/src/app/i18n/appMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,8 @@ const nb = {
'Du kan ikke søke om pleiepenger for en periode som er lenger enn 3 år tilbake i tid.',
'validation.periodeTil.dateIsNotWeekday':
'Periodens til-dato må være en ukedag, det kan ikke være en lørdag eller søndag. Skriv inn eller velg dato fra kalenderen.',
'validation.periodeTil.dateIsAfterMax': 'Du kan kun søke pleiepenger for opptil ett år av gangen.',
'validation.periodeTil.dateIsAfterMax':
'Du kan kun søke pleiepenger for opptil ett år av gangen, og ett år frem i tid.',
'validation.periodeTil.toDateIsBeforeFromDate':
'Til-datoen kan ikke være før fra-datoen. Skriv inn eller velg dato fra kalenderen.',
'validation.skalOppholdeSegIUtlandetIPerioden.yesOrNoIsUnanswered':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import FerieuttakListAndDialog from '@navikt/sif-common-forms-ds/src/forms/ferie
import { Ferieuttak } from '@navikt/sif-common-forms-ds/src/forms/ferieuttak/types';
import { UtenlandsoppholdUtvidet } from '@navikt/sif-common-forms-ds/src/forms/utenlandsopphold/types';
import UtenlandsoppholdListAndDialog from '@navikt/sif-common-forms-ds/src/forms/utenlandsopphold/UtenlandsoppholdListAndDialog';
import { getDate1YearAgo, getDate1YearFromNow, getDate3YearsAgo, DateRange } from '@navikt/sif-common-utils';
import { getDate1YearAgo, getDate1YearFromNow, DateRange } from '@navikt/sif-common-utils';
import dayjs from 'dayjs';
import minMax from 'dayjs/plugin/minMax';
import { useFormikContext } from 'formik';
Expand All @@ -22,6 +22,8 @@ import { StepID } from '../../types/StepID';
import { SøknadFormField, SøknadFormValues } from '../../types/søknad-form-values/SøknadFormValues';
import { søkerKunHelgedager } from '../../utils/formValuesUtils';
import {
getPeriodeMaksDato,
getPeriodeMinDato,
validateFerieuttakIPerioden,
validateFradato,
validateTildato,
Expand All @@ -42,8 +44,8 @@ const TidsromStep = ({ onValidSubmit }: StepCommonProps) => {
: undefined;

const periodeFra = datepickerUtils.getDateFromDateString(values.periodeFra);

const periodeTil = datepickerUtils.getDateFromDateString(values.periodeTil);

const periode: DateRange = {
from: periodeFra || getDate1YearAgo(),
to: periodeTil || getDate1YearFromNow(),
Expand Down Expand Up @@ -84,16 +86,8 @@ const TidsromStep = ({ onValidSubmit }: StepCommonProps) => {
</p>
</ExpandableInfo>
}
minDate={
barnetSøknadenGjelder?.fødselsdato
? dayjs
.max(
dayjs(getDate3YearsAgo()).endOf('day'),
dayjs(barnetSøknadenGjelder?.fødselsdato).endOf('day'),
)!
.toDate()
: getDate3YearsAgo()
}
minDate={getPeriodeMinDato(barnetSøknadenGjelder?.fødselsdato)}
maxDate={getPeriodeMaksDato(values.periodeFra)}
fromInputProps={{
label: text('steg.tidsrom.hvilketTidsrom.fom'),
validate: validateFraDatoField,
Expand All @@ -103,7 +97,7 @@ const TidsromStep = ({ onValidSubmit }: StepCommonProps) => {
label: text('steg.tidsrom.hvilketTidsrom.tom'),
validate: validateTilDatoField,
name: SøknadFormField.periodeTil,
defaultMonth: periodeFra ? new Date(periodeFra) : undefined,
defaultMonth: periodeFra,
}}
/>
{søkerKunHelgedager(values.periodeFra, values.periodeTil) && (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { hasValue } from '@navikt/sif-common-formik-ds/src/validation/validationUtils';
import { vi } from 'vitest';
import { getPeriodeMaksDato, getPeriodeMinDato } from '../fieldValidations';
import {
dateToISODate,
dateUtils,
getDate1YearFromNow,
getDate3YearsAgo,
getDateToday,
} from '@navikt/sif-common-utils';
import dayjs from 'dayjs';

vi.mock('@navikt/sif-common-core-ds/src/utils/envUtils', () => {
return {
Expand All @@ -15,21 +23,39 @@ vi.mock('@navikt/sif-common/src/env/commonEnv', () => {
});

describe('fieldValidations', () => {
describe('hasValue', () => {
it('should return true if provided value is not undefined, null or empty string', () => {
expect(hasValue('someValue')).toBe(true);
expect(hasValue(1234)).toBe(true);
expect(hasValue([])).toBe(true);
expect(hasValue({})).toBe(true);
expect(hasValue(true)).toBe(true);
expect(hasValue(false)).toBe(true);
describe('getPeriodeMinDato', () => {
it('Min dato skal være tre å bak i tid hvis vi ikke har barnets fødselsdato', () => {
const periodeMinDato = getPeriodeMinDato();
expect(dateToISODate(periodeMinDato)).toEqual(dateToISODate(getDate3YearsAgo()));
});

it('should return false if the provided value is undefined, null or empty string', () => {
expect(hasValue('')).toBe(false);

expect(hasValue(null)).toBe(false);
expect(hasValue(undefined)).toBe(false);
it('Min dato skal være tre å bak i tid hvis barnet er født før dette', () => {
const fødselsdato = dayjs(getDate3YearsAgo()).subtract(1, 'day').toDate();
const periodeMinDato = getPeriodeMinDato(fødselsdato);
expect(dateToISODate(periodeMinDato)).toEqual(dateToISODate(getDate3YearsAgo()));
});
it('Min dato skal være barnets fødselsdato hvis barnet er født innen siste tre år', () => {
const fødselsdato = dayjs(getDate3YearsAgo()).add(1, 'day').toDate();
const periodeMinDato = getPeriodeMinDato(fødselsdato);
expect(dateToISODate(periodeMinDato)).toEqual(dateToISODate(fødselsdato));
});
});
describe('getPeriodeMaksDato', () => {
it('Maks dato skal være ett år frem i tid hvis fraDato er gyldig, og fra dato er i dag', () => {
const fraDato = dateUtils.dateToISODate(getDateToday());
const maksDato = getPeriodeMaksDato(fraDato);
expect(dateToISODate(maksDato)).toEqual(dateToISODate(getDate1YearFromNow()));
});
it('Maks dato skal være ett år frem i tid hvis fraDato er gyldig, og fra dato er frem i tid', () => {
const fraDato = dateUtils.dateToISODate(dayjs(getDateToday()).add(2, 'week').toDate());
const maksDato = getPeriodeMaksDato(fraDato);
expect(dateToISODate(maksDato)).toEqual(dateToISODate(getDate1YearFromNow()));
});
it('Maks dato skal være ett år fra "fra"-dato hvis "fra"-dato er i fortid', () => {
const fraDato = dateUtils.dateToISODate(dayjs(getDateToday()).subtract(2, 'week').toDate());
const maksDato = getPeriodeMaksDato(fraDato);
expect(dateToISODate(maksDato)).toEqual(
dateToISODate(dayjs(getDate1YearFromNow()).subtract(2, 'week').toDate()),
);
});
});
});
22 changes: 20 additions & 2 deletions apps/pleiepenger-sykt-barn/src/app/validation/fieldValidations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import {
getDurationsInDateRange,
getValidDurations,
summarizeDateDurationMap,
getDate1YearFromNow,
dateUtils,
} from '@navikt/sif-common-utils';
import dayjs from 'dayjs';
import isoWeek from 'dayjs/plugin/isoWeek';
Expand Down Expand Up @@ -108,11 +110,27 @@ export const validateFradato = (
: undefined;
};

export const getPeriodeMinDato = (fødselsdato?: Date) => {
return fødselsdato
? dayjs.max(dayjs(getDate3YearsAgo()).endOf('day'), dayjs(fødselsdato).endOf('day'))!.toDate()
: getDate3YearsAgo();
};

export const getPeriodeMaksDato = (fraDatoString?: string) => {
if (fraDatoString && dayjs(fraDatoString).isValid()) {
return dateUtils.getFirstOfTwoDates(
dayjs(fraDatoString).endOf('day').add(1, 'year').toDate(),
getDate1YearFromNow(),
);
}
return getDate1YearFromNow();
};

export const validateTildato = (tilDatoString?: string, fraDatoString?: string): ValidationResult<ValidationError> => {
return getDateRangeValidator({
required: true,
min: getDate3YearsAgo(),
max: fraDatoString ? dayjs(fraDatoString).endOf('day').add(1, 'year').toDate() : undefined,
min: getPeriodeMinDato(),
max: getPeriodeMaksDato(fraDatoString),
fromDate: datepickerUtils.getDateFromDateString(fraDatoString),
onlyWeekdays: false,
}).validateToDate(tilDatoString);
Expand Down

0 comments on commit 88a3e54

Please sign in to comment.