@oslokommune/punkt-elements 13.5.2 → 13.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/{alert-DQNBDKjT.cjs → alert-7rUOhlNi.cjs} +2 -1
- package/dist/{alert-B07oUpkq.js → alert-cUBtwi2k.js} +12 -11
- package/dist/pkt-alert.cjs +1 -1
- package/dist/pkt-alert.js +1 -1
- package/dist/pkt-index.cjs +1 -1
- package/dist/pkt-index.js +1 -1
- package/package.json +6 -2
- package/src/components/alert/alert.test.ts +64 -79
- package/src/components/alert/alert.ts +1 -0
- package/src/components/backlink/backlink.test.ts +50 -96
- package/src/components/button/button.test.ts +211 -249
- package/src/components/calendar/calendar.accessibility.test.ts +30 -43
- package/src/components/card/card.test.ts +71 -121
- package/src/components/checkbox/checkbox.test.ts +231 -156
- package/src/components/consent/consent.test.ts +87 -91
- package/src/components/icon/icon.test.ts +368 -0
- package/src/components/input-wrapper/input-wrapper.test.ts +505 -0
- package/src/components/link/link.test.ts +224 -0
- package/src/components/linkcard/linkcard.test.ts +14 -12
|
@@ -1,49 +1,48 @@
|
|
|
1
1
|
import '@testing-library/jest-dom'
|
|
2
2
|
import { axe, toHaveNoViolations } from 'jest-axe'
|
|
3
3
|
import { fireEvent } from '@testing-library/dom'
|
|
4
|
+
import { createElementTest, BaseTestConfig } from '../../tests/test-framework'
|
|
5
|
+
import { CustomElementFor } from '../../tests/component-registry'
|
|
6
|
+
import './calendar'
|
|
4
7
|
|
|
5
8
|
expect.extend(toHaveNoViolations)
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
export interface CalendarTestConfig extends BaseTestConfig {
|
|
11
|
+
withcontrols?: boolean
|
|
12
|
+
weeknumbers?: boolean
|
|
13
|
+
multiple?: boolean
|
|
14
|
+
range?: boolean
|
|
15
|
+
earliest?: string
|
|
16
|
+
latest?: string
|
|
17
|
+
currentmonth?: string
|
|
18
|
+
excludedates?: string
|
|
19
|
+
excludeweekdays?: string
|
|
12
20
|
}
|
|
13
21
|
|
|
14
|
-
//
|
|
15
|
-
const
|
|
16
|
-
const container =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// Use shared framework
|
|
23
|
+
export const createCalendarTest = async (config: CalendarTestConfig = {}) => {
|
|
24
|
+
const { container, element } = await createElementTest<
|
|
25
|
+
CustomElementFor<'pkt-calendar'>,
|
|
26
|
+
CalendarTestConfig
|
|
27
|
+
>('pkt-calendar', config)
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
container,
|
|
31
|
+
calendar: element,
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
|
|
25
|
-
// Cleanup after each test
|
|
26
|
-
afterEach(() => {
|
|
27
|
-
document.body.innerHTML = ''
|
|
28
|
-
})
|
|
29
|
-
|
|
30
35
|
describe('PktCalendar', () => {
|
|
31
36
|
describe('Accessibility', () => {
|
|
32
37
|
test('has no accessibility violations', async () => {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
36
|
-
await calendar.updateComplete
|
|
38
|
+
const { calendar } = await createCalendarTest({ withcontrols: true, weeknumbers: true })
|
|
37
39
|
|
|
38
40
|
const results = await axe(calendar)
|
|
39
41
|
expect(results).toHaveNoViolations()
|
|
40
42
|
})
|
|
41
43
|
|
|
42
44
|
test('has proper ARIA attributes', async () => {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
46
|
-
await calendar.updateComplete
|
|
45
|
+
const { calendar } = await createCalendarTest({ withcontrols: true })
|
|
47
46
|
|
|
48
47
|
const calendarTable = calendar.querySelector('.pkt-calendar__body')
|
|
49
48
|
expect(calendarTable).toHaveAttribute('role', 'grid')
|
|
@@ -56,10 +55,7 @@ describe('PktCalendar', () => {
|
|
|
56
55
|
})
|
|
57
56
|
|
|
58
57
|
test('navigation buttons have proper labels', async () => {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
62
|
-
await calendar.updateComplete
|
|
58
|
+
const { calendar } = await createCalendarTest({ withcontrols: true })
|
|
63
59
|
|
|
64
60
|
const prevButton = calendar.querySelector('.pkt-calendar__prev-month')
|
|
65
61
|
const nextButton = calendar.querySelector('.pkt-calendar__next-month')
|
|
@@ -69,10 +65,7 @@ describe('PktCalendar', () => {
|
|
|
69
65
|
})
|
|
70
66
|
|
|
71
67
|
test('date buttons have proper accessible names', async () => {
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
75
|
-
await calendar.updateComplete
|
|
68
|
+
const { calendar } = await createCalendarTest()
|
|
76
69
|
|
|
77
70
|
const dateButtons = calendar.querySelectorAll('.pkt-calendar__date')
|
|
78
71
|
dateButtons.forEach((button) => {
|
|
@@ -82,10 +75,7 @@ describe('PktCalendar', () => {
|
|
|
82
75
|
})
|
|
83
76
|
|
|
84
77
|
test('selected dates have proper ARIA state', async () => {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
88
|
-
await calendar.updateComplete
|
|
78
|
+
const { calendar } = await createCalendarTest()
|
|
89
79
|
|
|
90
80
|
const firstDate = calendar.querySelector(
|
|
91
81
|
'.pkt-calendar__date:not(.pkt-calendar__date--disabled)',
|
|
@@ -97,10 +87,7 @@ describe('PktCalendar', () => {
|
|
|
97
87
|
})
|
|
98
88
|
|
|
99
89
|
test('disabled dates have proper ARIA state', async () => {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
const calendar = container.querySelector('pkt-calendar') as PktCalendar
|
|
103
|
-
await calendar.updateComplete
|
|
90
|
+
const { calendar } = await createCalendarTest({ excludeweekdays: '0,6' })
|
|
104
91
|
|
|
105
92
|
const disabledDates = calendar.querySelectorAll('.pkt-calendar__date--disabled')
|
|
106
93
|
disabledDates.forEach((date) => {
|
|
@@ -1,26 +1,40 @@
|
|
|
1
1
|
import '@testing-library/jest-dom'
|
|
2
2
|
import { axe, toHaveNoViolations } from 'jest-axe'
|
|
3
|
+
import { createElementTest, BaseTestConfig } from '../../tests/test-framework'
|
|
4
|
+
import { CustomElementFor } from '../../tests/component-registry'
|
|
5
|
+
import './card'
|
|
3
6
|
|
|
4
7
|
expect.extend(toHaveNoViolations)
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
export interface CardTestConfig extends BaseTestConfig {
|
|
10
|
+
skin?: string
|
|
11
|
+
layout?: string
|
|
12
|
+
padding?: string
|
|
13
|
+
borderOnHover?: boolean
|
|
14
|
+
heading?: string
|
|
15
|
+
subheading?: string
|
|
16
|
+
headingLevel?: number
|
|
17
|
+
href?: string
|
|
18
|
+
linkText?: string
|
|
19
|
+
image?: string
|
|
20
|
+
imageAlt?: string
|
|
21
|
+
tags?: string
|
|
22
|
+
metaPrefix?: string
|
|
23
|
+
metaLabel?: string
|
|
24
|
+
metaDate?: string
|
|
11
25
|
}
|
|
12
26
|
|
|
13
|
-
//
|
|
14
|
-
const
|
|
15
|
-
const container =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
// Use shared framework
|
|
28
|
+
export const createCardTest = async (config: CardTestConfig = {}) => {
|
|
29
|
+
const { container, element } = await createElementTest<
|
|
30
|
+
CustomElementFor<'pkt-card'>,
|
|
31
|
+
CardTestConfig
|
|
32
|
+
>('pkt-card', config)
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
container,
|
|
36
|
+
card: element,
|
|
37
|
+
}
|
|
24
38
|
}
|
|
25
39
|
|
|
26
40
|
// Cleanup after each test
|
|
@@ -43,9 +57,8 @@ afterEach(() => {
|
|
|
43
57
|
describe('PktCard', () => {
|
|
44
58
|
describe('Rendering and basic functionality', () => {
|
|
45
59
|
test('renders without errors', async () => {
|
|
46
|
-
const
|
|
60
|
+
const { card } = await createCardTest()
|
|
47
61
|
|
|
48
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
49
62
|
expect(card).toBeInTheDocument()
|
|
50
63
|
|
|
51
64
|
await card.updateComplete
|
|
@@ -57,9 +70,7 @@ describe('PktCard', () => {
|
|
|
57
70
|
})
|
|
58
71
|
|
|
59
72
|
test('renders content in slot', async () => {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
73
|
+
const { card } = await createCardTest({ content: '<p>Test content here</p>' })
|
|
63
74
|
await card.updateComplete
|
|
64
75
|
|
|
65
76
|
const content = card.querySelector('.pkt-card__content')
|
|
@@ -68,9 +79,7 @@ describe('PktCard', () => {
|
|
|
68
79
|
})
|
|
69
80
|
|
|
70
81
|
test('renders basic structure correctly', async () => {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
82
|
+
const { card } = await createCardTest({ heading: 'Test Heading', content: 'Test content' })
|
|
74
83
|
await card.updateComplete
|
|
75
84
|
|
|
76
85
|
const article = card.querySelector('article')
|
|
@@ -86,9 +95,7 @@ describe('PktCard', () => {
|
|
|
86
95
|
|
|
87
96
|
describe('Properties and attributes', () => {
|
|
88
97
|
test('applies default properties correctly', async () => {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
98
|
+
const { card } = await createCardTest()
|
|
92
99
|
await card.updateComplete
|
|
93
100
|
|
|
94
101
|
expect(card.skin).toBe('outlined')
|
|
@@ -111,8 +118,7 @@ describe('PktCard', () => {
|
|
|
111
118
|
const skins = ['outlined', 'outlined-beige', 'gray', 'beige', 'green', 'blue']
|
|
112
119
|
|
|
113
120
|
for (const skin of skins) {
|
|
114
|
-
const
|
|
115
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
121
|
+
const { card } = await createCardTest({ skin })
|
|
116
122
|
await card.updateComplete
|
|
117
123
|
|
|
118
124
|
expect(card.skin).toBe(skin)
|
|
@@ -120,9 +126,6 @@ describe('PktCard', () => {
|
|
|
120
126
|
|
|
121
127
|
const article = card.querySelector('article')
|
|
122
128
|
expect(article).toHaveClass(`pkt-card--${skin}`)
|
|
123
|
-
|
|
124
|
-
// Cleanup for next iteration
|
|
125
|
-
container.remove()
|
|
126
129
|
}
|
|
127
130
|
})
|
|
128
131
|
|
|
@@ -130,8 +133,7 @@ describe('PktCard', () => {
|
|
|
130
133
|
const unsupportedSkins = ['zebra', 'goldenrod', 'hotpink', 'rainbow', 'invalid']
|
|
131
134
|
|
|
132
135
|
for (const invalidSkin of unsupportedSkins) {
|
|
133
|
-
const
|
|
134
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
136
|
+
const { card } = await createCardTest({ skin: invalidSkin })
|
|
135
137
|
await card.updateComplete
|
|
136
138
|
|
|
137
139
|
// The component should now validate skin values and fall back to default
|
|
@@ -143,9 +145,6 @@ describe('PktCard', () => {
|
|
|
143
145
|
expect(article).not.toHaveClass(`pkt-card--${invalidSkin}`)
|
|
144
146
|
// Should have the default skin class instead
|
|
145
147
|
expect(article).toHaveClass('pkt-card--outlined')
|
|
146
|
-
|
|
147
|
-
// Cleanup for next iteration
|
|
148
|
-
container.remove()
|
|
149
148
|
}
|
|
150
149
|
})
|
|
151
150
|
|
|
@@ -154,8 +153,7 @@ describe('PktCard', () => {
|
|
|
154
153
|
consoleWarnSpy.mockRestore()
|
|
155
154
|
const localConsoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {})
|
|
156
155
|
|
|
157
|
-
const
|
|
158
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
156
|
+
const { card } = await createCardTest({ skin: 'zebra' })
|
|
159
157
|
await card.updateComplete
|
|
160
158
|
|
|
161
159
|
// Should have logged a warning with the correct default value from spec
|
|
@@ -175,8 +173,7 @@ describe('PktCard', () => {
|
|
|
175
173
|
const layouts = ['vertical', 'horizontal']
|
|
176
174
|
|
|
177
175
|
for (const layout of layouts) {
|
|
178
|
-
const
|
|
179
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
176
|
+
const { card } = await createCardTest({ layout })
|
|
180
177
|
await card.updateComplete
|
|
181
178
|
|
|
182
179
|
expect(card.layout).toBe(layout)
|
|
@@ -184,9 +181,6 @@ describe('PktCard', () => {
|
|
|
184
181
|
|
|
185
182
|
const article = card.querySelector('article')
|
|
186
183
|
expect(article).toHaveClass(`pkt-card--${layout}`)
|
|
187
|
-
|
|
188
|
-
// Cleanup for next iteration
|
|
189
|
-
container.remove()
|
|
190
184
|
}
|
|
191
185
|
})
|
|
192
186
|
|
|
@@ -194,8 +188,7 @@ describe('PktCard', () => {
|
|
|
194
188
|
const paddingOptions = ['none', 'default']
|
|
195
189
|
|
|
196
190
|
for (const padding of paddingOptions) {
|
|
197
|
-
const
|
|
198
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
191
|
+
const { card } = await createCardTest({ padding })
|
|
199
192
|
await card.updateComplete
|
|
200
193
|
|
|
201
194
|
expect(card.padding).toBe(padding)
|
|
@@ -203,16 +196,12 @@ describe('PktCard', () => {
|
|
|
203
196
|
|
|
204
197
|
const article = card.querySelector('article')
|
|
205
198
|
expect(article).toHaveClass(`pkt-card--padding-${padding}`)
|
|
206
|
-
|
|
207
|
-
// Cleanup for next iteration
|
|
208
|
-
container.remove()
|
|
209
199
|
}
|
|
210
200
|
})
|
|
211
201
|
|
|
212
202
|
test('handles borderOnHover property correctly', async () => {
|
|
213
203
|
// Test with borderOnHover false
|
|
214
|
-
const
|
|
215
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
204
|
+
const { card } = await createCardTest()
|
|
216
205
|
card.borderOnHover = false
|
|
217
206
|
await card.updateComplete
|
|
218
207
|
|
|
@@ -225,9 +214,7 @@ describe('PktCard', () => {
|
|
|
225
214
|
|
|
226
215
|
describe('Heading functionality', () => {
|
|
227
216
|
test('renders heading when provided', async () => {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
217
|
+
const { card } = await createCardTest({ heading: 'Test Card Title' })
|
|
231
218
|
await card.updateComplete
|
|
232
219
|
|
|
233
220
|
expect(card.heading).toBe('Test Card Title')
|
|
@@ -239,9 +226,7 @@ describe('PktCard', () => {
|
|
|
239
226
|
})
|
|
240
227
|
|
|
241
228
|
test('renders subheading when provided', async () => {
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
229
|
+
const { card } = await createCardTest({ subheading: 'Test Subheading' })
|
|
245
230
|
await card.updateComplete
|
|
246
231
|
|
|
247
232
|
expect(card.subheading).toBe('Test Subheading')
|
|
@@ -252,9 +237,7 @@ describe('PktCard', () => {
|
|
|
252
237
|
})
|
|
253
238
|
|
|
254
239
|
test('applies correct heading level', async () => {
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
240
|
+
const { card } = await createCardTest({ heading: 'Test', headingLevel: 2 })
|
|
258
241
|
await card.updateComplete
|
|
259
242
|
|
|
260
243
|
expect(card.headinglevel).toBe(2)
|
|
@@ -264,9 +247,7 @@ describe('PktCard', () => {
|
|
|
264
247
|
})
|
|
265
248
|
|
|
266
249
|
test('does not render header when no heading or subheading', async () => {
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
250
|
+
const { card } = await createCardTest()
|
|
270
251
|
await card.updateComplete
|
|
271
252
|
|
|
272
253
|
const header = card.querySelector('.pkt-card__header')
|
|
@@ -276,9 +257,7 @@ describe('PktCard', () => {
|
|
|
276
257
|
|
|
277
258
|
describe('Link functionality', () => {
|
|
278
259
|
test('renders as regular card when no clickCardLink', async () => {
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
260
|
+
const { card } = await createCardTest({ heading: 'Test Title' })
|
|
282
261
|
await card.updateComplete
|
|
283
262
|
|
|
284
263
|
expect(card.clickCardLink).toBe(null)
|
|
@@ -293,8 +272,7 @@ describe('PktCard', () => {
|
|
|
293
272
|
})
|
|
294
273
|
|
|
295
274
|
test('renders as link card when clickCardLink provided', async () => {
|
|
296
|
-
const
|
|
297
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
275
|
+
const { card } = await createCardTest({ heading: 'Test Title' })
|
|
298
276
|
card.clickCardLink = '/test-url'
|
|
299
277
|
await card.updateComplete
|
|
300
278
|
|
|
@@ -312,8 +290,7 @@ describe('PktCard', () => {
|
|
|
312
290
|
})
|
|
313
291
|
|
|
314
292
|
test('handles openLinkInNewTab correctly', async () => {
|
|
315
|
-
const
|
|
316
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
293
|
+
const { card } = await createCardTest({ heading: 'Test' })
|
|
317
294
|
card.clickCardLink = '/test'
|
|
318
295
|
card.openLinkInNewTab = true
|
|
319
296
|
await card.updateComplete
|
|
@@ -325,8 +302,7 @@ describe('PktCard', () => {
|
|
|
325
302
|
})
|
|
326
303
|
|
|
327
304
|
test('applies correct aria-label for link cards', async () => {
|
|
328
|
-
const
|
|
329
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
305
|
+
const { card } = await createCardTest()
|
|
330
306
|
card.clickCardLink = '/test'
|
|
331
307
|
card.ariaLabel = 'Custom aria label'
|
|
332
308
|
await card.updateComplete
|
|
@@ -338,8 +314,7 @@ describe('PktCard', () => {
|
|
|
338
314
|
|
|
339
315
|
describe('Image functionality', () => {
|
|
340
316
|
test('renders image when provided', async () => {
|
|
341
|
-
const
|
|
342
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
317
|
+
const { card } = await createCardTest()
|
|
343
318
|
card.image = { src: '/test-image.jpg', alt: 'Test image' }
|
|
344
319
|
await card.updateComplete
|
|
345
320
|
|
|
@@ -355,9 +330,7 @@ describe('PktCard', () => {
|
|
|
355
330
|
})
|
|
356
331
|
|
|
357
332
|
test('does not render image when not provided', async () => {
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
333
|
+
const { card } = await createCardTest()
|
|
361
334
|
await card.updateComplete
|
|
362
335
|
|
|
363
336
|
const imageDiv = card.querySelector('.pkt-card__image')
|
|
@@ -368,8 +341,7 @@ describe('PktCard', () => {
|
|
|
368
341
|
const shapes = ['square', 'round'] as const
|
|
369
342
|
|
|
370
343
|
for (const shape of shapes) {
|
|
371
|
-
const
|
|
372
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
344
|
+
const { card } = await createCardTest()
|
|
373
345
|
card.image = { src: '/test.jpg', alt: 'Test' }
|
|
374
346
|
card.imageShape = shape
|
|
375
347
|
await card.updateComplete
|
|
@@ -378,17 +350,13 @@ describe('PktCard', () => {
|
|
|
378
350
|
|
|
379
351
|
const imageDiv = card.querySelector('.pkt-card__image')
|
|
380
352
|
expect(imageDiv).toHaveClass(`pkt-card__image-${shape}`)
|
|
381
|
-
|
|
382
|
-
// Cleanup for next iteration
|
|
383
|
-
container.remove()
|
|
384
353
|
}
|
|
385
354
|
})
|
|
386
355
|
})
|
|
387
356
|
|
|
388
357
|
describe('Tags functionality', () => {
|
|
389
358
|
test('renders tags when provided', async () => {
|
|
390
|
-
const
|
|
391
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
359
|
+
const { card } = await createCardTest()
|
|
392
360
|
card.tags = [
|
|
393
361
|
{ text: 'Tag 1', skin: 'blue' },
|
|
394
362
|
{ text: 'Tag 2', skin: 'green' },
|
|
@@ -405,8 +373,7 @@ describe('PktCard', () => {
|
|
|
405
373
|
})
|
|
406
374
|
|
|
407
375
|
test('renders single tag with correct aria-label', async () => {
|
|
408
|
-
const
|
|
409
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
376
|
+
const { card } = await createCardTest()
|
|
410
377
|
card.tags = [{ text: 'Single Tag' }]
|
|
411
378
|
await card.updateComplete
|
|
412
379
|
|
|
@@ -418,8 +385,7 @@ describe('PktCard', () => {
|
|
|
418
385
|
const positions = ['top', 'bottom'] as const
|
|
419
386
|
|
|
420
387
|
for (const position of positions) {
|
|
421
|
-
const container = await
|
|
422
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
388
|
+
const { card, container } = await createCardTest()
|
|
423
389
|
card.tags = [{ text: 'Test Tag' }]
|
|
424
390
|
card.tagPosition = position
|
|
425
391
|
await card.updateComplete
|
|
@@ -435,9 +401,7 @@ describe('PktCard', () => {
|
|
|
435
401
|
})
|
|
436
402
|
|
|
437
403
|
test('does not render tags when array is empty', async () => {
|
|
438
|
-
const
|
|
439
|
-
|
|
440
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
404
|
+
const { card } = await createCardTest()
|
|
441
405
|
await card.updateComplete
|
|
442
406
|
|
|
443
407
|
const tagsContainer = card.querySelector('.pkt-card__tags')
|
|
@@ -447,8 +411,7 @@ describe('PktCard', () => {
|
|
|
447
411
|
|
|
448
412
|
describe('Metadata functionality', () => {
|
|
449
413
|
test('renders metadata when provided', async () => {
|
|
450
|
-
const
|
|
451
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
414
|
+
const { card } = await createCardTest()
|
|
452
415
|
card.metaLead = 'Author Name'
|
|
453
416
|
card.metaTrail = '2023-12-01'
|
|
454
417
|
await card.updateComplete
|
|
@@ -468,8 +431,7 @@ describe('PktCard', () => {
|
|
|
468
431
|
})
|
|
469
432
|
|
|
470
433
|
test('renders only metaLead when metaTrail not provided', async () => {
|
|
471
|
-
const
|
|
472
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
434
|
+
const { card } = await createCardTest()
|
|
473
435
|
card.metaLead = 'Author Only'
|
|
474
436
|
await card.updateComplete
|
|
475
437
|
|
|
@@ -484,8 +446,7 @@ describe('PktCard', () => {
|
|
|
484
446
|
})
|
|
485
447
|
|
|
486
448
|
test('renders only metaTrail when metaLead not provided', async () => {
|
|
487
|
-
const
|
|
488
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
449
|
+
const { card } = await createCardTest()
|
|
489
450
|
card.metaTrail = 'Date Only'
|
|
490
451
|
await card.updateComplete
|
|
491
452
|
|
|
@@ -500,9 +461,7 @@ describe('PktCard', () => {
|
|
|
500
461
|
})
|
|
501
462
|
|
|
502
463
|
test('does not render metadata when neither provided', async () => {
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
464
|
+
const { card } = await createCardTest()
|
|
506
465
|
await card.updateComplete
|
|
507
466
|
|
|
508
467
|
const metadata = card.querySelector('.pkt-card__metadata')
|
|
@@ -512,11 +471,10 @@ describe('PktCard', () => {
|
|
|
512
471
|
|
|
513
472
|
describe('Content placement and structure', () => {
|
|
514
473
|
test('renders content elements in correct order', async () => {
|
|
515
|
-
const
|
|
516
|
-
'
|
|
517
|
-
'
|
|
518
|
-
)
|
|
519
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
474
|
+
const { card } = await createCardTest({
|
|
475
|
+
heading: 'Test Title',
|
|
476
|
+
subheading: 'Test Sub',
|
|
477
|
+
})
|
|
520
478
|
card.tags = [{ text: 'Test Tag' }]
|
|
521
479
|
card.image = { src: '/test.jpg', alt: 'Test' }
|
|
522
480
|
card.metaLead = 'Author'
|
|
@@ -541,8 +499,7 @@ describe('PktCard', () => {
|
|
|
541
499
|
})
|
|
542
500
|
|
|
543
501
|
test('places tags at bottom when tagPosition is bottom', async () => {
|
|
544
|
-
const
|
|
545
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
502
|
+
const { card } = await createCardTest({ heading: 'Test Title' })
|
|
546
503
|
card.tags = [{ text: 'Test Tag' }]
|
|
547
504
|
card.tagPosition = 'bottom'
|
|
548
505
|
await card.updateComplete
|
|
@@ -559,12 +516,10 @@ describe('PktCard', () => {
|
|
|
559
516
|
|
|
560
517
|
describe('Accessibility', () => {
|
|
561
518
|
test('has no accessibility violations', async () => {
|
|
562
|
-
const
|
|
563
|
-
'
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
519
|
+
const { card } = await createCardTest({
|
|
520
|
+
heading: 'Accessible Card',
|
|
521
|
+
})
|
|
522
|
+
await card.updateComplete
|
|
568
523
|
await card.updateComplete
|
|
569
524
|
|
|
570
525
|
const results = await axe(card)
|
|
@@ -572,8 +527,7 @@ describe('PktCard', () => {
|
|
|
572
527
|
})
|
|
573
528
|
|
|
574
529
|
test('applies correct ARIA attributes', async () => {
|
|
575
|
-
const
|
|
576
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
530
|
+
const { card } = await createCardTest({ heading: 'Test' })
|
|
577
531
|
card.ariaLabel = 'Custom accessible label'
|
|
578
532
|
await card.updateComplete
|
|
579
533
|
|
|
@@ -584,9 +538,7 @@ describe('PktCard', () => {
|
|
|
584
538
|
})
|
|
585
539
|
|
|
586
540
|
test('falls back to heading for aria-label when no explicit aria-label', async () => {
|
|
587
|
-
const
|
|
588
|
-
|
|
589
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
541
|
+
const { card } = await createCardTest({ heading: 'Default Aria Label' })
|
|
590
542
|
await card.updateComplete
|
|
591
543
|
|
|
592
544
|
const article = card.querySelector('article')
|
|
@@ -594,9 +546,7 @@ describe('PktCard', () => {
|
|
|
594
546
|
})
|
|
595
547
|
|
|
596
548
|
test('falls back to "kort" when no heading or aria-label', async () => {
|
|
597
|
-
const
|
|
598
|
-
|
|
599
|
-
const card = container.querySelector('pkt-card') as PktCard
|
|
549
|
+
const { card } = await createCardTest()
|
|
600
550
|
await card.updateComplete
|
|
601
551
|
|
|
602
552
|
const article = card.querySelector('article')
|