Skip to content

Commit c5b2186

Browse files
authored
Feat/søknad endepunkt v9 (#1348)
* Tar i bruk v9 av endepunkt for innsending av søknad. Fjerner versjon (V8) fra typenavn. * Legger til tilRestLocaleRecord i spyOnUseApp * kontraktVersjon: '8' -> '9' * Tydeliggjør hva som er 'lokale' tekster og hva som er tekster fra Sanity * Validerer at v8 fortsatt fungerer * Revert "Validerer at v8 fortsatt fungerer" This reverts commit 306d62c. * Legger på feature toggle rundt bruk av nytt endepunkt for innsending av søknad * Flyttet på hook * Fikset feilende tester ved å mocke useFeatureToggles
1 parent 84dcc87 commit c5b2186

28 files changed

+202
-127
lines changed

src/backend/middlewares/erklaering-interceptor.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { mockDeep } from 'jest-mock-extended';
33
import { DeepPartial } from 'ts-essentials';
44

55
import { LocaleType } from '../../frontend/typer/common';
6-
import { ISøknadKontraktV8 } from '../../frontend/typer/kontrakt/v8';
6+
import { ISøknadKontrakt } from '../../frontend/typer/kontrakt/kontrakt';
77

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

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

13-
const request = (partialSøknad: DeepPartial<ISøknadKontraktV8>) =>
13+
const request = (partialSøknad: DeepPartial<ISøknadKontrakt>) =>
1414
mockDeep<Request>({
1515
body: partialSøknad,
1616
});
@@ -30,7 +30,7 @@ describe('erklaering-interceptor', () => {
3030
});
3131

3232
it('sender 400 hvis søknad ikke har korrekt format', () => {
33-
const invalidRequests: DeepPartial<ISøknadKontraktV8>[] = [
33+
const invalidRequests: DeepPartial<ISøknadKontrakt>[] = [
3434
{},
3535
{ spørsmål: {} },
3636
{ spørsmål: { lestOgForståttBekreftelse: {} } },

src/backend/middlewares/erklaering-interceptor.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import engelsk from '../../frontend/assets/lang/en.json' assert { type: 'json' }
66
import bokmål from '../../frontend/assets/lang/nb.json' assert { type: 'json' };
77
import nynorsk from '../../frontend/assets/lang/nn.json' assert { type: 'json' };
88
import { LocaleType } from '../../frontend/typer/common';
9-
import { ISøknadKontraktV8 } from '../../frontend/typer/kontrakt/v8';
9+
import { ISøknadKontrakt } from '../../frontend/typer/kontrakt/kontrakt';
1010

1111
export const hentSpråkteksterAlleSpråk = (språknøkkel: string): Record<LocaleType, string> => {
1212
return {
@@ -21,7 +21,7 @@ export const erklaeringInterceptor: RequestHandler = (
2121
response: Response,
2222
next
2323
) => {
24-
const søknad: ISøknadKontraktV8 = request.body;
24+
const søknad: ISøknadKontrakt = request.body;
2525
const spmKey = 'lestOgForståttBekreftelse';
2626
const aksepterteSvarSpråkNøkkel = 'forside.bekreftelsesboks.erklæring.spm';
2727
const aksepterteSvar = Object.values(hentSpråkteksterAlleSpråk(aksepterteSvarSpråkNøkkel));

src/backend/middlewares/escape.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { RequestHandler } from 'express';
22
import xss from 'xss';
33

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

66
export const escapeBody: RequestHandler = async (req, _res, next) => {
7-
const søknad: ISøknadKontraktV8 = req.body;
7+
const søknad: ISøknadKontrakt = req.body;
88
req.body = JSON.parse(xss(JSON.stringify(søknad)));
99
next();
1010
};

src/frontend/components/SøknadsSteg/Dokumentasjon/Dokumentasjon.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const erVedleggstidspunktGyldig = (vedleggTidspunkt: string): boolean =>
2828

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

3434
const oppdaterDokumentasjon = (
@@ -73,7 +73,7 @@ const Dokumentasjon: React.FC = () => {
7373
tittel={<SpråkTekst id={'dokumentasjon.sidetittel'} />}
7474
guide={dokumentasjonGuide}
7575
gåVidereCallback={async () => {
76-
const [success, _] = await sendInnSkjemaV8();
76+
const [success, _] = await sendInnSkjema();
7777
return success;
7878
}}
7979
>
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { LocaleRecordBlock } from '../../../typer/sanity/sanity';
1+
import { LocaleRecordBlock, LocaleRecordString } from '../../../typer/sanity/sanity';
22

33
export interface IOmDegTekstinnhold {
44
omDegTittel: LocaleRecordBlock;
55
omDegGuide: LocaleRecordBlock;
6+
skjermetAdresse: LocaleRecordString;
67
}

src/frontend/context/AppContext.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import { IKvittering } from '../typer/kvittering';
2222
import { IMellomlagretBarnetrygd } from '../typer/mellomlager';
2323
import { ISøkerRespons } from '../typer/person';
2424
import { RouteEnum } from '../typer/routes';
25-
import { ESanityFlettefeltverdi, ESanitySteg, FlettefeltVerdier } from '../typer/sanity/sanity';
25+
import {
26+
ESanityFlettefeltverdi,
27+
ESanitySteg,
28+
FlettefeltVerdier,
29+
TilRestLocaleRecord,
30+
} from '../typer/sanity/sanity';
2631
import { ITekstinnhold } from '../typer/sanity/tekstInnhold';
2732
import { initialStateSøknad, ISøknad } from '../typer/søknad';
2833
import { InnloggetStatus } from '../utils/autentisering';
@@ -350,6 +355,17 @@ const [AppProvider, useApp] = createUseContext(() => {
350355

351356
const plainTekst = plainTekstHof(flettefeltTilTekst, valgtLocale);
352357

358+
const tilRestLocaleRecord: TilRestLocaleRecord = (
359+
sanityTekst,
360+
flettefelter
361+
): Record<LocaleType, string> => {
362+
return {
363+
[LocaleType.en]: plainTekst(sanityTekst, flettefelter, LocaleType.en),
364+
[LocaleType.nn]: plainTekst(sanityTekst, flettefelter, LocaleType.nn),
365+
[LocaleType.nb]: plainTekst(sanityTekst, flettefelter, LocaleType.nb),
366+
};
367+
};
368+
353369
return {
354370
axiosRequest,
355371
sluttbruker,
@@ -379,6 +395,7 @@ const [AppProvider, useApp] = createUseContext(() => {
379395
settEøsLand,
380396
tekster,
381397
plainTekst,
398+
tilRestLocaleRecord,
382399
flettefeltTilTekst,
383400
kontoinformasjon,
384401
};

src/frontend/hooks/useSendInnSkjema.tsx

+20-8
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,38 @@ import { RessursStatus } from '@navikt/familie-typer';
55
import Miljø from '../../shared-utils/Miljø';
66
import { erModellMismatchResponsRessurs } from '../../shared-utils/modellversjon';
77
import { useApp } from '../context/AppContext';
8+
import { useFeatureToggles } from '../context/FeatureToggleContext';
89
import { useSpråk } from '../context/SpråkContext';
9-
import { ISøknadKontraktV8 } from '../typer/kontrakt/v8';
10-
import { dataISøknadKontraktFormatV8 } from '../utils/mappingTilKontrakt/søknadV8';
10+
import { ISøknadKontrakt } from '../typer/kontrakt/kontrakt';
11+
import { dataISøknadKontraktFormat } from '../utils/mappingTilKontrakt/søknad';
1112
import { sendInn } from '../utils/sendInnSkjema';
1213

1314
export const useSendInnSkjema = (): {
14-
sendInnSkjemaV8: () => Promise<[boolean, ISøknadKontraktV8]>;
15+
sendInnSkjema: () => Promise<[boolean, ISøknadKontrakt]>;
1516
} => {
1617
const { axiosRequest, søknad, settInnsendingStatus, settSisteModellVersjon } = useApp();
1718
const { soknadApiProxyUrl } = Miljø();
1819
const { valgtLocale } = useSpråk();
19-
const sendInnSkjemaV8 = async (): Promise<[boolean, ISøknadKontraktV8]> => {
20+
const { tekster, tilRestLocaleRecord } = useApp();
21+
const { toggles } = useFeatureToggles();
22+
23+
const sendInnSkjema = async (): Promise<[boolean, ISøknadKontrakt]> => {
2024
settInnsendingStatus({ status: RessursStatus.HENTER });
2125

22-
const formatert: ISøknadKontraktV8 = dataISøknadKontraktFormatV8(valgtLocale, søknad);
26+
const kontraktVersjon = toggles.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD ? 9 : 8;
27+
28+
const formatert: ISøknadKontrakt = dataISøknadKontraktFormat(
29+
valgtLocale,
30+
søknad,
31+
tekster(),
32+
tilRestLocaleRecord,
33+
kontraktVersjon
34+
);
2335

24-
const res = await sendInn<ISøknadKontraktV8>(
36+
const res = await sendInn<ISøknadKontrakt>(
2537
formatert,
2638
axiosRequest,
27-
`${soknadApiProxyUrl}/soknad/v8`,
39+
`${soknadApiProxyUrl}/soknad/v${kontraktVersjon}`,
2840
(res: AxiosError) => {
2941
const responseData = res.response?.data;
3042
if (responseData && erModellMismatchResponsRessurs(responseData)) {
@@ -39,6 +51,6 @@ export const useSendInnSkjema = (): {
3951
};
4052

4153
return {
42-
sendInnSkjemaV8,
54+
sendInnSkjema: sendInnSkjema,
4355
};
4456
};

src/frontend/hooks/useSendInnSkjemaTest/konverteringTilISøknadKontrakt.test.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { renderHook } from '@testing-library/react';
22

3-
import { ISøknadKontraktV8 } from '../../typer/kontrakt/v8';
3+
import { ISøknadKontrakt } from '../../typer/kontrakt/kontrakt';
44
import {
5+
mockFeatureToggle,
56
silenceConsoleErrors,
67
spyOnUseApp,
78
TestProvidereMedEkteTekster,
@@ -18,6 +19,7 @@ import { testdata5 } from './test-data/testdata5';
1819
describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
1920
beforeEach(() => {
2021
silenceConsoleErrors();
22+
mockFeatureToggle();
2123
});
2224
it('case 1', async () => {
2325
const { input: iSøknad, output: expectedISøknadKontrakt } = testdata1;
@@ -26,7 +28,7 @@ describe('test konvertering fra ISøknad til ISøknadKontrakt', () => {
2628
wrapper: TestProvidereMedEkteTekster,
2729
});
2830

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

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

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

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

73-
const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
75+
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
7476
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
7577
expect(JSON.stringify(formatert)).toEqual(JSON.stringify(expectedISøknadKontrakt));
7678
});

src/frontend/hooks/useSendInnSkjemaTest/test-data/testdata1.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export const testdata1: TilKontraktTestData = {
44
input: {
55
søknadstype: 'ORDINÆR',
66
erEøs: false,
7-
kontraktVersjon: '8',
7+
kontraktVersjon: '9',
88
antallEøsSteg: 0,
99
barnInkludertISøknaden: [
1010
{
@@ -383,7 +383,7 @@ export const testdata1: TilKontraktTestData = {
383383
},
384384
output: {
385385
søknadstype: 'ORDINÆR',
386-
kontraktVersjon: 8,
386+
kontraktVersjon: 9,
387387
antallEøsSteg: 0,
388388
søker: {
389389
harEøsSteg: false,

src/frontend/hooks/useSendInnSkjemaTest/test-data/testdata2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export const testdata2: TilKontraktTestData = {
44
input: {
55
søknadstype: 'ORDINÆR',
66
erEøs: true,
7-
kontraktVersjon: '8',
7+
kontraktVersjon: '9',
88
antallEøsSteg: 0,
99
barnInkludertISøknaden: [
1010
{
@@ -602,7 +602,7 @@ export const testdata2: TilKontraktTestData = {
602602
},
603603
output: {
604604
søknadstype: 'ORDINÆR',
605-
kontraktVersjon: 8,
605+
kontraktVersjon: 9,
606606
antallEøsSteg: 3,
607607
søker: {
608608
harEøsSteg: true,

src/frontend/hooks/useSendInnSkjemaTest/test-data/testdata3.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export const testdata3: TilKontraktTestData = {
44
input: {
55
søknadstype: 'ORDINÆR',
66
erEøs: true,
7-
kontraktVersjon: '8',
7+
kontraktVersjon: '9',
88
antallEøsSteg: 0,
99
barnInkludertISøknaden: [
1010
{
@@ -577,7 +577,7 @@ export const testdata3: TilKontraktTestData = {
577577
},
578578
output: {
579579
søknadstype: 'ORDINÆR',
580-
kontraktVersjon: 8,
580+
kontraktVersjon: 9,
581581
antallEøsSteg: 3,
582582
søker: {
583583
harEøsSteg: true,

src/frontend/hooks/useSendInnSkjemaTest/test-data/testdata4.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ export const testdata4: TilKontraktTestData = {
529529
},
530530
output: {
531531
søknadstype: 'UTVIDET',
532-
kontraktVersjon: 8,
532+
kontraktVersjon: 9,
533533
antallEøsSteg: 3,
534534
søker: {
535535
harEøsSteg: true,

src/frontend/hooks/useSendInnSkjemaTest/test-data/testdata5.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export const testdata5: TilKontraktTestData = {
44
input: {
55
søknadstype: 'UTVIDET',
66
erEøs: true,
7-
kontraktVersjon: '8',
7+
kontraktVersjon: '9',
88
antallEøsSteg: 2,
99
barnInkludertISøknaden: [
1010
{
@@ -602,7 +602,7 @@ export const testdata5: TilKontraktTestData = {
602602
},
603603
output: {
604604
søknadstype: 'UTVIDET',
605-
kontraktVersjon: 8,
605+
kontraktVersjon: 9,
606606
antallEøsSteg: 2,
607607
søker: {
608608
harEøsSteg: true,

src/frontend/hooks/useSendInnSkjemaTest/useSendInnSkjema.test.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { renderHook } from '@testing-library/react';
22
import { act } from 'react-dom/test-utils';
33

44
import { ESivilstand } from '../../typer/kontrakt/generelle';
5-
import { ISøknadKontraktV8 } from '../../typer/kontrakt/v8';
5+
import { ISøknadKontrakt } from '../../typer/kontrakt/kontrakt';
66
import { hentSivilstatusSpråkId } from '../../utils/språk';
77
import {
88
mekkGyldigUtvidetSøknad,
@@ -26,7 +26,7 @@ describe('useSendInnSkjema', () => {
2626
const { result } = renderHook(() => useSendInnSkjema(), {
2727
wrapper: TestProvidereMedEkteTekster,
2828
});
29-
const [_, formatert]: [boolean, ISøknadKontraktV8] = await result.current.sendInnSkjemaV8();
29+
const [_, formatert]: [boolean, ISøknadKontrakt] = await result.current.sendInnSkjema();
3030
expect(erGyldigISøknadKontrakt(formatert)).toBeTruthy();
3131
await act(async () => {
3232
jest.advanceTimersByTime(500);

src/frontend/typer/feature-toggles.ts

+3
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ export enum EFeatureToggle {
66
// EKSEMPEL = 'EKSEMPEL',
77
NYE_MODAL_TEKSTER = 'NYE_MODAL_TEKSTER',
88
VIS_KONTONUMMER = 'VIS_KONTONUMMER',
9+
BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD = 'BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD',
910
}
1011

1112
export const ToggleKeys: Record<EFeatureToggle, string> = {
1213
// [EFeatureToggle.EKSEMPEL]: 'familie-ba-soknad.eksempel',
1314
[EFeatureToggle.NYE_MODAL_TEKSTER]: 'familie-ba-soknad.nye-modal-tekster',
1415
[EFeatureToggle.VIS_KONTONUMMER]: 'familie-ba-soknad.vis-kontonummer',
16+
[EFeatureToggle.BRUK_NYTT_ENDEPUNKT_FOR_INNSENDING_AV_SOKNAD]:
17+
'familie-ba-soknad.bruk_nytt_endepunkt_for_innsending_av_soknad',
1518
};
1619

1720
export type EAllFeatureToggles = Record<EFeatureToggle, boolean>;

0 commit comments

Comments
 (0)