diff --git a/src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts b/src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts
index 2d3dd94e9..63122b350 100644
--- a/src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts
+++ b/src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts
@@ -48,3 +48,13 @@ export enum VurderingType {
UNNTAK = "UNNTAK",
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",
+ [VurderingType.UNNTAK]: "Unntak",
+};
diff --git a/src/sider/manglendemedvirkning/ManglendeMedvirkning.tsx b/src/sider/manglendemedvirkning/ManglendeMedvirkning.tsx
index 6e1072cd7..58fed494a 100644
--- a/src/sider/manglendemedvirkning/ManglendeMedvirkning.tsx
+++ b/src/sider/manglendemedvirkning/ManglendeMedvirkning.tsx
@@ -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 && (
-
- {notification.message}
-
- )}
-
- {isForhandsvarsel ? (
-
- ) : (
-
- )}
-
- >
+ return showStartetVurdering || isForhandsvarsel ? (
+
+ ) : (
+ setShowStartetVurdering(true)}
+ />
);
}
diff --git a/src/sider/manglendemedvirkning/ManglendeMedvirkningNyVurdering.tsx b/src/sider/manglendemedvirkning/ManglendeMedvirkningNyVurdering.tsx
new file mode 100644
index 000000000..2de47002a
--- /dev/null
+++ b/src/sider/manglendemedvirkning/ManglendeMedvirkningNyVurdering.tsx
@@ -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 && (
+
+ {notification.message}
+
+ )}
+
+
+ {texts.siste}
+
+ {`${lastVurderingText(data)}`}
+
+
+ >
+ );
+};
diff --git a/src/sider/manglendemedvirkning/ManglendeMedvirkningStartetVurdering.tsx b/src/sider/manglendemedvirkning/ManglendeMedvirkningStartetVurdering.tsx
new file mode 100644
index 000000000..dc8b25216
--- /dev/null
+++ b/src/sider/manglendemedvirkning/ManglendeMedvirkningStartetVurdering.tsx
@@ -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 ? (
+
+ ) : (
+
+ );
+};
diff --git a/test/manglendemedvirkning/ForhandsvarselTest.tsx b/test/manglendemedvirkning/ForhandsvarselTest.tsx
new file mode 100644
index 000000000..ec81d22be
--- /dev/null
+++ b/test/manglendemedvirkning/ForhandsvarselTest.tsx
@@ -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 { addDays } 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(
+
+ void 0 }}
+ >
+
+
+
+
+ ,
+ 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 = addDays(new Date(), 1);
+ 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,
+ });
+ });
+ });
+});
diff --git a/test/manglendemedvirkning/ManglendeMedvirkningTest.tsx b/test/manglendemedvirkning/ManglendeMedvirkningTest.tsx
index df57d211f..eb7139574 100644
--- a/test/manglendemedvirkning/ManglendeMedvirkningTest.tsx
+++ b/test/manglendemedvirkning/ManglendeMedvirkningTest.tsx
@@ -3,13 +3,11 @@ import { ARBEIDSTAKER_DEFAULT } from "../../mock/common/mockConstants";
import { beforeEach, describe, expect, it } from "vitest";
import { queryClientWithMockData } from "../testQueryClient";
import { manglendeMedvirkningQueryKeys } from "@/data/manglendemedvirkning/manglendeMedvirkningQueryHooks";
-import { screen, waitFor } from "@testing-library/react";
+import { screen } from "@testing-library/react";
import { ValgtEnhetContext } from "@/context/ValgtEnhetContext";
import { navEnhet } from "../dialogmote/testData";
-import React, { ReactNode } from "react";
-import { changeTextInput, clickButton, getTextInput } from "../testUtils";
+import React from "react";
import {
- NewForhandsvarselVurderingRequestDTO,
VurderingResponseDTO,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
@@ -21,48 +19,105 @@ import {
import { NotificationProvider } from "@/context/notification/NotificationContext";
import { renderWithRouter } from "../testRouterUtils";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
-import { getSendForhandsvarselDocument } from "./vurderingDocuments";
import ManglendeMedvirkning from "@/sider/manglendemedvirkning/ManglendeMedvirkning";
import { generateUUID } from "@/utils/uuidUtils";
-import { defaultForhandsvarselVurdering } from "./manglendeMedvirkningTestData";
+import {
+ createManglendeMedvirkningVurdering,
+ defaultForhandsvarselVurdering,
+} from "./manglendeMedvirkningTestData";
+import { clickButton, getButton } from "../testUtils";
let queryClient: QueryClient;
-const renderManglendeMedvirkning = (children: ReactNode, path: string) => {
+const renderManglendeMedvirkning = () => {
return renderWithRouter(
void 0 }}
>
- {children}
+
+
+
,
- path,
- [path]
+ manglendeMedvirkningPath,
+ [manglendeMedvirkningPath]
);
};
-function mockVurdering(vurdering?: VurderingResponseDTO) {
+function mockVurdering(vurderinger: VurderingResponseDTO[] = []) {
queryClient.setQueryData(
manglendeMedvirkningQueryKeys.manglendeMedvirkning(
ARBEIDSTAKER_DEFAULT.personIdent
),
- () => (vurdering ? [vurdering] : [])
+ () => vurderinger
);
}
describe("Manglendemedvirkning", () => {
+ const nyVurderingButtonText = "Start ny vurdering";
+
beforeEach(() => {
queryClient = queryClientWithMockData();
});
+ describe("Ny vurdering", () => {
+ it("viser ny vurdering-knapp når ingen tidligere vurderinger", () => {
+ mockVurdering([]);
+ renderManglendeMedvirkning();
- describe("ForhandsvarselSkjema", () => {
- it("skal vise forhandsvarsel side når ingen tidligere vurderinger", () => {
- mockVurdering();
- renderManglendeMedvirkning(
- ,
- manglendeMedvirkningPath
+ expect(screen.getByText("Siste vurdering")).to.exist;
+ expect(getButton(nyVurderingButtonText)).to.exist;
+ });
+ it("viser ny vurdering-knapp når forrige vurdering OPPFYLT", () => {
+ const oppfyltVurdering = createManglendeMedvirkningVurdering(
+ VurderingType.OPPFYLT
);
+ mockVurdering([oppfyltVurdering, defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
+
+ expect(screen.getByText("Siste vurdering")).to.exist;
+ expect(screen.getByText(/oppfylt/)).to.exist;
+ expect(getButton(nyVurderingButtonText)).to.exist;
+ });
+ it("viser ny vurdering-knapp når forrige vurdering STANS", () => {
+ const stansVurdering = createManglendeMedvirkningVurdering(
+ VurderingType.STANS
+ );
+ mockVurdering([stansVurdering, defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
+
+ expect(screen.getByText("Siste vurdering")).to.exist;
+ expect(screen.getByText(/stans/)).to.exist;
+ expect(getButton(nyVurderingButtonText)).to.exist;
+ });
+ it("viser ny vurdering-knapp når forrige vurdering IKKE AKTUELL", () => {
+ const ikkeAktuellVurdering = createManglendeMedvirkningVurdering(
+ VurderingType.IKKE_AKTUELL
+ );
+ mockVurdering([ikkeAktuellVurdering, defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
+
+ expect(screen.getByText("Siste vurdering")).to.exist;
+ expect(screen.getByText(/ikke aktuell/)).to.exist;
+ expect(getButton(nyVurderingButtonText)).to.exist;
+ });
+ it("viser ny vurdering-knapp når forrige vurdering UNNTAK", () => {
+ const unntakVurdering = createManglendeMedvirkningVurdering(
+ VurderingType.UNNTAK
+ );
+ mockVurdering([unntakVurdering]);
+ renderManglendeMedvirkning();
+
+ expect(screen.getByText("Siste vurdering")).to.exist;
+ expect(screen.getByText(/unntak/)).to.exist;
+ expect(getButton(nyVurderingButtonText)).to.exist;
+ });
+
+ it("viser forhandsvarsel-skjema etter klikk på ny vurdering-knapp uten tidligere vurderinger", async () => {
+ mockVurdering();
+ renderManglendeMedvirkning();
+
+ await clickButton(nyVurderingButtonText);
expect(screen.getByText("Send forhåndsvarsel")).to.exist;
expect(
@@ -74,62 +129,37 @@ describe("Manglendemedvirkning", () => {
expect(screen.getByRole("button", { name: "Forhåndsvisning" })).to.exist;
});
- it("viser feil når man sender forhåndsvarsel uten å ha skrevet begrunnelse", async () => {
- mockVurdering();
- renderManglendeMedvirkning(
- ,
- manglendeMedvirkningPath
- );
-
- await clickButton("Send");
-
- expect(await screen.findByText("Vennligst angi begrunnelse")).to.exist;
- });
-
- it("skal sende forhandsvarsel med riktige verdier", async () => {
- mockVurdering();
- renderManglendeMedvirkning(
- ,
- manglendeMedvirkningPath
+ it("viser forhandsvarsel-skjema etter klikk på ny vurdering-knapp når forrige vurdering OPPFYLT", async () => {
+ const oppfyltVurdering = createManglendeMedvirkningVurdering(
+ VurderingType.OPPFYLT
);
- const varselSvarfrist = addDays(new Date(), 1);
- const begrunnelse = "En begrunnelse";
-
- const begrunnelseInput = getTextInput("Begrunnelse (obligatorisk)");
- changeTextInput(begrunnelseInput, begrunnelse);
+ mockVurdering([oppfyltVurdering, defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
- await clickButton("Send");
+ await clickButton(nyVurderingButtonText);
- 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,
- });
- });
+ expect(screen.getByText("Send forhåndsvarsel")).to.exist;
+ expect(
+ screen.getByRole("textbox", {
+ name: "Begrunnelse (obligatorisk)",
+ })
+ ).to.exist;
+ expect(screen.getByRole("button", { name: "Send" })).to.exist;
+ expect(screen.getByRole("button", { name: "Forhåndsvisning" })).to.exist;
});
});
describe("ForhandsvarselSendt", () => {
- it("viser ForhandsvarselBeforeDeadline når svarfrist ikke utgått", () => {
- mockVurdering(defaultForhandsvarselVurdering);
+ it("viser ikke ny vurdering-knapp når forhåndsvarsel sendt", () => {
+ mockVurdering([defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
- renderManglendeMedvirkning(
- ,
- manglendeMedvirkningPath
- );
+ expect(screen.queryByRole("button", { name: nyVurderingButtonText })).to
+ .not.exist;
+ });
+ it("viser ForhandsvarselBeforeDeadline når svarfrist ikke utgått", () => {
+ mockVurdering([defaultForhandsvarselVurdering]);
+ renderManglendeMedvirkning();
expect(
screen.getByText(
@@ -172,12 +202,8 @@ describe("Manglendemedvirkning", () => {
svarfrist: svarfrist,
},
};
- mockVurdering(forhandsvarselAfterFrist);
-
- renderManglendeMedvirkning(
- ,
- manglendeMedvirkningPath
- );
+ mockVurdering([forhandsvarselAfterFrist]);
+ renderManglendeMedvirkning();
expect(screen.getByText("Fristen er gått ut")).to.exist;
expect(screen.getByText("Fristen var:")).to.exist;
diff --git a/test/manglendemedvirkning/manglendeMedvirkningTestData.ts b/test/manglendemedvirkning/manglendeMedvirkningTestData.ts
index e547887cf..b58cbc6a2 100644
--- a/test/manglendemedvirkning/manglendeMedvirkningTestData.ts
+++ b/test/manglendemedvirkning/manglendeMedvirkningTestData.ts
@@ -39,3 +39,16 @@ export const defaultForhandsvarselVurderingAfterDeadline: VurderingResponseDTO =
svarfrist: addDays(new Date(), -1),
},
};
+
+export const createManglendeMedvirkningVurdering = (
+ type: VurderingType
+): VurderingResponseDTO => ({
+ personident: ARBEIDSTAKER_DEFAULT.personIdent,
+ createdAt: new Date(),
+ vurderingType: type,
+ begrunnelse: "",
+ document: [],
+ uuid: generateUUID(),
+ varsel: null,
+ veilederident: VEILEDER_DEFAULT.ident,
+});