Skip to content

Commit

Permalink
IS-2669: Ny vurdering
Browse files Browse the repository at this point in the history
  • Loading branch information
andersrognstad committed Sep 18, 2024
1 parent 2c5792f commit 5411d7b
Show file tree
Hide file tree
Showing 7 changed files with 302 additions and 93 deletions.
9 changes: 9 additions & 0 deletions src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,12 @@ export enum VurderingType {
STANS = "STANS",
IKKE_AKTUELL = "IKKE_AKTUELL",
}

export const typeTexts: {
[key in VurderingType]: string;
} = {
[VurderingType.FORHANDSVARSEL]: "Forhåndsvarsel",
[VurderingType.OPPFYLT]: "Oppfylt",
[VurderingType.STANS]: "Stans",
[VurderingType.IKKE_AKTUELL]: "Ikke aktuell",
};
31 changes: 10 additions & 21 deletions src/sider/manglendemedvirkning/ManglendeMedvirkning.tsx
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
import React from "react";
import ForhandsvarselSkjema from "@/sider/manglendemedvirkning/forhandsvarsel/ForhandsvarselSkjema";
import React, { useState } from "react";
import { useManglendeMedvirkningVurderingQuery } from "@/data/manglendemedvirkning/manglendeMedvirkningQueryHooks";
import { VurderingType } from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { Alert, Box } from "@navikt/ds-react";
import ForhandsvarselSendt from "@/sider/manglendemedvirkning/forhandsvarsel/ForhandsvarselSendt";
import { useNotification } from "@/context/notification/NotificationContext";
import { ManglendeMedvirkningStartetVurdering } from "@/sider/manglendemedvirkning/ManglendeMedvirkningStartetVurdering";
import { ManglendeMedvirkningNyVurdering } from "@/sider/manglendemedvirkning/ManglendeMedvirkningNyVurdering";

export default function ManglendeMedvirkning() {
const { notification } = useNotification();
const { sisteVurdering } = useManglendeMedvirkningVurderingQuery();
const isForhandsvarsel =
sisteVurdering?.vurderingType === VurderingType.FORHANDSVARSEL;
const [showStartetVurdering, setShowStartetVurdering] = useState(false);

return (
<>
{notification && (
<Alert variant="success" className="mb-2">
{notification.message}
</Alert>
)}
<Box>
{isForhandsvarsel ? (
<ForhandsvarselSendt forhandsvarsel={sisteVurdering} />
) : (
<ForhandsvarselSkjema />
)}
</Box>
</>
return showStartetVurdering || isForhandsvarsel ? (
<ManglendeMedvirkningStartetVurdering sisteVurdering={sisteVurdering} />
) : (
<ManglendeMedvirkningNyVurdering
handleClick={() => setShowStartetVurdering(true)}
/>
);
}
66 changes: 66 additions & 0 deletions src/sider/manglendemedvirkning/ManglendeMedvirkningNyVurdering.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import React from "react";
import { ReactElement } from "react";
import { useNotification } from "@/context/notification/NotificationContext";
import { Alert, BodyShort, Box, Button, Heading } from "@navikt/ds-react";
import { tilLesbarDatoMedArUtenManedNavn } from "@/utils/datoUtils";
import {
typeTexts,
VurderingResponseDTO,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useManglendeMedvirkningVurderingQuery } from "@/data/manglendemedvirkning/manglendeMedvirkningQueryHooks";

const texts = {
title: "Arbeidsuførhet",
siste: "Siste vurdering",
button: "Start ny vurdering",
};

const lastVurderingText = (vurderinger: VurderingResponseDTO[]) => {
if (vurderinger.length === 0) {
return "Ingen vurderinger har blitt gjort, trykk på 'Start ny vurdering' for å sende forhåndsvarsel.";
}

const lastVurdering = vurderinger[0];
const lastForhandsvarsel = vurderinger.find(
({ vurderingType }) => vurderingType === VurderingType.FORHANDSVARSEL
);
const lastVurderingType =
typeTexts[lastVurdering.vurderingType].toLowerCase();

return `Forrige forhåndsvarsel på § 8-8 ble sendt ut ${tilLesbarDatoMedArUtenManedNavn(
lastForhandsvarsel?.createdAt
)} og ${lastVurderingType} ${tilLesbarDatoMedArUtenManedNavn(
lastVurdering?.createdAt
)}.`;
};

interface Props {
handleClick: () => void;
}

export const ManglendeMedvirkningNyVurdering = ({
handleClick,
}: Props): ReactElement => {
const { data } = useManglendeMedvirkningVurderingQuery();
const { notification } = useNotification();

return (
<>
{notification && (
<Alert variant="success" className="mb-2">
{notification.message}
</Alert>
)}
<Box background="surface-default" padding="6">
<Heading className="mb-4" level="2" size="medium">
{texts.siste}
</Heading>
<BodyShort className="mb-4">{`${lastVurderingText(data)}`}</BodyShort>
<Button onClick={handleClick} variant="secondary">
{texts.button}
</Button>
</Box>
</>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React, { ReactElement } from "react";
import {
VurderingResponseDTO,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import ForhandsvarselSendt from "@/sider/manglendemedvirkning/forhandsvarsel/ForhandsvarselSendt";
import ForhandsvarselSkjema from "@/sider/manglendemedvirkning/forhandsvarsel/ForhandsvarselSkjema";

interface ManglendeMedvirkningStartetVurderingProps {
sisteVurdering: VurderingResponseDTO | undefined;
}

export const ManglendeMedvirkningStartetVurdering = ({
sisteVurdering,
}: ManglendeMedvirkningStartetVurderingProps): ReactElement => {
const isForhandsvarsel =
sisteVurdering?.vurderingType === VurderingType.FORHANDSVARSEL;
return isForhandsvarsel ? (
<ForhandsvarselSendt forhandsvarsel={sisteVurdering} />
) : (
<ForhandsvarselSkjema />
);
};
83 changes: 83 additions & 0 deletions test/manglendemedvirkning/ForhandsvarselTest.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { beforeEach, describe, expect, it } from "vitest";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
import { screen, waitFor } from "@testing-library/react";
import { changeTextInput, clickButton, getTextInput } from "../testUtils";
import { addWeeks } from "@/utils/datoUtils";
import {
NewForhandsvarselVurderingRequestDTO,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { ARBEIDSTAKER_DEFAULT } from "../../mock/common/mockConstants";
import { getSendForhandsvarselDocument } from "./vurderingDocuments";
import React from "react";
import { renderWithRouter } from "../testRouterUtils";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ValgtEnhetContext } from "@/context/ValgtEnhetContext";
import { navEnhet } from "../dialogmote/testData";
import { NotificationProvider } from "@/context/notification/NotificationContext";
import ForhandsvarselSkjema from "@/sider/manglendemedvirkning/forhandsvarsel/ForhandsvarselSkjema";
import { queryClientWithMockData } from "../testQueryClient";

let queryClient: QueryClient;

const renderForhandsvarselSkjema = () => {
return renderWithRouter(
<QueryClientProvider client={queryClient}>
<ValgtEnhetContext.Provider
value={{ valgtEnhet: navEnhet.id, setValgtEnhet: () => void 0 }}
>
<NotificationProvider>
<ForhandsvarselSkjema />
</NotificationProvider>
</ValgtEnhetContext.Provider>
</QueryClientProvider>,
manglendeMedvirkningPath,
[manglendeMedvirkningPath]
);
};

describe("Manglendemedvirkning Forhandsvarsel", () => {
beforeEach(() => {
queryClient = queryClientWithMockData();
});

it("viser feil når man sender forhåndsvarsel uten å ha skrevet begrunnelse", async () => {
renderForhandsvarselSkjema();

await clickButton("Send");

expect(await screen.findByText("Vennligst angi begrunnelse")).to.exist;
});

it("skal sende forhandsvarsel med riktige verdier", async () => {
renderForhandsvarselSkjema();

const varselSvarfrist = addWeeks(new Date(), 3);
const begrunnelse = "En begrunnelse";

const begrunnelseInput = getTextInput("Begrunnelse (obligatorisk)");
changeTextInput(begrunnelseInput, begrunnelse);

await clickButton("Send");

const expectedRequestBody: NewForhandsvarselVurderingRequestDTO = {
personident: ARBEIDSTAKER_DEFAULT.personIdent,
vurderingType: VurderingType.FORHANDSVARSEL,
begrunnelse: begrunnelse,
document: getSendForhandsvarselDocument(begrunnelse, varselSvarfrist),
varselSvarfrist: varselSvarfrist,
};

await waitFor(() => {
const vurderingMutation = queryClient.getMutationCache().getAll().pop();

// Ikke deep.equal fordi varselSvarfrist blir ulik på millisekund-nivå
expect(vurderingMutation?.state.variables).to.deep.include({
personident: expectedRequestBody.personident,
vurderingType: expectedRequestBody.vurderingType,
begrunnelse: expectedRequestBody.begrunnelse,
document: expectedRequestBody.document,
});
});
});
});
Loading

0 comments on commit 5411d7b

Please sign in to comment.