Skip to content

Commit ec82260

Browse files
authored
feat: Testing
Version: 0.9.2
2 parents 2564cf4 + 4e55ca4 commit ec82260

File tree

7 files changed

+2105
-56
lines changed

7 files changed

+2105
-56
lines changed

.github/workflows/npm_publish.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,28 @@ on:
66
release:
77
types: [created]
88
jobs:
9-
publish:
9+
test:
1010
runs-on: ubuntu-latest
1111
steps:
1212
- uses: actions/checkout@v2
1313

1414
- name: Setup Node.js
1515
uses: actions/setup-node@v2
1616
with:
17-
node-version: '14'
17+
node-version: '16'
18+
registry-url: 'https://registry.npmjs.org/'
19+
- run: npm install
20+
- run: npm test
21+
publish:
22+
runs-on: ubuntu-latest
23+
needs: test
24+
steps:
25+
- uses: actions/checkout@v2
26+
27+
- name: Setup Node.js
28+
uses: actions/setup-node@v2
29+
with:
30+
node-version: '16'
1831
registry-url: 'https://registry.npmjs.org/'
1932
- run: npm install
2033
- run: npm test
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import React from "react";
2+
import { describe, it, expect, vi, beforeEach } from "vitest";
3+
import { render, screen, fireEvent } from "@testing-library/react";
4+
import { ProportionSlider } from "../src";
5+
6+
describe("ProportionSlider", () => {
7+
beforeEach(() => {
8+
// Reset mocks between tests
9+
vi.clearAllMocks();
10+
});
11+
12+
it("renders without crashing", () => {
13+
render(
14+
<ProportionSlider
15+
value={[0, 0]}
16+
onChange={() => {}}
17+
proportions={[
18+
{
19+
name: "A",
20+
},
21+
{
22+
name: "B",
23+
},
24+
]}
25+
/>
26+
);
27+
expect(screen.getByRole("slider")).toBeDefined();
28+
});
29+
30+
it("displays proportion names correctly", () => {
31+
render(
32+
<ProportionSlider
33+
value={[50, 50]}
34+
onChange={() => {}}
35+
proportions={[{ name: "Left Side" }, { name: "Right Side" }]}
36+
/>
37+
);
38+
39+
expect(screen.getByText("Left Side")).toBeDefined();
40+
expect(screen.getByText("Right Side")).toBeDefined();
41+
});
42+
43+
it("calls onChange when slider knob is moved", async () => {
44+
const mockOnChange = vi.fn();
45+
// userEvent.setup();
46+
47+
render(
48+
<ProportionSlider
49+
value={[50, 50]}
50+
onChange={mockOnChange}
51+
proportions={[{ name: "A" }, { name: "B" }]}
52+
/>
53+
);
54+
55+
const slider = screen.getByRole("slider");
56+
const knob = slider.querySelector("div[role='button']");
57+
expect(knob).toBeDefined();
58+
59+
// Simulate drag start
60+
fireEvent.mouseDown(knob as HTMLElement);
61+
// Simulate drag movement
62+
fireEvent.mouseMove(window, { clientX: 100 });
63+
// Simulate drag end
64+
fireEvent.mouseUp(window);
65+
66+
expect(mockOnChange).toHaveBeenCalled();
67+
});
68+
});

0 commit comments

Comments
 (0)