Skip to content

Commit 3ced6a7

Browse files
authored
Kjør Playwright med og uten produksjonsbygg (#3006)
* Oppdater package-lock.json * Kjør Playwright med og uten produksjonsbygg * Fjern URL og port fra Playwright baseUrl * Disable Flexjar Sendt Tilbakemelding til annen lagring er ferdig * Oppdatert Playwright config
1 parent d391d71 commit 3ced6a7

27 files changed

Lines changed: 241 additions & 210 deletions

‎package-lock.json‎

Lines changed: 50 additions & 114 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@
7171
"build": "next build",
7272
"test": "vitest",
7373
"test:ci": "vitest --run",
74-
"play": "npx playwright test --ui",
74+
"play": "PLAYWRIGHT_ALL=true npx playwright test --ui",
7575
"play-headless": "npx playwright test",
76+
"play-build": "export PLAYWRIGHT_ALL=true BUILD=true; npm run build && npx playwright test --ui",
77+
"play-headless-build": "export BUILD=true; npm run build && npx playwright test",
7678
"prettier:write": "prettier --write .",
7779
"prettier:check": "prettier --check .",
7880
"lint": "eslint --ext=ts,tsx src playwright",

‎playwright.config.ts‎

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { defineConfig, PlaywrightTestConfig } from '@playwright/test'
22

3-
import { commonBrowserConfigs, velgBrowserConfigs, type NamedProject } from './playwright/config/browser-config'
3+
import {
4+
commonBrowserConfigs,
5+
type NamedProject,
6+
Nettlesernavn,
7+
velgBrowserConfigs,
8+
} from './playwright/config/browser-config'
49

510
type TestConfigWebServer = PlaywrightTestConfig['webServer']
611

@@ -18,49 +23,48 @@ const createOptions = (medDekorator = false, port = 3000): OptionsType => {
1823
return { baseURL, timeout: 30 * 1000, server: undefined }
1924
}
2025

21-
if (process.env.FAST) {
22-
return {
23-
baseURL,
24-
timeout: 30 * 1000,
25-
server: {
26-
command: 'npm run start',
27-
port,
28-
timeout: 120 * 1000,
29-
reuseExistingServer: false,
30-
stderr: 'pipe',
31-
stdout: 'pipe',
32-
},
33-
}
34-
}
35-
3626
const serverEnv = {
3727
...process.env,
3828
MOCK_BACKEND: 'true',
3929
...(medDekorator ? {} : { NO_DECORATOR: 'true' }),
4030
}
4131

32+
const serverCommand = process.env.BUILD ? 'next start' : 'next dev'
33+
4234
return {
4335
baseURL,
4436
timeout,
4537
server: {
46-
command: `next dev -p ${port}`,
47-
port,
48-
timeout: 120 * 1000,
49-
reuseExistingServer: false,
38+
command: `${serverCommand} -p ${port}`,
39+
timeout: 15 * 1000,
40+
reuseExistingServer: true,
5041
env: serverEnv,
42+
stdout: 'pipe',
43+
stderr: 'pipe',
5144
},
5245
}
5346
}
5447

5548
const opts = createOptions(false, 3000)
56-
const servers = [opts.server].filter(Boolean) as TestConfigWebServer
49+
const optsMedDekorator = createOptions(true, 3001)
50+
const servers = [opts.server, optsMedDekorator.server].filter(Boolean) as TestConfigWebServer
5751

58-
const alleBrowserConfigs: NamedProject[] = commonBrowserConfigs(opts)
52+
const alleBrowserConfigs: NamedProject[] = commonBrowserConfigs(opts, optsMedDekorator)
53+
54+
const lokalBrowserConfig = velgBrowserConfigs(
55+
alleBrowserConfigs,
56+
(config) => config.name === Nettlesernavn.DESKTOP_CHROME,
57+
)
5958

6059
const ciBrowserConfigs = velgBrowserConfigs(
6160
alleBrowserConfigs,
6261
(config) =>
63-
config.name === 'Desktop Chromium' || config.name === 'Mobile Chromium' || config.name === 'Mobile WebKit',
62+
config.name === Nettlesernavn.DESKTOP_CHROME ||
63+
config.name === Nettlesernavn.DESKTOP_CHROME_MED_DEKORATOR ||
64+
config.name === Nettlesernavn.MOBILE_CHROME ||
65+
config.name === Nettlesernavn.MOBILE_CHROMIUM_MED_DEKORATOR ||
66+
config.name === Nettlesernavn.MOBILE_WEBKIT ||
67+
config.name === Nettlesernavn.MOBILE_WEBKIT_MED_DEKORATOR,
6468
)
6569

6670
export default defineConfig({
@@ -75,7 +79,10 @@ export default defineConfig({
7579
baseURL: opts.baseURL,
7680
navigationTimeout: 60000,
7781
trace: 'on-first-retry',
82+
bypassCSP: true,
83+
timezoneId: 'Europe/Oslo',
84+
locale: 'nb-NO',
7885
},
79-
projects: process.env.CI ? ciBrowserConfigs : alleBrowserConfigs,
86+
projects: process.env.CI ? ciBrowserConfigs : process.env.PLAYWRIGHT_ALL ? alleBrowserConfigs : lokalBrowserConfig,
8087
webServer: servers,
8188
})

‎playwright/arkivering-av-vedtak.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
visBeregningRegion,
99
} from './utils/hjelpefunksjoner'
1010

11-
const baseUrl = 'http://localhost:3000/syk/sykepenger/vedtak/arkivering/utvikling-arkivering'
11+
const baseUrl = '/syk/sykepenger/vedtak/arkivering/utvikling-arkivering'
1212

1313
test.describe('Vedtak for arkivering', () => {
1414
test.afterEach(({ uuOptions }) => {

‎playwright/avviste-dager.spec.ts‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ test.describe('Avviste dager', () => {
5656
for (const reason of reasons) {
5757
await expect(refusjonsPanel.getByRole('listitem').getByText(reason)).toBeVisible()
5858
}
59-
await refusjonsPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' }).click()
59+
const begrunnelseLink1 = refusjonsPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' })
60+
await expect(begrunnelseLink1).toBeVisible()
61+
await begrunnelseLink1.click()
6062

6163
await expect(
6264
page.getByText(
@@ -108,7 +110,9 @@ test.describe('Avviste dager', () => {
108110
const ingenUtbetalingPanel = page.getByTestId('utbetaling-panel-ingen')
109111
await expect(ingenUtbetalingPanel.getByText('Ingen utbetaling')).toBeVisible()
110112
await expect(ingenUtbetalingPanel.getByText('Søknaden er avslått', { exact: true })).toBeVisible()
111-
await ingenUtbetalingPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' }).click()
113+
const begrunnelseLink2 = ingenUtbetalingPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' })
114+
await expect(begrunnelseLink2).toBeVisible()
115+
await begrunnelseLink2.click()
112116

113117
await expect(
114118
page.getByText(
@@ -201,7 +205,9 @@ test.describe('Avviste dager', () => {
201205
await expect(refusjonPanel.getByText('Søknaden er delvis innvilget')).toBeVisible()
202206
await expect(refusjonPanel.getByText('Noen av dagene er ikke innvilget fordi:')).toBeVisible()
203207
await expect(refusjonPanel.getByRole('listitem').getByText('Jobbet eller tjent for mye')).toBeVisible()
204-
await refusjonPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' }).click()
208+
const begrunnelseLink3 = refusjonPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' })
209+
await expect(begrunnelseLink3).toBeVisible()
210+
await begrunnelseLink3.click()
205211

206212
const begrunnelseForDelvisInnvilget = page.getByRole('button', {
207213
name: 'Begrunnelse for delvis innvilget søknad',
@@ -223,7 +229,9 @@ test.describe('Avviste dager', () => {
223229
await expect(ingenUtbetalingPanel.getByText('Søknaden er avslått', { exact: true })).toBeVisible()
224230
await expect(ingenUtbetalingPanel.getByText('Søknaden er avslått fordi:')).toBeVisible()
225231
await expect(ingenUtbetalingPanel.getByRole('listitem').getByText('Jobbet eller tjent for mye')).toBeVisible()
226-
await ingenUtbetalingPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' }).click()
232+
const begrunnelseLink4 = ingenUtbetalingPanel.getByRole('link', { name: 'Se nærmere begrunnelse her' })
233+
await expect(begrunnelseLink4).toBeVisible()
234+
await begrunnelseLink4.click()
227235

228236
const begrunnelseForAvslag = page.getByRole('button', { name: 'Begrunnelse for avslått søknad' })
229237
await expect(begrunnelseForAvslag).toBeVisible()

‎playwright/config/browser-config.ts‎

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
// file: playwright/config/browser-config.ts
21
import { devices, type Project } from '@playwright/test'
32

4-
// Extend Playwright's Project type to guarantee a name
3+
export enum Nettlesernavn {
4+
DESKTOP_CHROME = 'Desktop Chrome',
5+
DESKTOP_CHROME_MED_DEKORATOR = 'Desktop Chrome med dekorator',
6+
MOBILE_CHROME = 'Mobile Chrome',
7+
MOBILE_CHROMIUM_MED_DEKORATOR = 'Mobile Chromium med dekorator',
8+
DESKTOP_FIREFOX = 'Desktop Firefox',
9+
DESKTOP_FIREFOX_MED_DEKORATOR = 'Desktop Firefox med dekorator',
10+
FIREFOX_RESPONSIVE = 'Firefox (responsive)',
11+
MOBILE_FIREFOX_MED_DEKORATOR = 'Mobile Firefox med dekorator',
12+
DESKTOP_WEBKIT = 'Desktop WebKit',
13+
DESKTOP_WEBKIT_MED_DEKORATOR = 'Desktop WebKit med dekorator',
14+
MOBILE_WEBKIT = 'Mobile WebKit',
15+
MOBILE_WEBKIT_MED_DEKORATOR = 'Mobile WebKit med dekorator',
16+
}
17+
518
export type NamedProject = Project & { name: string }
619

7-
export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[] {
20+
export function commonBrowserConfigs(opts: { baseURL: string }, optsMedDekorator: { baseURL: string }): NamedProject[] {
821
return [
922
{
10-
name: 'Desktop Chromium',
23+
name: Nettlesernavn.DESKTOP_CHROME,
1124
use: {
1225
...devices['Desktop Chrome'],
1326
viewport: { width: 1920, height: 1080 },
@@ -16,7 +29,16 @@ export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[]
1629
testIgnore: '**/brodsmuler.spec.ts',
1730
},
1831
{
19-
name: 'Mobile Chromium',
32+
name: Nettlesernavn.DESKTOP_CHROME_MED_DEKORATOR,
33+
use: {
34+
...devices['Desktop Chrome'],
35+
viewport: { width: 1920, height: 1080 },
36+
baseURL: optsMedDekorator.baseURL,
37+
},
38+
testMatch: '**/brodsmuler.spec.ts',
39+
},
40+
{
41+
name: Nettlesernavn.MOBILE_CHROME,
2042
use: {
2143
...devices['Pixel 5'],
2244
viewport: { width: 375, height: 667 },
@@ -26,7 +48,17 @@ export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[]
2648
testIgnore: '**/brodsmuler.spec.ts',
2749
},
2850
{
29-
name: 'Desktop Firefox',
51+
name: Nettlesernavn.MOBILE_CHROMIUM_MED_DEKORATOR,
52+
use: {
53+
...devices['Pixel 5'],
54+
viewport: { width: 375, height: 667 },
55+
isMobile: true,
56+
baseURL: optsMedDekorator.baseURL,
57+
},
58+
testMatch: '**/brodsmuler.spec.ts',
59+
},
60+
{
61+
name: Nettlesernavn.DESKTOP_FIREFOX,
3062
use: {
3163
...devices['Desktop Firefox'],
3264
viewport: { width: 1920, height: 1080 },
@@ -35,17 +67,37 @@ export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[]
3567
testIgnore: '**/brodsmuler.spec.ts',
3668
},
3769
{
38-
name: 'Mobile Firefox',
70+
name: Nettlesernavn.DESKTOP_FIREFOX_MED_DEKORATOR,
3971
use: {
40-
...devices['Pixel 5'],
72+
...devices['Desktop Firefox'],
73+
viewport: { width: 1920, height: 1080 },
74+
baseURL: optsMedDekorator.baseURL,
75+
},
76+
testMatch: '**/brodsmuler.spec.ts',
77+
},
78+
{
79+
name: Nettlesernavn.FIREFOX_RESPONSIVE,
80+
use: {
81+
browserName: 'firefox',
4182
viewport: { width: 375, height: 667 },
42-
isMobile: true,
83+
userAgent:
84+
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/40.0 Mobile/15E148 Safari/605.1.15',
4385
baseURL: opts.baseURL,
4486
},
4587
testIgnore: '**/brodsmuler.spec.ts',
4688
},
4789
{
48-
name: 'Desktop WebKit',
90+
name: Nettlesernavn.MOBILE_FIREFOX_MED_DEKORATOR,
91+
use: {
92+
...devices['Pixel 5'],
93+
viewport: { width: 375, height: 667 },
94+
isMobile: true,
95+
baseURL: optsMedDekorator.baseURL,
96+
},
97+
testMatch: '**/brodsmuler.spec.ts',
98+
},
99+
{
100+
name: Nettlesernavn.DESKTOP_WEBKIT,
49101
use: {
50102
...devices['Desktop Safari'],
51103
viewport: { width: 1920, height: 1080 },
@@ -54,7 +106,16 @@ export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[]
54106
testIgnore: '**/brodsmuler.spec.ts',
55107
},
56108
{
57-
name: 'Mobile WebKit',
109+
name: Nettlesernavn.DESKTOP_WEBKIT_MED_DEKORATOR,
110+
use: {
111+
...devices['Desktop Safari'],
112+
viewport: { width: 1920, height: 1080 },
113+
baseURL: optsMedDekorator.baseURL,
114+
},
115+
testMatch: '**/brodsmuler.spec.ts',
116+
},
117+
{
118+
name: Nettlesernavn.MOBILE_WEBKIT,
58119
use: {
59120
...devices['iPhone 12'],
60121
viewport: { width: 375, height: 667 },
@@ -63,6 +124,16 @@ export function commonBrowserConfigs(opts: { baseURL: string }): NamedProject[]
63124
},
64125
testIgnore: '**/brodsmuler.spec.ts',
65126
},
127+
{
128+
name: Nettlesernavn.MOBILE_WEBKIT_MED_DEKORATOR,
129+
use: {
130+
...devices['iPhone 12'],
131+
viewport: { width: 375, height: 667 },
132+
isMobile: true,
133+
baseURL: optsMedDekorator.baseURL,
134+
},
135+
testMatch: '**/brodsmuler.spec.ts',
136+
},
66137
]
67138
}
68139

‎playwright/flexjar.spec.ts‎

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import { kunDirekte } from '../src/data/testdata/data/vedtak/kunDirekte'
33
import { test, expect } from './fixtures'
44
import { harSynligTittel, trykkPaVedtakMedId } from './utils/hjelpefunksjoner'
55

6-
const baseUrl = 'http://localhost:3000/syk/sykepenger?testperson=direkte-uten-kontonummer'
6+
const baseUrl = '/syk/sykepenger?testperson=direkte-uten-kontonummer'
77
const poHelseUrl =
8-
'http://localhost:3000/syk/sykepenger?testperson=flexjar-pohelse&flexjar-spinnsyn-pohelse-helsemetrikk=true&flexjar-spinnsyn-frontend=false&id=348a5462-456a-4bfc-9b54-11cd77a9937f'
8+
'/syk/sykepenger?testperson=flexjar-pohelse&flexjar-spinnsyn-pohelse-helsemetrikk=true&flexjar-spinnsyn-frontend=false&id=348a5462-456a-4bfc-9b54-11cd77a9937f'
99

1010
test.describe('Flexjar', () => {
1111
test.beforeEach(async ({ page }) => {
12-
await page.goto(baseUrl)
12+
await page.goto(baseUrl, { waitUntil: 'networkidle' })
13+
1314
await expect(page.getByRole('link', { name: /Sykmeldt fra /i })).toHaveCount(1)
1415
await trykkPaVedtakMedId(page, kunDirekte.id)
1516
await harSynligTittel(page, 'Svar på søknad om sykepenger', 1)
@@ -22,15 +23,17 @@ test.describe('Flexjar', () => {
2223
await expect(region.getByRole('radio', { name: 'Veldig enkelt' })).toBeChecked()
2324

2425
await test.step('Payload inneholder arbeidssituasjon', async () => {
26+
const sendKnapp = region.getByRole('button', { name: 'Send tilbakemelding' })
27+
await expect(sendKnapp).toBeEnabled()
2528
const [request] = await Promise.all([
2629
page.waitForRequest((request) => request.url().includes('/flexjar-backend/api/v2/feedback')),
27-
region.getByRole('button', { name: 'Send tilbakemelding' }).click(),
30+
sendKnapp.click(),
2831
])
2932
const postData = JSON.parse(request.postData() || '{}')
3033
expect(postData).toHaveProperty('arbeidssituasjon', 'ARBEIDSTAKER')
3134
})
3235

33-
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible({ timeout: 10 })
36+
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible()
3437
})
3538

3639
test('Kan gi negativ feedback', async ({ page }) => {
@@ -42,8 +45,10 @@ test.describe('Flexjar', () => {
4245
await region.getByRole('radio', { name: 'Skjønte ikke hvorfor svaret ble som det ble' }).check()
4346
await expect(region.getByRole('radio', { name: 'Skjønte ikke hvorfor svaret ble som det ble' })).toBeChecked()
4447
await region.getByRole('textbox').fill('Dette er en test')
45-
await region.getByRole('button', { name: 'Send tilbakemelding' }).click()
46-
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible({ timeout: 10 })
48+
const sendKnapp = region.getByRole('button', { name: 'Send tilbakemelding' })
49+
await expect(sendKnapp).toBeEnabled()
50+
await sendKnapp.click()
51+
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible()
4752
})
4853

4954
test('Har flexjar når det er riktige toggles', async ({ page }) => {
@@ -52,12 +57,14 @@ test.describe('Flexjar', () => {
5257
const flexjarHeading = await harSynligTittel(page, 'Hva synes du?', 2)
5358
const region = page.getByRole('region').filter({ has: flexjarHeading })
5459

55-
const braBtn = region.getByRole('button', { name: 'Bra', exact: true })
56-
await expect(braBtn).toHaveAttribute('aria-pressed', 'false')
57-
await braBtn.click()
58-
await expect(braBtn).toHaveAttribute('aria-pressed', 'true')
60+
const braKnapp = region.getByRole('button', { name: 'Bra', exact: true })
61+
await expect(braKnapp).toHaveAttribute('aria-pressed', 'false')
62+
await braKnapp.click()
63+
await expect(braKnapp).toHaveAttribute('aria-pressed', 'true')
5964
await region.getByRole('textbox').fill('Dette er en test')
60-
await region.getByRole('button', { name: 'Send tilbakemelding' }).click()
61-
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible({ timeout: 10 })
65+
const sendKnapp = region.getByRole('button', { name: 'Send tilbakemelding' })
66+
await expect(sendKnapp).toBeEnabled()
67+
await sendKnapp.click()
68+
await expect(page.getByText('Takk for tilbakemeldingen!')).toBeVisible()
6269
})
6370
})

‎playwright/ikke-dobbel-bla-boks-ved-helgperiode.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ingenUtbetalingFordiAlleDagerHelg } from '../src/data/testdata/data/ved
33
import { expect, test } from './fixtures'
44
import { harSynligTittel, trykkPaVedtakMedId, verifyDagTabellRows, visBeregningRegion } from './utils/hjelpefunksjoner'
55

6-
const baseUrl = 'http://localhost:3000/syk/sykepenger?testperson=diverse-data'
6+
const baseUrl = '/syk/sykepenger?testperson=diverse-data'
77

88
test.describe('Ved et vedtak med null utbetaling vises ikke tekst om hvem som får null kroner', () => {
99
test.beforeEach(async ({ page }) => {

0 commit comments

Comments
 (0)