Skip to content

Commit b193055

Browse files
authored
Merge pull request #81 from no-js-dev/fix/80-e2e-restoration
fix(e2e): restore 12 broken e2e tests + add CI e2e job
2 parents 8b48ce9 + 79048da commit b193055

12 files changed

Lines changed: 157 additions & 99 deletions

File tree

.github/workflows/ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,32 @@ jobs:
2424
- run: npm install
2525
- run: npm run build
2626
- run: npm test
27+
28+
e2e:
29+
runs-on: ubuntu-latest
30+
31+
steps:
32+
- uses: actions/checkout@v6
33+
34+
- name: Clone NoJS Core
35+
run: git clone --depth 1 https://github.com/no-js-dev/nojs.git "$GITHUB_WORKSPACE/../NoJS"
36+
37+
- uses: actions/setup-node@v7
38+
with:
39+
node-version: 22
40+
cache: npm
41+
42+
- name: Build NoJS Core
43+
run: cd "$GITHUB_WORKSPACE/../NoJS" && npm ci && node build.js
44+
45+
- name: Install Elements dependencies
46+
run: npm ci
47+
48+
- name: Build Elements
49+
run: npm run build
50+
51+
- name: Install Playwright browsers
52+
run: npx playwright install --with-deps chromium
53+
54+
- name: Run e2e tests
55+
run: cd e2e && npx playwright test --project=chromium

dist/cjs/nojs-elements.js

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

dist/cjs/nojs-elements.js.map

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

dist/esm/nojs-elements.js

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

dist/esm/nojs-elements.js.map

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

dist/iife/nojs-elements.js

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

dist/iife/nojs-elements.js.map

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

docs/examples/dnd/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@
176176
drag-list="evtA" template="item-tpl" drag-list-key="id"
177177
drag-type="evt" drop-accept="evt" drop-sort="vertical"
178178
drag-list-remove
179-
on:reorder="reorderLog = 'reordered:' + $event.detail.from + '->' + $event.detail.to"
180-
on:remove="removeLog = 'removed:' + $event.detail.index">
179+
on:nojs:dnd-reorder="reorderLog = 'reordered:' + $event.detail.from + '->' + $event.detail.to"
180+
on:nojs:dnd-remove="removeLog = 'removed:' + $event.detail.index">
181181
</div>
182182
<span class="value" data-test="reorder-log" bind="reorderLog"></span>
183183
<span class="value" data-test="remove-log" bind="removeLog"></span>
@@ -186,7 +186,7 @@
186186
<div class="list" data-test="evt-b"
187187
drag-list="evtB" template="item-tpl" drag-list-key="id"
188188
drag-type="evt" drop-accept="evt" drop-sort="vertical"
189-
on:receive="receiveLog = 'received:' + $event.detail.item.name">
189+
on:nojs:dnd-receive="receiveLog = 'received:' + $event.detail.item.name">
190190
</div>
191191
<span class="value" data-test="receive-log" bind="receiveLog"></span>
192192
</div>

docs/examples/table/index.html

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,11 @@
3333
</tr>
3434
</thead>
3535
<tbody>
36-
<tr each="user in users">
36+
<tr each="user in users" else="noUsersTpl">
3737
<td bind="user.name"></td>
3838
<td bind="user.age"></td>
3939
<td bind="user.email"></td>
4040
</tr>
41-
<tr else>
42-
<td colspan="3">No users found</td>
43-
</tr>
4441
</tbody>
4542
</table>
4643
</div>
@@ -62,18 +59,18 @@
6259
</tr>
6360
</thead>
6461
<tbody>
65-
<tr each="person in people">
62+
<tr each="person in people" else="noDataTpl">
6663
<td bind="person.name"></td>
6764
<td bind="person.age"></td>
6865
</tr>
69-
<tr else>
70-
<td colspan="2">No data</td>
71-
</tr>
7266
</tbody>
7367
</table>
7468
</div>
7569
</section>
7670

71+
<template id="noUsersTpl"><tr><td colspan="3">No users found</td></tr></template>
72+
<template id="noDataTpl"><tr><td colspan="2">No data</td></tr></template>
73+
7774
<script src="../../../NoJS/dist/iife/no.js"></script>
7875
<script src="../../../dist/iife/nojs-elements.js"></script>
7976
<script>

e2e/tests/dnd.spec.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ test.describe('Drag and Drop', () => {
2323

2424
await expect(firstItem).toHaveAttribute('draggable', 'true');
2525
await expect(firstItem).toHaveAttribute('role', 'option');
26-
await expect(firstItem).toHaveAttribute('aria-grabbed', 'false');
26+
await expect(firstItem).toHaveAttribute('aria-roledescription', 'draggable item');
2727
});
2828

2929
test('drag item from list A to list B transfers the item', async ({ page }) => {
@@ -227,27 +227,37 @@ test.describe('Drag and Drop', () => {
227227
await expect(firstItem).toBeFocused();
228228
});
229229

230-
test('keyboard DnD: Space activates drag mode (aria-grabbed)', async ({ page }) => {
230+
test('keyboard DnD: Space activates drag mode (nojs-dragging class + live-region announcement)', async ({ page }) => {
231231
const kbList = page.getByTestId('kb-list');
232232
const firstItem = kbList.getByTestId('item').first();
233233

234234
await firstItem.focus();
235+
await expect(firstItem).not.toHaveClass(/nojs-dragging/);
236+
235237
await page.keyboard.press('Space');
236238

237-
// After Space, aria-grabbed should be "true"
238-
await expect(firstItem).toHaveAttribute('aria-grabbed', 'true');
239+
// After Space, the drag class should be applied
240+
await expect(firstItem).toHaveClass(/nojs-dragging/);
241+
242+
// Live region should announce the grab
243+
const liveRegion = page.locator('.nojs-dnd-live-region');
244+
await expect(liveRegion).toHaveText(/Grabbed .+\. Use arrow keys to (?:move|reorder)\./);
239245
});
240246

241-
test('keyboard DnD: Escape cancels drag mode', async ({ page }) => {
247+
test('keyboard DnD: Escape cancels drag mode (class removed + cancellation announcement)', async ({ page }) => {
242248
const kbList = page.getByTestId('kb-list');
243249
const firstItem = kbList.getByTestId('item').first();
244250

245251
await firstItem.focus();
246252
await page.keyboard.press('Space');
247-
await expect(firstItem).toHaveAttribute('aria-grabbed', 'true');
253+
await expect(firstItem).toHaveClass(/nojs-dragging/);
248254

249255
await page.keyboard.press('Escape');
250-
await expect(firstItem).toHaveAttribute('aria-grabbed', 'false');
256+
await expect(firstItem).not.toHaveClass(/nojs-dragging/);
257+
258+
// Live region should announce the cancellation
259+
const liveRegion = page.locator('.nojs-dnd-live-region');
260+
await expect(liveRegion).toHaveText(/(?:Drag|Reorder) cancelled\./);
251261
});
252262

253263
// ── Visual feedback (CSS classes) ────────────────────────────────

0 commit comments

Comments
 (0)