Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/søknad endepunkt v9 #1348

Merged
merged 12 commits into from
Sep 3, 2024
Merged
6 changes: 3 additions & 3 deletions src/backend/middlewares/erklaering-interceptor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { mockDeep } from 'jest-mock-extended';
import { DeepPartial } from 'ts-essentials';

import { LocaleType } from '../../frontend/typer/common';
import { ISøknadKontraktV8 } from '../../frontend/typer/kontrakt/v8';
import { ISøknadKontrakt } from '../../frontend/typer/kontrakt/kontrakt';

import { erklaeringInterceptor, hentSpråkteksterAlleSpråk } from './erklaering-interceptor';

describe('erklaering-interceptor', () => {
const aksepterteSvarSpråkNøkkel = 'forside.bekreftelsesboks.erklæring.spm';

const request = (partialSøknad: DeepPartial<ISøknadKontraktV8>) =>
const request = (partialSøknad: DeepPartial<ISøknadKontrakt>) =>
mockDeep<Request>({
body: partialSøknad,
});
Expand All @@ -30,7 +30,7 @@ describe('erklaering-interceptor', () => {
});

it('sender 400 hvis søknad ikke har korrekt format', () => {
const invalidRequests: DeepPartial<ISøknadKontraktV8>[] = [
const invalidRequests: DeepPartial<ISøknadKontrakt>[] = [
{},
{ spørsmål: {} },
{ spørsmål: { lestOgForståttBekreftelse: {} } },
Expand Down
4 changes: 2 additions & 2 deletions src/backend/middlewares/erklaering-interceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import engelsk from '../../frontend/assets/lang/en.json' assert { type: 'json' }
import bokmål from '../../frontend/assets/lang/nb.json' assert { type: 'json' };
import nynorsk from '../../frontend/assets/lang/nn.json' assert { type: 'json' };
import { LocaleType } from '../../frontend/typer/common';
import { ISøknadKontraktV8 } from '../../frontend/typer/kontrakt/v8';
import { ISøknadKontrakt } from '../../frontend/typer/kontrakt/kontrakt';

export const hentSpråkteksterAlleSpråk = (språknøkkel: string): Record<LocaleType, string> => {
return {
Expand All @@ -21,7 +21,7 @@ export const erklaeringInterceptor: RequestHandler = (
response: Response,
next
) => {
const søknad: ISøknadKontraktV8 = request.body;
const søknad: ISøknadKontrakt = request.body;
const spmKey = 'lestOgForståttBekreftelse';
const aksepterteSvarSpråkNøkkel = 'forside.bekreftelsesboks.erklæring.spm';
const aksepterteSvar = Object.values(hentSpråkteksterAlleSpråk(aksepterteSvarSpråkNøkkel));
Expand Down
4 changes: 2 additions & 2 deletions src/backend/middlewares/escape.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { RequestHandler } from 'express';
import xss from 'xss';

import { ISøknadKontraktV8 } from '../../frontend/typer/kontrakt/v8';
import { ISøknadKontrakt } from '../../frontend/typer/kontrakt/kontrakt';

export const escapeBody: RequestHandler = async (req, _res, next) => {
const søknad: ISøknadKontraktV8 = req.body;
const søknad: ISøknadKontrakt = req.body;
req.body = JSON.parse(xss(JSON.stringify(søknad)));
next();
};
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export const erVedleggstidspunktGyldig = (vedleggTidspunkt: string): boolean =>

const Dokumentasjon: React.FC = () => {
const { søknad, settSøknad, innsendingStatus, tekster } = useApp();
const { sendInnSkjemaV8 } = useSendInnSkjema();
const { sendInnSkjema } = useSendInnSkjema();
const [slettaVedlegg, settSlettaVedlegg] = useState<IVedlegg[]>([]);

const oppdaterDokumentasjon = (
Expand Down Expand Up @@ -73,7 +73,7 @@ const Dokumentasjon: React.FC = () => {
tittel={<SpråkTekst id={'dokumentasjon.sidetittel'} />}
guide={dokumentasjonGuide}
gåVidereCallback={async () => {
const [success, _] = await sendInnSkjemaV8();
const [success, _] = await sendInnSkjema();
return success;
}}
>
Expand Down
3 changes: 2 additions & 1 deletion src/frontend/components/SøknadsSteg/OmDeg/innholdTyper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { LocaleRecordBlock } from '../../../typer/sanity/sanity';
import { LocaleRecordBlock, LocaleRecordString } from '../../../typer/sanity/sanity';

export interface IOmDegTekstinnhold {
omDegTittel: LocaleRecordBlock;
omDegGuide: LocaleRecordBlock;
skjermetAdresse: LocaleRecordString;
}
19 changes: 18 additions & 1 deletion src/frontend/context/AppContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ import { IKvittering } from '../typer/kvittering';
import { IMellomlagretBarnetrygd } from '../typer/mellomlager';
import { ISøkerRespons } from '../typer/person';
import { RouteEnum } from '../typer/routes';
import { ESanityFlettefeltverdi, ESanitySteg, FlettefeltVerdier } from '../typer/sanity/sanity';
import {
ESanityFlettefeltverdi,
ESanitySteg,
FlettefeltVerdier,
TilRestLocaleRecord,
} from '../typer/sanity/sanity';
import { ITekstinnhold } from '../typer/sanity/tekstInnhold';
import { initialStateSøknad, ISøknad } from '../typer/søknad';
import { InnloggetStatus } from '../utils/autentisering';
Expand Down Expand Up @@ -350,6 +355,17 @@ const [AppProvider, useApp] = createUseContext(() => {

const plainTekst = plainTekstHof(flettefeltTilTekst, valgtLocale);

const tilRestLocaleRecord: TilRestLocaleRecord = (
sanityTekst,
flettefelter
): Record<LocaleType, string> => {
return {
[LocaleType.en]: plainTekst(sanityTekst, flettefelter, LocaleType.en),
[LocaleType.nn]: plainTekst(sanityTekst, flettefelter, LocaleType.nn),
[LocaleType.nb]: plainTekst(sanityTekst, flettefelter, LocaleType.nb),
};
};

return {
axiosRequest,
sluttbruker,
Expand Down Expand Up @@ -379,6 +395,7 @@ const [AppProvider, useApp] = createUseContext(() => {
settEøsLand,
tekster,
plainTekst,
tilRestLocaleRecord,
flettefeltTilTekst,
kontoinformasjon,
};
Expand Down
28 changes: 20 additions & 8 deletions src/frontend/hooks/useSendInnSkjema.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,38 @@ import { RessursStatus } from '@navikt/familie-typer';
import Miljø from '../../shared-utils/Miljø';
import { erModellMismatchResponsRessurs } from '../../shared-utils/modellversjon';
import { useApp } from '../context/AppContext';
import { useFeatureToggles } from '../context/FeatureToggleContext';
import { useSpråk } from '../context/SpråkContext';
import { ISøknadKontraktV8 } from '../typer/kontrakt/v8';
import { dataISøknadKontraktFormatV8 } from '../utils/mappingTilKontrakt/søknadV8';
import { ISøknadKontrakt } from '../typer/kontrakt/kontrakt';
import { dataISøknadKontraktFormat } from '../utils/mappingTilKontrakt/søknad';
import { sendInn } from '../utils/sendInnSkjema';

export const useSendInnSkjema = (): {
sendInnSkjemaV8: () => Promise<[boolean, ISøknadKontraktV8]>;
sendInnSkjema: () => Promise<[boolean, ISøknadKontrakt]>;
} => {
const { axiosRequest, søknad, settInnsendingStatus, settSisteModellVersjon } = useApp();
const { soknadApiProxyUrl } = Miljø();
const { valgtLocale } = useSpråk();
const sendInnSkjemaV8 = async (): Promise<[boolean, ISøknadKontraktV8]> => {
const { tekster, tilRestLocaleRecord } = useApp();
const { toggles } = useFeatureToggles();

const sendInnSkjema = async (): Promise<[boolean, ISøknadKontrakt]> => {
settInnsendingStatus({ status: RessursStatus.HENTER });

const formatert: ISøknadKontraktV8 = dataISøknadKontraktFormatV8(valgtLocale, søknad);
const kontraktVersjon = toggles.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD ? 9 : 8;

const formatert: ISøknadKontrakt = dataISøknadKontraktFormat(
valgtLocale,
søknad,
tekster(),
tilRestLocaleRecord,
kontraktVersjon
);

const res = await sendInn<ISøknadKontraktV8>(
const res = await sendInn<ISøknadKontrakt>(
formatert,
axiosRequest,
`${soknadApiProxyUrl}/soknad/v8`,
`${soknadApiProxyUrl}/soknad/v${kontraktVersjon}`,
(res: AxiosError) => {
const responseData = res.response?.data;
if (responseData && erModellMismatchResponsRessurs(responseData)) {
Expand All @@ -39,6 +51,6 @@ export const useSendInnSkjema = (): {
};

return {
sendInnSkjemaV8,
sendInnSkjema: sendInnSkjema,
};
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { renderHook } from '@testing-library/react';

import { ISøknadKontraktV8 } from '../../typer/kontrakt/v8';
import { ISøknadKontrakt } from '../../typer/kontrakt/kontrakt';
import {
mockFeatureToggle,
silenceConsoleErrors,
spyOnUseApp,
TestProvidereMedEkteTekster,
Expand All @@ -18,6 +19,7 @@ import { testdata5 } from './test-data/testdata5';
describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
beforeEach(() => {
silenceConsoleErrors();
mockFeatureToggle();
});
it('case 1', async () => {
const { input: iSøknad, output: expectedISøknadKontrakt } = testdata1;
Expand All @@ -26,7 +28,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
wrapper: TestProvidereMedEkteTekster,
});

const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
});
Expand All @@ -37,7 +39,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
wrapper: TestProvidereMedEkteTekster,
});

const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
});
Expand All @@ -48,7 +50,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
wrapper: TestProvidereMedEkteTekster,
});

const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
});
Expand All @@ -59,7 +61,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
wrapper: TestProvidereMedEkteTekster,
});

const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
});
Expand All @@ -70,7 +72,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
wrapper: TestProvidereMedEkteTekster,
});

const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const testdata1: TilKontraktTestData = {
input: {
søknadstype: 'ORDINÆR',
erEøs: false,
kontraktVersjon: '8',
kontraktVersjon: '9',
antallEøsSteg: 0,
barnInkludertISøknaden: [
{
Expand Down Expand Up @@ -383,7 +383,7 @@ export const testdata1: TilKontraktTestData = {
},
output: {
søknadstype: 'ORDINÆR',
kontraktVersjon: 8,
kontraktVersjon: 9,
antallEøsSteg: 0,
søker: {
harEøsSteg: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const testdata2: TilKontraktTestData = {
input: {
søknadstype: 'ORDINÆR',
erEøs: true,
kontraktVersjon: '8',
kontraktVersjon: '9',
antallEøsSteg: 0,
barnInkludertISøknaden: [
{
Expand Down Expand Up @@ -602,7 +602,7 @@ export const testdata2: TilKontraktTestData = {
},
output: {
søknadstype: 'ORDINÆR',
kontraktVersjon: 8,
kontraktVersjon: 9,
antallEøsSteg: 3,
søker: {
harEøsSteg: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const testdata3: TilKontraktTestData = {
input: {
søknadstype: 'ORDINÆR',
erEøs: true,
kontraktVersjon: '8',
kontraktVersjon: '9',
antallEøsSteg: 0,
barnInkludertISøknaden: [
{
Expand Down Expand Up @@ -577,7 +577,7 @@ export const testdata3: TilKontraktTestData = {
},
output: {
søknadstype: 'ORDINÆR',
kontraktVersjon: 8,
kontraktVersjon: 9,
antallEøsSteg: 3,
søker: {
harEøsSteg: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ export const testdata4: TilKontraktTestData = {
},
output: {
søknadstype: 'UTVIDET',
kontraktVersjon: 8,
kontraktVersjon: 9,
antallEøsSteg: 3,
søker: {
harEøsSteg: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const testdata5: TilKontraktTestData = {
input: {
søknadstype: 'UTVIDET',
erEøs: true,
kontraktVersjon: '8',
kontraktVersjon: '9',
antallEøsSteg: 2,
barnInkludertISøknaden: [
{
Expand Down Expand Up @@ -602,7 +602,7 @@ export const testdata5: TilKontraktTestData = {
},
output: {
søknadstype: 'UTVIDET',
kontraktVersjon: 8,
kontraktVersjon: 9,
antallEøsSteg: 2,
søker: {
harEøsSteg: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { renderHook } from '@testing-library/react';
import { act } from 'react-dom/test-utils';

import { ESivilstand } from '../../typer/kontrakt/generelle';
import { ISøknadKontraktV8 } from '../../typer/kontrakt/v8';
import { ISøknadKontrakt } from '../../typer/kontrakt/kontrakt';
import { hentSivilstatusSpråkId } from '../../utils/språk';
import {
mekkGyldigUtvidetSøknad,
Expand All @@ -26,7 +26,7 @@ describe('useSendInnSkjema', () => {
const { result } = renderHook(() => useSendInnSkjema(), {
wrapper: TestProvidereMedEkteTekster,
});
const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
await act(async () => {
jest.advanceTimersByTime(500);
Expand Down
3 changes: 3 additions & 0 deletions src/frontend/typer/feature-toggles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ export enum EFeatureToggle {
// EKSEMPEL = 'EKSEMPEL',
NYE_MODAL_TEKSTER = 'NYE_MODAL_TEKSTER',
VIS_KONTONUMMER = 'VIS_KONTONUMMER',
BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD = 'BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD',
}

export const ToggleKeys: Record<EFeatureToggle, string> = {
// [EFeatureToggle.EKSEMPEL]: 'familie-ba-soknad.eksempel',
[EFeatureToggle.NYE_MODAL_TEKSTER]: 'familie-ba-soknad.nye-modal-tekster',
[EFeatureToggle.VIS_KONTONUMMER]: 'familie-ba-soknad.vis-kontonummer',
[EFeatureToggle.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD]:
'familie-ba-soknad.bruk_nytt_endepunkt_for_innsending_av_soknad',
};

export type EAllFeatureToggles = Record<EFeatureToggle, boolean>;
Expand Down
Loading