@@ -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