@@ -4,7 +4,6 @@ import "@testing-library/jest-dom";
44import { configureStore , combineReducers } from "@reduxjs/toolkit" ;
55import { render , waitFor } from "@testing-library/react" ;
66import userEvent from "@testing-library/user-event" ;
7- import axios from "axios" ;
87import { Provider } from "react-redux" ;
98
109import UserSettings from "../widgets/pages/settings" ;
@@ -26,8 +25,6 @@ jest.mock("react-bootstrap/Alert", () => ({
2625 ) : null ,
2726} ) ) ;
2827
29- jest . mock ( "axios" ) ;
30-
3128const reducer = combineReducers ( reducers ) ;
3229
3330const preloadedState = {
@@ -73,6 +70,10 @@ describe("UserSettings test cases", () => {
7370 } ;
7471 }
7572
73+ beforeEach ( ( ) => {
74+ global . fetch = jest . fn ( ) ;
75+ } ) ;
76+
7677 test ( "render main component" , ( ) => {
7778 const { getByText } = setup (
7879 < Provider store = { store } >
@@ -83,7 +84,10 @@ describe("UserSettings test cases", () => {
8384 } ) ;
8485
8586 test ( "successfull user settings update" , async ( ) => {
86- const settingUpdaterSpy = jest . spyOn ( axios , "patch" ) . mockResolvedValueOnce ( { data : { } } ) ;
87+ const settingUpdaterSpy = global . fetch . mockResolvedValueOnce ( {
88+ ok : true ,
89+ json : async ( ) => ( { } ) ,
90+ } ) ;
8791 const { getByRole, getByLabelText, getByTestId, user } = setup (
8892 < Provider store = { store } >
8993 < UserSettings />
@@ -100,27 +104,55 @@ describe("UserSettings test cases", () => {
100104
101105 await waitFor ( ( ) => {
102106 expect ( settingUpdaterSpy ) . toHaveBeenCalledWith (
103- expect . anything ( ) ,
104- {
105- clan : "" ,
106- name : "Dmitry" ,
107- lang : "js" ,
108- locale : undefined ,
109- lang_view : "code" ,
110- db_type : "" ,
111- style_lang : "" ,
112- sound_settings : {
113- level : 6 ,
114- tournament_level : 4 ,
115- type : "standard" ,
116- } ,
117- } ,
118- expect . anything ( ) ,
107+ "/api/v1/settings" ,
108+ expect . objectContaining ( {
109+ method : "PATCH" ,
110+ } ) ,
119111 ) ;
112+
113+ const [ , requestOptions ] = settingUpdaterSpy . mock . calls [ 0 ] ;
114+ expect ( JSON . parse ( requestOptions . body ) ) . toEqual ( {
115+ clan : "" ,
116+ name : "Dmitry" ,
117+ lang : "js" ,
118+ lang_view : "code" ,
119+ db_type : "" ,
120+ style_lang : "" ,
121+ sound_settings : {
122+ level : 6 ,
123+ tournament_level : 4 ,
124+ type : "standard" ,
125+ } ,
126+ } ) ;
120127 expect ( getByRole ( "alert" ) ) . toHaveClass ( "alert-success" ) ;
121128 } ) ;
122129 } ) ;
123130
131+ test ( "successfull locale change" , async ( ) => {
132+ const settingUpdaterSpy = global . fetch . mockResolvedValueOnce ( {
133+ ok : true ,
134+ json : async ( ) => ( { } ) ,
135+ } ) ;
136+ const { getByLabelText, getByTestId, findByText, user } = setup (
137+ < Provider store = { store } >
138+ < UserSettings />
139+ </ Provider > ,
140+ ) ;
141+ const submitButton = getByLabelText ( "SubmitForm" ) ;
142+ const localeSelect = getByTestId ( "localeSelect" ) ;
143+
144+ await user . click ( localeSelect ) ;
145+ await user . click ( await findByText ( "Ru" ) ) ;
146+ await user . click ( submitButton ) ;
147+
148+ await waitFor ( ( ) => {
149+ const [ , requestOptions ] = settingUpdaterSpy . mock . calls [ 0 ] ;
150+ expect ( JSON . parse ( requestOptions . body ) ) . toMatchObject ( {
151+ locale : "ru" ,
152+ } ) ;
153+ } ) ;
154+ } ) ;
155+
124156 test ( "failed user settings update" , async ( ) => {
125157 const { getByTestId, getByLabelText, findByRole, findByText, user } = setup (
126158 < Provider store = { store } >
@@ -144,14 +176,14 @@ describe("UserSettings test cases", () => {
144176 ) . toBeInTheDocument ( ) ;
145177 expect ( submitButton ) . toBeDisabled ( ) ;
146178
147- axios . patch . mockRejectedValueOnce ( {
148- response : {
149- data : {
150- errors : {
151- name : [ "has already been taken" ] ,
152- } ,
179+ global . fetch . mockResolvedValueOnce ( {
180+ ok : false ,
181+ status : 422 ,
182+ json : async ( ) => ( {
183+ errors : {
184+ name : [ "has already been taken" ] ,
153185 } ,
154- } ,
186+ } ) ,
155187 } ) ;
156188
157189 await user . clear ( nameInput ) ;
@@ -163,10 +195,7 @@ describe("UserSettings test cases", () => {
163195
164196 expect ( await findByText ( / H a s a l r e a d y b e e n t a k e n / i) ) . toBeInTheDocument ( ) ;
165197
166- axios . patch . mockRejectedValueOnce ( {
167- response : undefined ,
168- message : "Network Error" ,
169- } ) ;
198+ global . fetch . mockRejectedValueOnce ( new Error ( "Network Error" ) ) ;
170199
171200 await user . clear ( nameInput ) ;
172201 await user . type ( nameInput , "CoolUserName" ) ;
0 commit comments