Skip to content
Open
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
30 changes: 30 additions & 0 deletions __tests__/schema/valideringDelvisInnsendingSchema.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,5 +164,35 @@ describe.concurrent('valideringDelvisInnsendingSchema', () => {
expect(result.error.issues[0].path).toEqual(['refusjon', 'refusjonPrMnd']);
});

it('should return OK if kreverRefusjon is Ja and refusjonPrMnd higher than inntekt, and inntekt is 0', () => {
const invalidInput = {
inntekt: {
endringBruttoloenn: 'Ja',
beloep: 0,
endringAarsak: { aarsak: 'Feilregistrert' }
},
telefon: '+4712345678',
opplysningerBekreftet: true,
refusjon: {
erDetEndringRefusjon: 'Ja',
kreverRefusjon: 'Ja',
harEndringer: 'Ja',
refusjonPrMnd: 4000,
refusjonEndringer: [
{
beloep: 2000,
dato: new Date('2022-01-01')
}
],
kravetOpphoerer: 'Ja',
refusjonOpphoerer: new Date('2022-12-31')
}
};

const result = valideringDelvisInnsendingSchema.safeParse(invalidInput);

expect(result.success).toBe(true);
});

// Add more test cases as needed
});
106 changes: 106 additions & 0 deletions cypress/e2e/delvis-ingen-inntekt.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/// <reference types="cypress" />

describe('Delvis skjema - Endre inntekt til 0', () => {
beforeEach(() => {
// Cypress starts out with a blank slate for each test
// so we must tell it to visit our website with the `cy.visit()` command.
// Since we want to visit the same URL at the start of all our tests,
// we include it in our beforeEach function so that it runs before each test
// const now = new Date(2021, 3, 14); // month is 0-indexed
// cy.clock(now);
// cy.visit('http://localhost:3000/im-dialog/12345678-3456-5678-2457-123456789012');
// cy.intercept('/im-dialog/api/hent-forespoersel', { fixture: '../../mockdata/trenger-delvis.json' }).as('hent-forespoersel');
cy.intercept('/im-dialog/api/hentKvittering/12345678-3456-5678-2457-123456789012', {
statusCode: 404,
body: {
name: 'Nothing'
}
}).as('kvittering');
});

it('Changes and submit', () => {
cy.visit('http://localhost:3000/im-dialog/12345678-3456-5678-2457-123456789012');
cy.intercept('/im-dialog/api/hent-forespoersel', { fixture: '../../mockdata/trenger-delvis.json' }).as(
'hent-forespoersel'
);
cy.intercept('/im-dialog/api/innsendingInntektsmelding', {
statusCode: 201,
body: {
name: 'Nothing'
}
}).as('innsendingInntektsmelding');

cy.wait('@hent-forespoersel');

cy.location('pathname').should('equal', '/im-dialog/endring/12345678-3456-5678-2457-123456789012');

cy.findByRole('group', {
name: 'Har det vært endringer i beregnet månedslønn for den ansatte mellom 02.01.2023 og 25.02.2023 (start av nytt sykefravær)?'
})
.findByLabelText('Ja')
.check();

cy.findByLabelText('Månedsinntekt 25.02.2023').invoke('val').should('equal', '46000');
cy.findByLabelText('Månedsinntekt 25.02.2023').clear().type('0');

cy.findByRole('group', {
name: 'Er det endringer i refusjonskravet etter 25.02.2023 (start av nytt sykefravær)?'
})
.findByLabelText('Ja')
.check();

cy.findByLabelText('Telefon innsender').type('12345678');

cy.findByLabelText('Jeg bekrefter at opplysningene jeg har gitt, er riktige og fullstendige.').check();

cy.findByRole('button', { name: 'Send' }).click();

cy.findAllByText('Vennligst angi årsak for endringen.').should('be.visible');
cy.findAllByLabelText('Velg endringsårsak').select('Mangelfull eller uriktig rapportering til a-ordningen');

cy.findByRole('group', { name: 'Betaler arbeidsgiver lønn og krever refusjon etter arbeidsgiverperioden?' })
.findByLabelText('Ja')
.check();

cy.findByRole('group', { name: 'Opphører refusjonkravet i perioden?' }).findByLabelText('Nei').check();

cy.findByRole('button', { name: 'Send' }).click();

cy.wait('@innsendingInntektsmelding')
.its('request.body')
.should('deep.equal', {
forespoerselId: '12345678-3456-5678-2457-123456789012',
agp: null,
inntekt: {
beloep: 0,
inntektsdato: '2023-02-25',
naturalytelser: [],
endringAarsak: { aarsak: 'Feilregistrert' }
},
refusjon: {
beloepPerMaaned: 46000,
sluttdato: null,
endringer: [
{
beloep: 0,
startdato: '2023-09-30'
}
]
},
avsenderTlf: '12345678'
});

cy.location('pathname').should('equal', '/im-dialog/kvittering/12345678-3456-5678-2457-123456789012');
cy.findAllByText('Kvittering - innsendt inntektsmelding').should('be.visible');

cy.findByText('12345678').should('be.visible');
cy.findByText(/Mangelfull eller uriktig rapportering til a-ordningen/).should('be.visible');
cy.findAllByText(/0,00\s?kr\/måned/).should('be.visible');
cy.findByText(/46\s?000,00\s?kr\/måned/).should('be.visible');
cy.findAllByText('24.01.2023').should('not.exist');

cy.get('[data-cy="bestemmendefravaersdag"]')
.invoke('text')
.should('match', /25.02.2023/);
});
});
2 changes: 1 addition & 1 deletion pages/endring/[slug].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ const Endring: NextPage<InferGetServerSidePropsType<typeof getServerSideProps>>
const submitForm: SubmitHandler<Skjema> = (skjemaData: Skjema) => {
setSenderInn(true);

if (skjemaData.inntekt.beloep) {
if (skjemaData.inntekt.beloep !== undefined) {
setBareNyMaanedsinntekt(skjemaData.inntekt.beloep.toString());
}

Expand Down
18 changes: 17 additions & 1 deletion schema/valideringDelvisInnsendingSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,27 @@ export default z
});
}

if ((value.inntekt.beloep ?? 0) < (value.refusjon.refusjonPrMnd ?? 0)) {
if (
(value.inntekt.beloep ?? 0) < (value.refusjon.refusjonPrMnd ?? 0) &&
value.inntekt.beloep !== undefined &&
value.inntekt.beloep !== 0
) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: 'Refusjon kan ikke være høyere enn brutto lønn.',
path: ['refusjon', 'refusjonPrMnd']
});
}

if (value.refusjon.harEndringer === 'Ja') {
value.refusjon.refusjonEndringer?.map((endring, index) => {
if ((endring.beloep ?? 0) > (value.inntekt?.beloep ?? 0) && value.inntekt.beloep !== 0) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: 'Refusjon kan ikke være høyere enn brutto lønn.',
path: ['refusjon', 'refusjonEndringer', index, 'beloep']
});
}
});
}
});
51 changes: 30 additions & 21 deletions utils/mapErrorsObjectToFeilmeldinger.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,39 @@
import isObject from './isObject';

export default function mapErrorsObjectToFeilmeldinger(errors) {
const mapErrorsObject = (errors: any, subKey = ''): any[] => {
return Object.keys(errors).flatMap((key) => {
if (typeof errors[key] === 'string') {
if (isObject(errors)) {
return Object.keys(errors).flatMap((key) => {
if (typeof errors[key] === 'string') {
return {
key: subKey ? `${subKey}.${key}` : key,
message: errors[key]
};
}

if (!errors[key]?.message) {
return mapErrorsObject(errors[key], subKey ? `${subKey}.${key}` : key);
}

return {
key: subKey ? `${subKey}.${key}` : key,
message: errors[key]
message: errors[key]?.message
};
}

if (!errors[key].message) {
return mapErrorsObject(errors[key], subKey ? `${subKey}.${key}` : key);
}

return {
key: subKey ? `${subKey}.${key}` : key,
message: errors[key].message
};
});
});
}
};
const errorsMapped = mapErrorsObject(errors);

const feilmeldinger = errorsMapped.map((error) => {
return {
felt: error.key,
text: error.message
};
});
return feilmeldinger;
let feilmeldinger = [];
if (Array.isArray(errorsMapped)) {
feilmeldinger = errorsMapped.map((error) => {
if (error) {
return {
felt: error.key,
text: error.message
};
}
});
}
return feilmeldinger.filter((melding) => !!melding);
}
Loading