@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,40 +1,36 @@
|
|
|
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 './backlink'
|
|
3
6
|
|
|
4
7
|
expect.extend(toHaveNoViolations)
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
await Promise.all([customElements.whenDefined('pkt-backlink')])
|
|
9
|
+
export interface BacklinkTestConfig extends BaseTestConfig {
|
|
10
|
+
href?: string
|
|
11
|
+
text?: string
|
|
12
|
+
ariaLabel?: string
|
|
11
13
|
}
|
|
12
14
|
|
|
13
|
-
//
|
|
14
|
-
const
|
|
15
|
-
const container =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
// Use shared framework
|
|
16
|
+
export const createBacklinkTest = async (config: BacklinkTestConfig = {}) => {
|
|
17
|
+
const { container, element } = await createElementTest<
|
|
18
|
+
CustomElementFor<'pkt-backlink'>,
|
|
19
|
+
BacklinkTestConfig
|
|
20
|
+
>('pkt-backlink', config)
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
container,
|
|
24
|
+
backlink: element,
|
|
25
|
+
}
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
// Cleanup after each test
|
|
25
|
-
afterEach(() => {
|
|
26
|
-
document.body.innerHTML = ''
|
|
27
|
-
})
|
|
28
|
-
|
|
29
28
|
describe('PktBackLink', () => {
|
|
30
29
|
describe('Rendering and basic functionality', () => {
|
|
31
30
|
test('renders without errors', async () => {
|
|
32
|
-
const
|
|
31
|
+
const { backlink } = await createBacklinkTest()
|
|
33
32
|
|
|
34
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
35
33
|
expect(backlink).toBeInTheDocument()
|
|
36
|
-
|
|
37
|
-
await backlink.updateComplete
|
|
38
34
|
expect(backlink).toBeTruthy()
|
|
39
35
|
|
|
40
36
|
const nav = backlink.querySelector('nav')
|
|
@@ -42,10 +38,7 @@ describe('PktBackLink', () => {
|
|
|
42
38
|
})
|
|
43
39
|
|
|
44
40
|
test('renders with correct structure', async () => {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
48
|
-
await backlink.updateComplete
|
|
41
|
+
const { backlink } = await createBacklinkTest()
|
|
49
42
|
|
|
50
43
|
const nav = backlink.querySelector('nav')
|
|
51
44
|
const link = nav?.querySelector('a')
|
|
@@ -62,10 +55,7 @@ describe('PktBackLink', () => {
|
|
|
62
55
|
})
|
|
63
56
|
|
|
64
57
|
test('renders icon correctly', async () => {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
68
|
-
await backlink.updateComplete
|
|
58
|
+
const { backlink } = await createBacklinkTest()
|
|
69
59
|
|
|
70
60
|
const icon = backlink.querySelector('pkt-icon')
|
|
71
61
|
expect(icon).toBeInTheDocument()
|
|
@@ -76,10 +66,7 @@ describe('PktBackLink', () => {
|
|
|
76
66
|
|
|
77
67
|
describe('Properties and attributes', () => {
|
|
78
68
|
test('applies default properties correctly', async () => {
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
82
|
-
await backlink.updateComplete
|
|
69
|
+
const { backlink } = await createBacklinkTest()
|
|
83
70
|
|
|
84
71
|
expect(backlink.href).toBe('')
|
|
85
72
|
expect(backlink.text).toBe('Forsiden')
|
|
@@ -95,10 +82,7 @@ describe('PktBackLink', () => {
|
|
|
95
82
|
})
|
|
96
83
|
|
|
97
84
|
test('handles href property correctly', async () => {
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
101
|
-
await backlink.updateComplete
|
|
85
|
+
const { backlink } = await createBacklinkTest({ href: '/previous-page' })
|
|
102
86
|
|
|
103
87
|
expect(backlink.href).toBe('/previous-page')
|
|
104
88
|
|
|
@@ -113,10 +97,7 @@ describe('PktBackLink', () => {
|
|
|
113
97
|
})
|
|
114
98
|
|
|
115
99
|
test('handles text property correctly', async () => {
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
119
|
-
await backlink.updateComplete
|
|
100
|
+
const { backlink } = await createBacklinkTest({ text: 'Back to Home' })
|
|
120
101
|
|
|
121
102
|
expect(backlink.text).toBe('Back to Home')
|
|
122
103
|
// The text attribute should be removed from the custom element
|
|
@@ -133,13 +114,9 @@ describe('PktBackLink', () => {
|
|
|
133
114
|
})
|
|
134
115
|
|
|
135
116
|
test('handles ariaLabel property correctly', async () => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// Set ariaLabel property directly
|
|
141
|
-
backlink.ariaLabel = 'Navigate back to previous section'
|
|
142
|
-
await backlink.updateComplete
|
|
117
|
+
const { backlink } = await createBacklinkTest({
|
|
118
|
+
ariaLabel: 'Navigate back to previous section',
|
|
119
|
+
})
|
|
143
120
|
|
|
144
121
|
expect(backlink.ariaLabel).toBe('Navigate back to previous section')
|
|
145
122
|
|
|
@@ -154,10 +131,7 @@ describe('PktBackLink', () => {
|
|
|
154
131
|
})
|
|
155
132
|
|
|
156
133
|
test('uses default aria-label when none provided', async () => {
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
160
|
-
await backlink.updateComplete
|
|
134
|
+
const { backlink } = await createBacklinkTest()
|
|
161
135
|
|
|
162
136
|
expect(backlink.ariaLabel).toBe('')
|
|
163
137
|
|
|
@@ -166,10 +140,7 @@ describe('PktBackLink', () => {
|
|
|
166
140
|
})
|
|
167
141
|
|
|
168
142
|
test('handles empty href by defaulting to "/"', async () => {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
172
|
-
await backlink.updateComplete
|
|
143
|
+
const { backlink } = await createBacklinkTest({ href: '' })
|
|
173
144
|
|
|
174
145
|
expect(backlink.href).toBe('')
|
|
175
146
|
|
|
@@ -180,10 +151,7 @@ describe('PktBackLink', () => {
|
|
|
180
151
|
|
|
181
152
|
describe('Attribute cleanup', () => {
|
|
182
153
|
test('removes reflected attributes from the element', async () => {
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
186
|
-
await backlink.updateComplete
|
|
154
|
+
const { backlink } = await createBacklinkTest({ href: '/test', text: 'Test Text' })
|
|
187
155
|
|
|
188
156
|
// The attributeChangedCallback should remove these attributes from the element
|
|
189
157
|
// (this is implementation-specific behavior in the component)
|
|
@@ -195,10 +163,10 @@ describe('PktBackLink', () => {
|
|
|
195
163
|
|
|
196
164
|
describe('Link functionality', () => {
|
|
197
165
|
test('creates clickable link with correct href', async () => {
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
166
|
+
const { backlink } = await createBacklinkTest({
|
|
167
|
+
href: '/dashboard',
|
|
168
|
+
text: 'Back to Dashboard',
|
|
169
|
+
})
|
|
202
170
|
|
|
203
171
|
const link = backlink.querySelector('a')
|
|
204
172
|
expect(link).toBeInTheDocument()
|
|
@@ -208,10 +176,7 @@ describe('PktBackLink', () => {
|
|
|
208
176
|
|
|
209
177
|
test('handles complex URLs correctly', async () => {
|
|
210
178
|
const complexUrl = 'https://example.com/path?query=value#section'
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
214
|
-
await backlink.updateComplete
|
|
179
|
+
const { backlink } = await createBacklinkTest({ href: complexUrl })
|
|
215
180
|
|
|
216
181
|
const link = backlink.querySelector('a')
|
|
217
182
|
expect(link?.getAttribute('href')).toBe(complexUrl)
|
|
@@ -220,12 +185,10 @@ describe('PktBackLink', () => {
|
|
|
220
185
|
|
|
221
186
|
describe('Accessibility', () => {
|
|
222
187
|
test('has correct ARIA attributes', async () => {
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
backlink.ariaLabel = 'Return to main page'
|
|
228
|
-
await backlink.updateComplete
|
|
188
|
+
const { backlink } = await createBacklinkTest({
|
|
189
|
+
text: 'Home',
|
|
190
|
+
ariaLabel: 'Return to main page',
|
|
191
|
+
})
|
|
229
192
|
|
|
230
193
|
const nav = backlink.querySelector('nav')
|
|
231
194
|
const icon = backlink.querySelector('pkt-icon')
|
|
@@ -235,10 +198,7 @@ describe('PktBackLink', () => {
|
|
|
235
198
|
})
|
|
236
199
|
|
|
237
200
|
test('provides semantic navigation structure', async () => {
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
241
|
-
await backlink.updateComplete
|
|
201
|
+
const { backlink } = await createBacklinkTest()
|
|
242
202
|
|
|
243
203
|
const nav = backlink.querySelector('nav')
|
|
244
204
|
const link = nav?.querySelector('a')
|
|
@@ -250,34 +210,28 @@ describe('PktBackLink', () => {
|
|
|
250
210
|
})
|
|
251
211
|
|
|
252
212
|
test('renders with no WCAG errors with axe - default backlink', async () => {
|
|
253
|
-
const container = await
|
|
254
|
-
|
|
255
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
256
|
-
await backlink.updateComplete
|
|
213
|
+
const { container } = await createBacklinkTest()
|
|
257
214
|
|
|
258
215
|
const results = await axe(container)
|
|
259
216
|
expect(results).toHaveNoViolations()
|
|
260
217
|
})
|
|
261
218
|
|
|
262
219
|
test('renders with no WCAG errors with axe - custom backlink', async () => {
|
|
263
|
-
const container = await
|
|
264
|
-
'
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
await backlink.updateComplete
|
|
220
|
+
const { container } = await createBacklinkTest({
|
|
221
|
+
href: '/categories',
|
|
222
|
+
text: 'Back to Categories',
|
|
223
|
+
ariaLabel: 'Navigate back to category listing',
|
|
224
|
+
})
|
|
269
225
|
|
|
270
226
|
const results = await axe(container)
|
|
271
227
|
expect(results).toHaveNoViolations()
|
|
272
228
|
})
|
|
273
229
|
|
|
274
230
|
test('renders with no WCAG errors with axe - external link', async () => {
|
|
275
|
-
const container = await
|
|
276
|
-
'
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
const backlink = container.querySelector('pkt-backlink') as PktBackLink
|
|
280
|
-
await backlink.updateComplete
|
|
231
|
+
const { container } = await createBacklinkTest({
|
|
232
|
+
href: 'https://example.com',
|
|
233
|
+
text: 'Back to External Site',
|
|
234
|
+
})
|
|
281
235
|
|
|
282
236
|
const results = await axe(container)
|
|
283
237
|
expect(results).toHaveNoViolations()
|