Skip to content

Commit

Permalink
Migrere playwright til verdikjede (#2501)
Browse files Browse the repository at this point in the history
* flytter tester til e2e

* sletter playwright config

* fjerne fra workflows også. #2497 trigger samme tester i verdikjede

* fikser tester

* oppdatere readme

* reservere og gå til k9-sak-web

* tester for reservasjoner

* reservasjoner

* reservasjoner avdelingsleder

* skipper alt med reservasjoner til vi har deploy med issues eller prodsatt ny los

* variabel for saksnummer

* Update README.md

* fjerne ubrukt import
  • Loading branch information
vebnor committed Jan 26, 2024
1 parent aa913d8 commit 2f6f4cb
Show file tree
Hide file tree
Showing 11 changed files with 307 additions and 186 deletions.
19 changes: 6 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,15 @@ Før du kjører `yarn install`, sett opp lokal NPM for autentisering mot GitHub
```

1. Kjør opp docker-containerene i verdikjede (https://github.com/navikt/k9-verdikjede)
2. Start k9-los-api (https://github.com/navikt/k9-los-api) lokalt.
Start klassen no.nav.k9.K9LosDev med vm-options under. Bytt ut path til riktig for trustStore og keyStore.
Eksempel fra Windows miljø

1. Kjør opp docker-containerene i verdikjede (https://github.com/navikt/k9-verdikjede)
```
-Djavax.net.ssl.trustStore=/Users/specifik_users_name/.modig/trustStore.jks -Djavax.net.ssl.keyStore=/Users/specifik_users_name/.modig/keyStore.jks -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStorePassword=devillokeystore1234
docker-compose up -d k9-los
```

4. Kjør opp k9-los-web lokalt med yarn dev
5. Opprett ønsket kø i avdelingslederpanelet og legg til saksbehandler i køen
6. Kjør tester i verdikjede for å opprette saker. Man kan slette deler av testene for å få behandlinger som ikke er ferdigstilt.
2. Kjør opp k9-los-web lokalt med yarn dev
3. Opprett ønsket kø i avdelingslederpanelet og legg til saksbehandler i køen
4. Kjør tester i verdikjede for å opprette saker. Man kan slette deler av testene for å få behandlinger som ikke er ferdigstilt.
Les dokumentasjon i https://github.com/navikt/k9-verdikjede for å kjøre tester.
7. Det KAN hende localhost:8020/mock kan brukes for å opprette oppgaver i LOS.
5. Det KAN hende localhost:8020/mock kan brukes for å opprette oppgaver i LOS.
Vedlikehold av denne mocken er ikke prioritert og den kan derfor være utdatert og ustabil.

Nå kan du søke opp saksnummeret eller søkeren i k9-los-web. Dersom oppgaven matcher kriteriene i en av dine køer vil den også dukke opp i listen over oppgaver.
Expand Down
22 changes: 22 additions & 0 deletions e2e/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Workspace for e2e-tester for k9-los-web med Playwright.

# Komme i gang

1. For å kunne kjøre testene i dette prosjektet må saksbehandlingsstacken kjøre lokalt (se [utvikleroppsett for k9-verdikjede](https://github.com/navikt/k9-verdikjede/tree/master/docs/utvikleroppsett)).
2. Kjør opp docker-containerene i verdikjede (https://github.com/navikt/k9-verdikjede)

Kjør opp verdikjeden inkl k9-los-web.

```
docker-compose up -d k9-los-web
```

Dersom du vil kjøre frontend lokalt selv kan du skrive følgende.

```
docker-compose up -d k9-los
```

Se README.md i root for mer info angående kjøring av k9-sak-web utenfor docker

3. yarn test:e2e i /e2e for å kjøre testene
6 changes: 3 additions & 3 deletions e2e/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ export default defineConfig({
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
retries: 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
workers: 1,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'line',
use: {
video: 'on',
video: 'retain-on-failure',
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: 'http://127.0.0.1:8030',

Expand Down
128 changes: 125 additions & 3 deletions e2e/tests/ny-behandlingsko.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { test } from '@playwright/test';
import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
test.beforeEach(async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Avdelingslederpanel' }).click();
await page.getByRole('link', { name: 'Nye behandlingskøer' }).click();
});
test('Kan lage ny behandlingskø', async ({ page }) => {
await page.getByRole('button', { name: 'Legg til ny behandlingskø' }).click();
await page.getByLabel('Kønavn').fill('testkø');
await page.getByLabel('Kønavn').fill('Beskrivende tittel');
await page.getByLabel('Kønavn').press('Enter');
await page.getByLabel('Velg saksbehandlere').click();
await page.getByLabel('Velg saksbehandlere').fill('saks');
Expand All @@ -17,3 +19,123 @@ test('has title', async ({ page }) => {
await page.getByTestId('lagre-button-modal').click();
await page.getByRole('button', { name: 'Lukk' }).click();
});

test('kan redigere kø', async ({ page }) => {
await page.getByRole('cell', { name: 'Beskrivende tittel' }).isVisible();

await page
.getByRole('row', { name: /Beskrivende tittel/i })
.getByRole('button', { name: 'Vis mer' })
.click();

await page.getByLabel('Beskrivelse').fill('');
// trykk lagre og se at det kommer opp feilmelding
await page.getByRole('button', { name: 'Lagre behandlingskø' }).click();
page.getByText('Feltet er påkrevd');

await page
.getByLabel('Beskrivelse')
.fill(
'En kø i et saksbehandlingssystem for pleiepenger er en samling av ting som folk' +
'\nhar sendt inn, og de er lagt i en lang rekkefølge. De venter på å bli sett på av' +
'\nnoen som jobber der. Noen av tingene blir godkjent, og noen blir ikke godkjent.' +
'\nDette skjer i et dataprogram som hjelper folk å holde styr på alt.',
);

await page.getByRole('button', { name: 'Lagre behandlingskø' }).isEnabled();
await page.getByRole('button', { name: 'Lagre behandlingskø' }).click();
await page.getByTestId('lagre-button-modal').click();

await page.getByRole('button', { name: 'Endre kriterier' }).click();

// Legg til Duration
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__akkumulertVentetidAnnet');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByPlaceholder('Antall dager').fill('3');

// Legg til duration
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__registrertDato');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.locator('#registrertDato-operator').selectOption('INTERVAL');
await page.getByLabel('Fra').fill('01.01.2024');
await page.getByLabel('Til', { exact: true }).fill('06.01.2024');

// Legg til aksjonspunkt
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__løsbartAksjonspunkt');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByLabel('Løsbart aksjonspunkt').click();
await page.getByText('Beregning').click();
await page.getByRole('button', { name: 'Legg til løsbart aksjonspunkt' }).click();
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__behandlingTypekode');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByLabel('Behandlingstype').click();
await page.getByText('Førstegangsbehandling').click();
await page.getByRole('option', { name: 'Innsyn' }).click();
await page.getByText('Inntektsmeldinger uten søknad').click();
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();

// Legg til boolean
await page.getByLabel('Velg kriterie:').selectOption('K9__nyeKrav');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByLabel('Ja', { exact: true }).check();

// Legg til anvarlig saksbehandler
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByText('Avanserte valg').click();
await page.getByLabel('Velg kriterie:').selectOption('K9__ansvarligSaksbehandler');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByLabel('Skriv fritekst').click();
await page.getByLabel('Skriv fritekst').fill('M13337');

// Lagre
await page.getByRole('button', { name: 'Lagre', exact: true }).click();
await page.getByRole('button', { name: 'Lagre behandlingskø' }).click();
await page.getByText('Er du sikker på at du ønsker å lagre behandlingskøen?').isVisible();
await page.getByTestId('lagre-button-modal').click();
page.getByText('Køen er nå lagret!');
await page.getByRole('button', { name: 'Lukk' }).click();
});

test('tidligere lagret kø vises korrekt', async ({ page }) => {
await page.getByRole('row', { name: 'Beskrivende tittel' }).getByRole('button', { name: 'Vis mer' }).click();
await page.getByRole('button', { name: 'Endre kriterier' }).click();

// Timestamp
page.getByText('01.06.2023').isVisible();

// Duration settes
await expect(page.getByLabel('Antall dager')).toHaveValue('3');

// aksjonspunkter settes
await page.getByRole('button', { name: '5038 - Fastsett beregningsgrunnlag' }).isVisible();
await page.getByRole('button', { name: '5039 - Ny/endret SN (varig endring)' }).isVisible();
await page.getByRole('button', { name: '5046 - Fordel beregningsgrunnlag' }).isVisible();
await page.getByRole('button', { name: '5047 - Tidsbegrenset arbeidsforhold' }).isVisible();
await page.getByRole('button', { name: '5049 - Ny/endret SN (ny i arb.livet)' }).isVisible();
await page.getByRole('button', { name: '5052 - Aktiviteter' }).isVisible();
await page.getByRole('button', { name: '5058 - Beregningsfakta' }).isVisible();
await page.getByRole('button', { name: '5084 - Feilutbetaling' }).isVisible();
await page.getByRole('button', { name: '6014 - Overstyring beregningsaktivitet' }).isVisible();
await page.getByRole('button', { name: '6015 - Overstyring beregningsgrunnlag' }).isVisible();
// Predefinerte verdier settes
await page.getByRole('button', { name: 'Førstegangsbehandling' }).isVisible();
await page.getByRole('button', { name: 'Innsyn' }).isVisible();

// boolean settes
await expect(page.getByLabel('Ja', { exact: true })).toBeChecked(); // See if ja is checked

// fritekst settes
await expect(page.getByLabel('Skriv fritekst')).toHaveValue('M13337');
});

test('kan slette kø', async ({ page }) => {
await page.getByRole('row', { name: 'Beskrivende tittel' }).getByRole('button', { name: 'Slett' }).click();
await page.getByText('Er du sikker på at du vil slette Beskrivende tittel?').isVisible();
await page.getByRole('dialog').getByRole('button', { name: 'Slett' }).click();
// assert at køen er borte
await expect(page.getByRole('row', { name: 'Beskrivende tittel' })).not.toBeVisible();
});
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { test } from '@playwright/test';

test.beforeEach(async ({ page }) => {
await page.goto('http://localhost:8030/filter');
await page.goto('/filter');
});

test('kan legge til aksjonspunkt', async ({ page }) => {
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__aktivtAksjonspunkt');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByLabel('Aktivt aksjonspunkt').click();
await page.getByLabel('Løsbare og fremtidige aksjonspunkt').click();
await page.getByLabel('Beregning').check();
await page.getByRole('button', { name: 'Legg til aktivt aksjonspunkt' }).click();
await page.getByRole('button', { name: 'Legg til løsbare og fremtidige aksjonspunkt' }).click();
await page.getByRole('button', { name: 'Fjern alle' }).click();
});

Expand Down Expand Up @@ -47,7 +47,7 @@ test('can add date values', async ({ page }) => {

test('kan legge til verdier med tall', async ({ page }) => {
await page.getByRole('button', { name: 'Legg til nytt kriterie' }).click();
await page.getByLabel('Velg kriterie:').selectOption('K9__akkumulertVentetidSaksbehandlerForTidligereVersjoner');
await page.getByLabel('Velg kriterie:').selectOption('K9__akkumulertVentetidTekniskFeil');
await page.getByRole('button', { name: 'Legg til', exact: true }).click();
await page.getByPlaceholder('Antall dager').click();
await page.getByPlaceholder('Antall dager').fill('10');
Expand Down
145 changes: 145 additions & 0 deletions e2e/tests/reservasjoner.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import { test, expect } from '@playwright/test';

const lagNyBehandlingskø = async (page: any, kønavn: string) => {
await page.goto('/');
await page.getByRole('button', { name: 'Avdelingslederpanel' }).click();
await page.getByRole('link', { name: 'Nye behandlingskøer' }).click();
await page.getByRole('button', { name: 'Legg til ny behandlingskø' }).click();
await page.getByLabel('Kønavn').fill(kønavn);
await page.getByLabel('Kønavn').press('Enter');
await page.getByLabel('Velg saksbehandlere').click();
await page.getByLabel('Velg saksbehandlere').fill('saks');
await page.getByLabel('Saksbehandler Sara').click();
await page.getByRole('button', { name: 'Legg til saksbehandlere' }).click();
await page.getByLabel('Beskrivelse').click();
await page.getByLabel('Beskrivelse').fill('aisjdfiasjdfiasdfjasidfj');
await page.getByRole('button', { name: 'Lagre behandlingskø' }).click();
await page.getByTestId('lagre-button-modal').click();
await page.getByRole('button', { name: 'Lukk' }).click();
};

function formatDate(date: Date): string {
return `${String(date.getDate()).padStart(2, '0')}.${String(date.getMonth() + 1).padStart(
2,
'0',
)}.${date.getFullYear()}`;
}

const saksnummer = process.env.SAKSNUMMER as string;

test.beforeEach(async ({ page }) => {
await page.goto('/');
});

test('Kan søke opp og reservere opppgave', async ({ page }) => {
const searchInput = page.getByLabel('Saksnummer, fødselsnummer/D-nummer eller journalpostID');
await searchInput.click();
await searchInput.fill(saksnummer);

const searchButton = page.getByRole('button', { name: 'Søk' });
await expect(searchButton).toBeEnabled();
await searchButton.click();

await page.waitForResponse((response) => response.url().includes('/api/fagsak/sok') && response.status() === 200);

const searchResult = page.getByRole('cell', { name: saksnummer });
await expect(searchResult).toBeVisible();
await searchResult.click();

expect(page.getByText('Ønsker du å reservere behandlingen?')).toBeVisible();
await page.getByRole('button', { name: 'Ja' }).click();

await page.waitForResponse(
(response) => response.url().includes('/api/saksbehandler/oppgaver/reserver') && response.status() === 200,
);
});

test.skip('kan legge tilbake reservasjon i felles kø', async ({ page }) => {
await expect(page.getByRole('cell', { name: saksnummer })).toBeVisible();
await page.getByRole('img', { name: 'Handlinger på oppgave' }).click();
await page.getByRole('button', { name: 'Legg behandling tilbake i felles kø' }).click();
await page.getByLabel('Når en reservert sak frigjøres er begrunnelse obligatorisk').fill('Dette er en god grunn');
await page.getByRole('button', { name: 'OK' }).click();

await expect(page.getByRole('cell', { name: saksnummer })).not.toBeVisible();
});

test.skip('kan plukke oppgave fra kø og reservere', async ({ page }) => {
const kønavn = 'bra kø';
await lagNyBehandlingskø(page, kønavn);
await page.goto('/');
await page.getByLabel('Velg behandlingskø').selectOption(kønavn);
await page.getByRole('button', { name: 'Gi meg neste behandling' }).click();
await page.waitForResponse(
(response) => response.url().includes('/api/saksbehandler/oppgaver/reserver') && response.status() === 200,
);
});

test.skip('kan forlenge reservasjon', async ({ page }) => {
await page.getByRole('row', { name: saksnummer }).getByRole('img', { name: 'Handlinger på oppgave' }).click();
const today = new Date();
const todayFormatted = formatDate(today);

await page.getByRole('cell', { name: `Reservert til ${todayFormatted}` }).isVisible();
await page.getByRole('button', { name: 'Forleng din reservasjon av behandlingen med 24 timer' }).click();

const tomorrow = formatDate(new Date(today.getDate() + 1));
await page.getByRole('cell', { name: `Reservert til ${tomorrow}` }).isVisible();
});

test.skip('kan endre/og flytte reservasjon reservasjon', async ({ page }) => {
await page.getByRole('row', { name: saksnummer }).getByRole('img').click();
await page.getByRole('button', { name: 'Endre og/eller flytte' }).click();
await page.getByLabel('Saksbehandlers navn').click();
await page.getByLabel('Saksbehandlers navn').fill('Sara');
await page.getByLabel('Endre og/eller flytte').getByRole('button', { name: 'Søk' }).click();
// Get a date one week from now
const date = new Date();
date.setDate(date.getDate() + 7);

// Format the date as dd.mm.yyyy
const oneWeekFromNow = formatDate(date);
// fill with date one week in the future dd.mm.yyyy this format
await page.getByLabel(/^Velg dato som reservasjonen avsluttes \(Valgfritt å fylle ut\)$/).fill(oneWeekFromNow);
await page.getByLabel('Begrunn endring av reservasjon').click();
await page
.getByLabel('Begrunn endring av reservasjon')
.fill('jeg ønsker å ha denne oppgaven liggende på min benk skikkelig lenge ');
await page.getByRole('button', { name: 'OK' }).click();
await page.getByRole('cell', { name: `Reservert til ${oneWeekFromNow}` }).isVisible();
});
test.skip('kan endre reservasjon som avdelingsleder', async ({ page }) => {
await page.goto('/avdelingsleder');
await page.getByRole('link', { name: 'Reservasjoner' }).click();
await page.getByRole('row', { name: saksnummer }).getByRole('cell').nth(4).click();
await page.getByRole('button', { name: 'Flytt reservasjonen til annen saksbehandler' }).click();
await page.getByLabel('Saksbehandlers navn').click();
await page.getByLabel('Saksbehandlers navn').fill('Sara');
await page.getByLabel('Endre og/eller flytte').getByRole('button', { name: 'Søk' }).click();
// Get a date two weeks from now
const date = new Date();
date.setDate(date.getDate() + 14);

const twoWeeksFromNow = formatDate(date);
await page.getByLabel(/^Velg dato som reservasjonen avsluttes \(Valgfritt å fylle ut\)$/).fill(twoWeeksFromNow);
await page.getByLabel('Begrunn endring av reservasjon').click();
await page
.getByLabel('Begrunn endring av reservasjon')
.fill('jeg ønsker å ha denne oppgaven liggende på min benk skikkelig lenge ');
await page.getByRole('button', { name: 'OK' }).click();
await page.getByRole('cell', { name: `Reservert til ${twoWeeksFromNow}` }).isVisible();
});

test.skip('kan fjerne reservasjon som avdelingsleder', async ({ page }) => {
await page.goto('/avdelingsleder');
await page.getByRole('link', { name: 'Reservasjoner' }).click();
await page.getByRole('row', { name: saksnummer }).getByRole('cell').nth(4).click();
await page.getByRole('button', { name: 'Legg behandling tilbake i felles kø' }).click();
await page.getByLabel('Når en reservert sak frigjøres er begrunnelse obligatorisk').fill('Dette er en god grunn');
await page.getByRole('button', { name: 'OK' }).click();

await page.waitForResponse(
(response) => response.url().includes('/api/saksbehandler/oppgaver/opphev') && response.status() === 200,
);
expect(page.getByRole('row', { name: saksnummer })).not.toBeVisible();
});
Loading

0 comments on commit 2f6f4cb

Please sign in to comment.