Skip to content

Commit 8c4d126

Browse files
authored
Merge pull request #153 from rcaferati/feat/v8-post
Add interaction tests
2 parents 29d4c77 + 4899847 commit 8c4d126

1 file changed

Lines changed: 115 additions & 1 deletion

File tree

src/__tests__/interactions.test.tsx

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,32 @@ describe('v8 interaction smoke tests', () => {
3636
});
3737
});
3838

39+
it('AwesomeButton does not call onPress when disabled', async () => {
40+
const onPress = jest.fn();
41+
42+
render(
43+
<AwesomeButton onPress={onPress} disabled>
44+
Disabled
45+
</AwesomeButton>
46+
);
47+
48+
fireEvent.click(screen.getByText('Disabled'));
49+
50+
await waitFor(() => {
51+
expect(onPress).toHaveBeenCalledTimes(0);
52+
});
53+
});
54+
55+
it('AwesomeButton renders anchor mode when href is provided', () => {
56+
render(
57+
<AwesomeButton href="https://example.com">Open website</AwesomeButton>
58+
);
59+
60+
const link = screen.getByText('Open website').closest('a');
61+
expect(link).toBeTruthy();
62+
expect(link?.getAttribute('href')).toBe('https://example.com');
63+
});
64+
3965
it('AwesomeButtonProgress runs async success flow and completes', async () => {
4066
jest.useFakeTimers();
4167

@@ -53,7 +79,32 @@ describe('v8 interaction smoke tests', () => {
5379
expect(onPress).toHaveBeenCalledTimes(1);
5480
});
5581

56-
// Flush timer-driven state updates inside act()
82+
await act(async () => {
83+
jest.advanceTimersByTime(60);
84+
});
85+
86+
await waitFor(() => {
87+
expect(onPress).toHaveBeenCalledTimes(1);
88+
});
89+
});
90+
91+
it('AwesomeButtonProgress runs async error flow and completes', async () => {
92+
jest.useFakeTimers();
93+
94+
const onPress = jest.fn((_event, next) => {
95+
setTimeout(() => next(false, 'Failed'), 50);
96+
});
97+
98+
render(
99+
<AwesomeButtonProgress onPress={onPress}>Publish</AwesomeButtonProgress>
100+
);
101+
102+
fireEvent.click(screen.getByText('Publish'));
103+
104+
await waitFor(() => {
105+
expect(onPress).toHaveBeenCalledTimes(1);
106+
});
107+
57108
await act(async () => {
58109
jest.advanceTimersByTime(60);
59110
});
@@ -94,4 +145,67 @@ describe('v8 interaction smoke tests', () => {
94145
window.open = originalOpen;
95146
}
96147
});
148+
149+
it('AwesomeButtonSocial uses custom onPress override instead of sharer logic', async () => {
150+
const originalOpen = window.open;
151+
const openSpy = jest.fn();
152+
const onPress = jest.fn();
153+
154+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
155+
(window as any).open = openSpy;
156+
157+
try {
158+
render(
159+
<AwesomeButtonSocial
160+
type="linkedin"
161+
sharer={{
162+
url: 'https://example.com',
163+
message: 'Check this out',
164+
}}
165+
onPress={onPress}>
166+
Share custom
167+
</AwesomeButtonSocial>
168+
);
169+
170+
fireEvent.click(screen.getByText('Share custom'));
171+
172+
await waitFor(() => {
173+
expect(onPress).toHaveBeenCalledTimes(1);
174+
});
175+
176+
expect(openSpy).not.toHaveBeenCalled();
177+
} finally {
178+
window.open = originalOpen;
179+
}
180+
});
181+
182+
it('AwesomeButtonSocial href mode bypasses sharer/window.open', () => {
183+
const originalOpen = window.open;
184+
const openSpy = jest.fn();
185+
186+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
187+
(window as any).open = openSpy;
188+
189+
try {
190+
render(
191+
<AwesomeButtonSocial
192+
type="github"
193+
href="https://github.com/rcaferati/react-awesome-button">
194+
Open GitHub
195+
</AwesomeButtonSocial>
196+
);
197+
198+
const link = screen.getByText('Open GitHub').closest('a');
199+
expect(link).toBeTruthy();
200+
expect(link?.getAttribute('href')).toBe(
201+
'https://github.com/rcaferati/react-awesome-button'
202+
);
203+
204+
fireEvent.click(screen.getByText('Open GitHub'));
205+
206+
expect(openSpy).not.toHaveBeenCalled();
207+
} finally {
208+
window.open = originalOpen;
209+
}
210+
});
97211
});

0 commit comments

Comments
 (0)