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

PEK-994: Hopp over AFP-steg ved 100% uføretrygd #1806

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cypress/e2e/pensjon/kalkulator/ufoeretrygd.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ describe('Med ufoeretrygd', () => {
{
...loependeVedtakMock,
ufoeretrygd: {
grad: 100,
grad: 90,
},
}
).as('getLoependeVedtak')
Expand Down Expand Up @@ -54,7 +54,7 @@ describe('Med ufoeretrygd', () => {
{
...loependeVedtakMock,
ufoeretrygd: {
grad: 100,
grad: 90,
},
}
).as('getLoependeVedtak')
Expand Down Expand Up @@ -200,7 +200,7 @@ describe('Med ufoeretrygd', () => {
{
...loependeVedtakMock,
ufoeretrygd: {
grad: 100,
grad: 90,
},
}
).as('getLoependeVedtak')
Expand Down
5 changes: 5 additions & 0 deletions cypress/support/e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ import 'cypress-axe'
import { userInputActions } from '../../src/state/userInput/userInputReducer'

beforeEach(() => {
cy.setCookie(
'navno-consent',
'{%22consent%22:{%22analytics%22:false%2C%22surveys%22:false}%2C%22userActionTaken%22:true%2C%22meta%22:{%22createdAt%22:%222025-02-17T09:17:38.688Z%22%2C%22updatedAt%22:%222025-02-17T09:17:38.688Z%22%2C%22version%22:1}}'
) // Skjuler cookiebanner (har ingenting å si for testene, er kun for å slippe å se det når tester lokalt)

cy.intercept(
{
method: 'GET',
Expand Down
15 changes: 12 additions & 3 deletions src/components/Grunnlag/GrunnlagAFP/GrunnlagAFP.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,20 +58,29 @@ export const GrunnlagAFP: React.FC<Props> = ({ goToStart }) => {
if (!harSamtykketOffentligAFP && !ufoeregrad && afp === 'ja_offentlig') {
return `${afpString} (${intl.formatMessage({ id: 'grunnlag.afp.ikke_beregnet' })})`
}

if (ufoeregrad === 100) {
return formatAfp(intl, 'nei')
}

return afpString
}, [afp])

const formatertAfpIngress = React.useMemo(() => {
if (isEndring && loependeVedtak.afpPrivat) {
return `grunnlag.afp.ingress.ja_privat.endring`
return 'grunnlag.afp.ingress.ja_privat.endring'
}

if (loependeVedtak.afpOffentlig) {
return `grunnlag.afp.ingress.ja_offentlig.endring`
return 'grunnlag.afp.ingress.ja_offentlig.endring'
}

if (isEndring && afp === 'nei') {
return `grunnlag.afp.ingress.nei.endring`
return 'grunnlag.afp.ingress.nei.endring'
}

if (ufoeregrad === 100) {
return 'grunnlag.afp.ingress.full_ufoeretrygd'
}

const afpString =
Expand Down
37 changes: 30 additions & 7 deletions src/components/Grunnlag/GrunnlagAFP/__tests__/GrunnlagAFP.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { add, endOfDay, format } from 'date-fns'
import { GrunnlagAFP } from '..'
import {
fulfilledGetLoependeVedtak0Ufoeregrad,
fulfilledGetLoependeVedtak100Ufoeregrad,
fulfilledGetLoependeVedtak75Ufoeregrad,
fulfilledGetLoependeVedtakLoepende50Alderspensjon,
fulfilledGetLoependeVedtakLoependeAFPoffentlig,
Expand Down Expand Up @@ -170,8 +171,8 @@ describe('Grunnlag - AFP', () => {
).toBeVisible()
})

describe('Gitt at brukeren har uføretrygd,', () => {
describe('Gitt at brukeren er eldre enn minimum uttaksalderen,', () => {
describe('Gitt at brukeren har gradert uføretrygd,', () => {
describe('Gitt at brukeren er eldre enn AFP-Uføre oppsigelsesalder,', () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -63,
months: -1,
Expand All @@ -194,8 +195,8 @@ describe('Grunnlag - AFP', () => {
},
}

it('Når hen er yngre enn 62 år, returneres null', async () => {
render(<GrunnlagAFP goToStart={vi.fn()} />, {
it('returneres null', async () => {
const { asFragment } = render(<GrunnlagAFP goToStart={vi.fn()} />, {
preloadedState: {
api: {
// @ts-ignore
Expand All @@ -207,12 +208,11 @@ describe('Grunnlag - AFP', () => {
},
},
})

expect(screen.queryByText('grunnlag.afp.title')).toBeNull()
expect(asFragment()).toMatchInlineSnapshot('<DocumentFragment />')
})
})

describe('Gitt at brukeren er yngre enn minimum uttaksalderen,', () => {
describe('Gitt at brukeren er yngre enn AFP-Uføre oppsigelsesalder,', () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -61,
months: -11,
Expand Down Expand Up @@ -328,6 +328,29 @@ describe('Grunnlag - AFP', () => {
})
})

describe('Gitt at brukeren har 100% uføretrygd,', () => {
it('Viser riktig tittel og tekst', () => {
render(<GrunnlagAFP goToStart={vi.fn()} />, {
preloadedState: {
api: {
// @ts-ignore
queries: { ...fulfilledGetLoependeVedtak100Ufoeregrad },
},
userInput: { ...userInputInitialState },
},
})

expect(screen.getByText('grunnlag.afp.title')).toBeVisible()
expect(screen.getByText('afp.nei')).toBeVisible()
expect(
screen.getByText(
'For å ha rett til AFP, må du være ansatt i offentlig sektor eller i en bedrift med AFP-ordning i privat sektor. Det gjelder de siste årene og helt fram til du tar ut AFP. Hvis du mottar full uføretrygd, har du derfor normalt ikke rett til AFP.',
{ exact: false }
)
).toBeInTheDocument()
})
})

describe('Gitt at brukeren har vedtak om alderspensjon,', () => {
it('Når hen har valgt AFP privat, viser riktig tittel med formatert inntekt og tekst', async () => {
const user = userEvent.setup()
Expand Down
132 changes: 37 additions & 95 deletions src/router/__tests__/loaders.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
fulfilledGetLoependeVedtak75Ufoeregrad,
fulfilledGetLoependeVedtakLoependeAFPprivat,
fulfilledGetLoependeVedtakLoependeAFPoffentlig,
fulfilledGetLoependeVedtak100Ufoeregrad,
} from '@/mocks/mockedRTKQueryApiCalls'
import { mockErrorResponse, mockResponse } from '@/mocks/server'
import { externalUrls, henvisningUrlParams, paths } from '@/router/constants'
Expand Down Expand Up @@ -436,7 +437,6 @@ describe('Loaders', () => {
})

const returnedFromLoader = await stepSivilstandAccessGuard()
console.log(returnedFromLoader)
const person = await (
returnedFromLoader as StepSivilstandAccessGuardLoader
).getPersonQuery
Expand Down Expand Up @@ -584,7 +584,7 @@ describe('Loaders', () => {
expect(shouldRedirectToResponse).toBe('')
})

it('brukere med uføretrygd som ikke er fylt minimum uttaksalder, er ikke redirigert', async () => {
it('brukere med gradert uføretrygd som er yngre enn AFP-Uføre oppsigelsesalder, er ikke redirigert', async () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -61,
months: -11,
Expand Down Expand Up @@ -622,7 +622,7 @@ describe('Loaders', () => {
expect(shouldRedirectToResponse).toBe('')
})

it('brukere med uføretrygd som er fylt minimum uttaksalder, er redirigert', async () => {
it('brukere med gradert uføretrygd som er eldre enn AFP-Uføre oppsigelsesalder, er redirigert', async () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -62,
})
Expand Down Expand Up @@ -700,6 +700,25 @@ describe('Loaders', () => {
).shouldRedirectTo
expect(shouldRedirectToResponse).toBe(paths.ufoeretrygdAFP)
})

it('brukere med 100% uføretrygd er redirigert', async () => {
const mockedState = {
api: {
queries: {
...mockedVellykketQueries,
...fulfilledGetLoependeVedtak100Ufoeregrad,
...fulfilledGetPerson,
},
},
userInput: { ...userInputInitialState },
}
store.getState = vi.fn().mockImplementation(() => mockedState)
const returnedFromLoader = await stepAFPAccessGuard()
const shouldRedirectToResponse =
'shouldRedirectTo' in returnedFromLoader &&
(await returnedFromLoader.shouldRedirectTo)
expect(shouldRedirectToResponse).toBe(paths.ufoeretrygdAFP)
})
})

it('Gitt at getInntekt har tidligere feilet kalles den på nytt. Når den er vellykket i tillegg til de to andre kallene, er brukeren ikke redirigert', async () => {
Expand Down Expand Up @@ -1053,63 +1072,27 @@ describe('Loaders', () => {
})

describe('Gitt at brukeren har uføretrygd, ', () => {
it('Når hen har svart ja til spørsmål om afp og er ikke fylt minimum uttaksalder, er hen ikke redirigert', async () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -61,
months: -11,
})
const foedselsdato = format(minAlderYearsBeforeNow, DATE_BACKEND_FORMAT)

it('Når hen har svart ja til spørsmål om afp, er hen ikke redirigert', async () => {
const mockedState = {
api: {
queries: {
['getPerson(undefined)']: {
status: 'fulfilled',
endpointName: 'getPerson',
requestId: 'xTaE6mOydr5ZI75UXq4Wi',
startedTimeStamp: 1688046411971,
data: {
navn: 'Aprikos',
sivilstand: 'UGIFT',
foedselsdato,
},
fulfilledTimeStamp: 1688046412103,
},
...fulfilledGetPerson,
...fulfilledGetLoependeVedtak75Ufoeregrad,
},
},
userInput: { ...userInputInitialState, afp: 'ja_privat' },
}
store.getState = vi.fn().mockImplementation(() => {
return mockedState
})
store.getState = vi.fn().mockImplementation(() => mockedState)

const returnedFromLoader = await stepUfoeretrygdAFPAccessGuard()
expect(returnedFromLoader).toBeNull()
})

it('Når hen har svart nei til spørsmål om afp og er ikke fylt minimum uttaksalder, er hen ikke redirigert', async () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -61,
months: -11,
})
const foedselsdato = format(minAlderYearsBeforeNow, DATE_BACKEND_FORMAT)

it('Når hen har svart nei til spørsmål om afp, er hen redirigert', async () => {
const mockedState = {
api: {
queries: {
['getPerson(undefined)']: {
status: 'fulfilled',
endpointName: 'getPerson',
requestId: 'xTaE6mOydr5ZI75UXq4Wi',
startedTimeStamp: 1688046411971,
data: {
navn: 'Aprikos',
sivilstand: 'UGIFT',
foedselsdato,
},
fulfilledTimeStamp: 1688046412103,
},
...fulfilledGetPerson,
...fulfilledGetLoependeVedtak75Ufoeregrad,
},
},
Expand All @@ -1120,68 +1103,27 @@ describe('Loaders', () => {
})

const returnedFromLoader = await stepUfoeretrygdAFPAccessGuard()
expect(returnedFromLoader).not.toBeNull()
expect(returnedFromLoader?.headers.get('location')).toBe(
'/samtykke-offentlig-afp'
)
})

it('Når hen er fylt minimum uttaksalder, er hen redirigert', async () => {
const minAlderYearsBeforeNow = add(endOfDay(new Date()), {
years: -62,
})
const foedselsdato = format(minAlderYearsBeforeNow, DATE_BACKEND_FORMAT)

it('Når hen ikke har fått afp-steget (og dermed ikke har svart på spørsmål om afp), er hen redirigert', async () => {
const mockedState = {
api: {
queries: {
['getPerson(undefined)']: {
status: 'fulfilled',
endpointName: 'getPerson',
requestId: 'xTaE6mOydr5ZI75UXq4Wi',
startedTimeStamp: 1688046411971,
data: {
navn: 'Aprikos',
sivilstand: 'UGIFT',
foedselsdato,
},
fulfilledTimeStamp: 1688046412103,
},
...fulfilledGetPerson,
...fulfilledGetLoependeVedtak75Ufoeregrad,
},
},
userInput: { ...userInputInitialState, afp: 'nei' },
userInput: { ...userInputInitialState, afp: null },
}
store.getState = vi.fn().mockImplementation(() => {
return mockedState
})
store.getState = vi.fn().mockImplementation(() => mockedState)

const returnedFromLoader = await stepUfoeretrygdAFPAccessGuard()
expect(returnedFromLoader).not.toBeNull()
expect(returnedFromLoader).toMatchInlineSnapshot(`
Response {
Symbol(state): {
"aborted": false,
"cacheState": "",
"headersList": HeadersList {
"cookies": null,
Symbol(headers map): Map {
"location" => {
"name": "location",
"value": "/samtykke-offentlig-afp",
},
},
Symbol(headers map sorted): null,
},
"rangeRequested": false,
"requestIncludesCredentials": false,
"status": 302,
"statusText": "",
"timingAllowPassed": false,
"timingInfo": null,
"type": "default",
"urlList": [],
},
Symbol(headers): Headers {},
}
`)
expect(returnedFromLoader?.headers.get('location')).toBe(
'/samtykke-offentlig-afp'
)
})
})
})
Expand Down
5 changes: 1 addition & 4 deletions src/router/__tests__/routes.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -545,16 +545,13 @@ describe('routes', () => {
...fulfilledGetLoependeVedtak75Ufoeregrad,
},
},
userInput: { ...userInputInitialState },
userInput: { ...userInputInitialState, afp: 'ja_offentlig' },
}))
const router = createMemoryRouter(routes, {
basename: BASE_PATH,
initialEntries: [`${BASE_PATH}${paths.ufoeretrygdAFP}`],
})
render(<RouterProvider router={router} />, {
preloadedState: {
userInput: { ...userInputInitialState, afp: 'ja_offentlig' },
},
hasRouter: false,
})
expect(
Expand Down
1 change: 1 addition & 0 deletions src/router/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const externalUrls = {
trygdetid:
'https://www.nav.no/no/person/flere-tema/arbeid-og-opphold-i-norge/relatert-informasjon/medlemskap-i-folketrygden',
kortBotid: 'https://www.nav.no/alderspensjon#kort-botid',
ufoeretrygdOgAfp: 'https://www.nav.no/ufor-til-pensjon#afp',
byttBruker: import.meta.env.VITE_BYTT_BRUKER_URL,
personopplysninger:
'https://www.nav.no/personopplysninger-i-pensjonskalkulator',
Expand Down
Loading