@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.
@@ -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
- import './backlink'
7
- import { PktBackLink } from './backlink' // For type checking
8
-
9
- const waitForCustomElements = async () => {
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
- // Helper function to create backlink markup
14
- const createBacklink = async (backlinkProps = '') => {
15
- const container = document.createElement('div')
16
- container.innerHTML = `
17
- <pkt-backlink ${backlinkProps}></pkt-backlink>
18
- `
19
- document.body.appendChild(container)
20
- await waitForCustomElements()
21
- return container
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 container = await createBacklink()
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 container = await createBacklink()
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 container = await createBacklink()
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 container = await createBacklink()
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 container = await createBacklink('href="/previous-page"')
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 container = await createBacklink('text="Back to Home"')
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
- // Set the property directly instead of using attribute
137
- const container = await createBacklink()
138
- const backlink = container.querySelector('pkt-backlink') as PktBackLink
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 container = await createBacklink()
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 container = await createBacklink('href=""')
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 container = await createBacklink('href="/test" text="Test Text"')
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 container = await createBacklink('href="/dashboard" text="Back to Dashboard"')
199
-
200
- const backlink = container.querySelector('pkt-backlink') as PktBackLink
201
- await backlink.updateComplete
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 container = await createBacklink(`href="${complexUrl}"`)
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 container = await createBacklink('text="Home"')
224
- const backlink = container.querySelector('pkt-backlink') as PktBackLink
225
-
226
- // Set ariaLabel property to test custom aria-label
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 container = await createBacklink()
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 createBacklink()
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 createBacklink(
264
- 'href="/categories" text="Back to Categories" aria-label="Navigate back to category listing"',
265
- )
266
-
267
- const backlink = container.querySelector('pkt-backlink') as PktBackLink
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 createBacklink(
276
- 'href="https://example.com" text="Back to External Site"',
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()