@@ -83,77 +83,164 @@ describe('<SignInPage />', () => {
8383 } )
8484
8585 describe ( 'when sign-in succeeds' , ( ) => {
86- it ( 'redirects to authenticate' , async ( ) => {
87- const values = {
88- email : 'testuser@testemail.ca' ,
89- password : 'testuserpassword' ,
90- authenticateToken : 'authenticate-token-test' ,
91- }
92-
93- const mocks = [
94- {
95- request : {
96- query : SIGN_IN ,
97- variables : {
98- userName : values . email ,
99- password : values . password ,
86+ describe ( 'and 2fa is enabled' , ( ) => {
87+ it ( 'redirects to authenticate' , async ( ) => {
88+ const values = {
89+ email : 'testuser@testemail.ca' ,
90+ password : 'testuserpassword' ,
91+ authenticateToken : 'authenticate-token-test' ,
92+ }
93+
94+ const mocks = [
95+ {
96+ request : {
97+ query : SIGN_IN ,
98+ variables : {
99+ userName : values . email ,
100+ password : values . password ,
101+ } ,
100102 } ,
101- } ,
102- result : {
103- data : {
104- signIn : {
105- authenticateToken : values . authenticateToken ,
103+ result : {
104+ data : {
105+ signIn : {
106+ result : {
107+ authenticateToken : values . authenticateToken ,
108+ sendMethod : 'email' ,
109+ __typename : 'TFASignInResult' ,
110+ } ,
111+ } ,
106112 } ,
107113 } ,
108114 } ,
109- } ,
110- ]
111-
112- // create a history object and inject it so we can inspect it afterwards
113- // for the side effects of our form submission (a redirect to /!).
114- const history = createMemoryHistory ( {
115- initialEntries : [ '/sign-in' ] ,
116- initialIndex : 0 ,
117- } )
115+ ]
116+
117+ // create a history object and inject it so we can inspect it afterwards
118+ // for the side effects of our form submission (a redirect to /!).
119+ const history = createMemoryHistory ( {
120+ initialEntries : [ '/sign-in' ] ,
121+ initialIndex : 0 ,
122+ } )
123+
124+ const { container, getByRole } = render (
125+ < UserStateProvider
126+ initialState = { { userName : null , jwt : null , tfa : null } }
127+ >
128+ < ThemeProvider theme = { theme } >
129+ < I18nProvider i18n = { i18n } >
130+ < Router history = { history } >
131+ < MockedProvider mocks = { mocks } addTypename = { false } >
132+ < SignInPage />
133+ </ MockedProvider >
134+ </ Router >
135+ </ I18nProvider >
136+ </ ThemeProvider >
137+ </ UserStateProvider > ,
138+ )
118139
119- const { container, getByRole } = render (
120- < UserStateProvider
121- initialState = { { userName : null , jwt : null , tfa : null } }
122- >
123- < ThemeProvider theme = { theme } >
124- < I18nProvider i18n = { i18n } >
125- < Router history = { history } >
126- < MockedProvider mocks = { mocks } addTypename = { false } >
127- < SignInPage />
128- </ MockedProvider >
129- </ Router >
130- </ I18nProvider >
131- </ ThemeProvider >
132- </ UserStateProvider > ,
133- )
140+ const email = container . querySelector ( '#email' )
141+ const password = container . querySelector ( '#password' )
142+ const form = getByRole ( 'form' )
134143
135- const email = container . querySelector ( '#email' )
136- const password = container . querySelector ( '#password' )
137- const form = getByRole ( 'form' )
144+ fireEvent . change ( email , {
145+ target : {
146+ value : values . email ,
147+ } ,
148+ } )
138149
139- fireEvent . change ( email , {
140- target : {
141- value : values . email ,
142- } ,
143- } )
150+ fireEvent . change ( password , {
151+ target : {
152+ value : values . password ,
153+ } ,
154+ } )
155+
156+ fireEvent . submit ( form )
144157
145- fireEvent . change ( password , {
146- target : {
147- value : values . password ,
148- } ,
158+ await waitFor ( ( ) => {
159+ expect ( history . location . pathname ) . toEqual (
160+ `/authenticate/email/${ values . authenticateToken } ` ,
161+ )
162+ } )
149163 } )
164+ } )
165+ describe ( 'and 2fa is NOT enabled' , ( ) => {
166+ it ( 'redirects to home page' , async ( ) => {
167+ const values = {
168+ email : 'testuser@testemail.ca' ,
169+ password : 'testuserpassword' ,
170+ }
171+
172+ const mocks = [
173+ {
174+ request : {
175+ query : SIGN_IN ,
176+ variables : {
177+ userName : values . email ,
178+ password : values . password ,
179+ } ,
180+ } ,
181+ result : {
182+ data : {
183+ signIn : {
184+ result : {
185+ authResult : {
186+ user : {
187+ userName : 'Thalia.Rosenbaum@gmail.com' ,
188+ tfa : false ,
189+ } ,
190+ authToken : 'test123stringJWT' ,
191+ } ,
192+ __typename : 'RegularSignInResult' ,
193+ } ,
194+ } ,
195+ } ,
196+ } ,
197+ } ,
198+ ]
199+
200+ // create a history object and inject it so we can inspect it afterwards
201+ // for the side effects of our form submission (a redirect to /!).
202+ const history = createMemoryHistory ( {
203+ initialEntries : [ '/sign-in' ] ,
204+ initialIndex : 0 ,
205+ } )
206+
207+ const { container, getByRole } = render (
208+ < UserStateProvider
209+ initialState = { { userName : null , jwt : null , tfa : null } }
210+ >
211+ < ThemeProvider theme = { theme } >
212+ < I18nProvider i18n = { i18n } >
213+ < Router history = { history } >
214+ < MockedProvider mocks = { mocks } addTypename = { false } >
215+ < SignInPage />
216+ </ MockedProvider >
217+ </ Router >
218+ </ I18nProvider >
219+ </ ThemeProvider >
220+ </ UserStateProvider > ,
221+ )
150222
151- fireEvent . submit ( form )
223+ const email = container . querySelector ( '#email' )
224+ const password = container . querySelector ( '#password' )
225+ const form = getByRole ( 'form' )
152226
153- await waitFor ( ( ) => {
154- expect ( history . location . pathname ) . toEqual (
155- `/authenticate/${ values . authenticateToken } ` ,
156- )
227+ fireEvent . change ( email , {
228+ target : {
229+ value : values . email ,
230+ } ,
231+ } )
232+
233+ fireEvent . change ( password , {
234+ target : {
235+ value : values . password ,
236+ } ,
237+ } )
238+
239+ fireEvent . submit ( form )
240+
241+ await waitFor ( ( ) => {
242+ expect ( history . location . pathname ) . toEqual ( '/' )
243+ } )
157244 } )
158245 } )
159246 } )
0 commit comments