@@ -7,6 +7,11 @@ import useLinkHandler, {
7
7
} from '~/components/shell/router-helpers/use-link-handler' ;
8
8
import linkHelper from '~/helpers/link' ;
9
9
import { useNavigate , MemoryRouter } from 'react-router-dom' ;
10
+ import * as PC from '~/contexts/portal' ;
11
+
12
+ // @ts -expect-error does not exist on
13
+ const { routerFuture} = global ;
14
+ const saveError = console . error ;
10
15
11
16
jest . mock ( 'react-router-dom' , ( ) => ( {
12
17
...jest . requireActual ( 'react-router-dom' ) ,
@@ -36,7 +41,7 @@ describe('use-link-handler', () => {
36
41
return < a href = "https://dev.openstax.org/some-url" onClick = { onClick } /> ;
37
42
} ;
38
43
const Component = ( props : Parameters < typeof InnerComponent > [ 0 ] ) => (
39
- < MemoryRouter initialEntries = { [ '/' ] } >
44
+ < MemoryRouter initialEntries = { [ '/' ] } future = { routerFuture } >
40
45
< InnerComponent { ...props } />
41
46
</ MemoryRouter >
42
47
) ;
@@ -77,10 +82,32 @@ describe('use-link-handler', () => {
77
82
( useNavigate as jest . Mock ) . mockReturnValue ( navigate ) ;
78
83
79
84
render ( < Component /> ) ;
85
+ console . error = jest . fn ( ) ;
80
86
await user . click ( screen . getByRole ( 'link' ) ) ;
87
+ console . error = saveError ;
81
88
expect ( notPrevented ) . not . toBeCalled ( ) ;
82
89
expect ( navigate ) . toBeCalledWith ( 'whatever' , { x : 0 , y : 0 } ) ;
83
90
} ) ;
91
+ it ( 'rewrites URL when in portal' , async ( ) => {
92
+ const navigate = jest . fn ( ) ;
93
+ const el = document . createElement ( 'a' ) ;
94
+
95
+ jest . spyOn ( linkHelper , 'validUrlClick' ) . mockReturnValue ( el ) ;
96
+ jest . spyOn ( linkHelper , 'stripOpenStaxDomain' ) . mockReturnValue (
97
+ '/whatever'
98
+ ) ;
99
+ const spyPC = jest . spyOn ( PC , 'default' ) . mockReturnValueOnce ( { portal : 'a-portal' , setPortal : jest . fn ( ) } ) ;
100
+
101
+ ( useNavigate as jest . Mock ) . mockReturnValue ( navigate ) ;
102
+
103
+ render ( < Component /> ) ;
104
+ console . error = jest . fn ( ) ;
105
+ await user . click ( screen . getByRole ( 'link' ) ) ;
106
+ console . error = saveError ;
107
+ expect ( notPrevented ) . not . toBeCalled ( ) ;
108
+ expect ( navigate ) . toBeCalledWith ( '/a-portal/whatever' , { x : 0 , y : 0 } ) ;
109
+ spyPC . mockRestore ( ) ;
110
+ } ) ;
84
111
it ( 'calls piTracker if available' , async ( ) => {
85
112
type WindowWithPiTracker = ( typeof window ) & {
86
113
piTracker : ( path : string ) => void ;
@@ -123,7 +150,9 @@ describe('use-link-handler', () => {
123
150
( useNavigate as jest . Mock ) . mockReturnValue ( navigate ) ;
124
151
125
152
render ( < Component /> ) ;
153
+ console . error = jest . fn ( ) ;
126
154
await user . click ( screen . getByRole ( 'link' ) ) ;
155
+ console . error = saveError ;
127
156
expect ( notPrevented ) . not . toBeCalled ( ) ;
128
157
expect ( navigate ) . not . toBeCalled ( ) ;
129
158
} ) ;
@@ -144,7 +173,9 @@ describe('use-link-handler', () => {
144
173
( useNavigate as jest . Mock ) . mockReturnValue ( navigate ) ;
145
174
146
175
render ( < Component /> ) ;
176
+ console . error = jest . fn ( ) ;
147
177
await user . click ( screen . getByRole ( 'link' ) ) ;
178
+ console . error = saveError ;
148
179
expect ( notPrevented ) . not . toBeCalled ( ) ;
149
180
expect ( navigate ) . not . toBeCalled ( ) ;
150
181
} ) ;
0 commit comments