Best JavaScript code snippet using playwright-internal
metric.model.js
Source: metric.model.js
...67 return youtubeAnalytics.query(videoId, channelId, accessToken).then(function(data){68 if(data.rows){69 debug('youtube analytics value: ', data.rows);70 return Promise.join(71 _this.updateWrapper(videoId + ':' + 'youtube:views', 'Content:Service:Metric', 'totalViews', data.rows[0][0], moment(1000), userId, contentId, campaignId, companyId),72 _this.updateWrapper(videoId + ':' + 'youtube:likes', 'Content:Service:Metric', 'totalLikes', data.rows[0][1], moment(1000), userId, contentId, campaignId, companyId),73 _this.updateWrapper(videoId + ':' + 'youtube:comments', 'Content:Service:Metric', 'totalComments', data.rows[0][2], moment(1000), userId, contentId, campaignId, companyId),74 _this.updateWrapper(videoId + ':' + 'youtube:shares', 'Content:Service:Metric', 'totalShares', data.rows[0][3], moment(1000), userId, contentId, campaignId, companyId),75 _this.updateWrapper(videoId + ':' + 'youtube:averageViewDuration', 'Content:Service:Metric', 'totalAverageViewDuration', data.rows[0][4], moment(1000), userId, contentId, campaignId, companyId),76 function(){77 return 1;78 }79 );80 }81 });82});83MetricSchema.statics.updateYoutubeDailyMetrics = Promise.method(function(videoId, channelId, service, accessToken, userId, contentId, campaignId, companyId){84 var _this = this;85 debug('update youtube daily metrics');86 return youtubeAnalytics.queryByDay(videoId, channelId, accessToken).then(function(data){87 if(data.rows){88 debug('youtube daily analytics value: ', data.rows);89 return Promise.each(data.rows, function(item){90 var day = moment(item[0], 'YYYY-MM-DD');91 debug('youtube values: ', item);92 debug('day: ', day);93 return Promise.join(94 _this.updateWrapper(contentId + ':' + 'youtube:day:views', 'Content:Service:Dimension:Metric', 'views', item[1], day, userId, contentId, campaignId, companyId),95 _this.updateWrapper(contentId + ':' + 'youtube:day:likes', 'Content:Service:Dimension:Metric', 'likes', item[2], day, userId, contentId, campaignId, companyId),96 _this.updateWrapper(contentId + ':' + 'youtube:day:comments', 'Content:Service:Dimension:Metric', 'comments', item[3], day, userId, contentId, campaignId, companyId),97 _this.updateWrapper(contentId + ':' + 'youtube:day:shares', 'Content:Service:Dimension:Metric', 'shares', item[4], day, userId, contentId, campaignId, companyId),98 _this.updateWrapper(contentId + ':' + 'youtube:day:estimatedMinutesWatched', 'Content:Service:Dimension:Metric', 'estimatedMinutesWatched', item[5], day, userId, contentId, campaignId, companyId),99 function(){100 return 1;101 }102 );103 });104 }105 else{106 console.log('no data found: ', data);107 return 0;108 }109 });110});111MetricSchema.statics.getYoutubeMetrics = Promise.method(function(videoId){112 var _this = this;113 debug('get youtube metrics');114 return Promise.join(115 _this.getCached(videoId, 'youtube', 'views'),116 _this.getCached(videoId, 'youtube', 'likes'),117 _this.getCached(videoId, 'youtube', 'comments'),118 _this.getCached(videoId, 'youtube', 'shares'),119 _this.getCached(videoId, 'youtube', 'averageViewDuration'),120 function(views, likes, comments, shares, duration){121 return {122 views: views || {value: 0},123 likes: likes || {value: 0},124 comments: comments || {value: 0},125 shares: shares || {value: 0},126 averageViewDuration: duration || {value: 0}127 };128 }129 );130});131MetricSchema.statics.fetch = Promise.method(function(identifier, serviceName, userId, accessToken){132 var _this = this;133 debug('fetch metrics for ' + serviceName + ' service');134 switch(serviceName){135 case 'twitter':136 return twitter.showUser(identifier, accessToken.token, accessToken.secret)137 .then(function(data){138 debug('twitter user: ' + data.name);139 return _this.updateWrapper(140 userId + ':' + serviceName + ':followers',141 'User:Service:Metric',142 'followers',143 data.followers_count,144 moment(1000),145 userId);146 }).catch(function(err){147 debug('err: ', err);148 });149 case 'facebook':150 return facebook.showUser('me', accessToken).then(function(data){151 debug('facebook user: ', data.name);152 return _this.updateWrapper(153 userId + ':' + serviceName + ':followers',154 'User:Service:Metric',155 'followers',156 data.friends ? data.friends.summary.total_count : 0,157 moment(1000),158 userId);159 });160 case 'youtube':161 return youtube.showUser('self', accessToken).then(function(data){162 debug('youtube value: ', data.statistics.subscriberCount);163 var subscriberCount = _this.updateWrapper(164 userId + ':' + serviceName + ':followers',165 'User:Service:Metric',166 'followers',167 data.statistics.subscriberCount,168 moment(1000),169 userId);170 var viewCount = _this.updateWrapper(171 userId + ':' + serviceName + ':viewCount',172 'User:Service:Metric',173 'viewCount',174 data.statistics.viewCount,175 moment(1000),176 userId);177 var videoCount = _this.updateWrapper(178 userId + ':' + serviceName + ':videoCount',179 'User:Service:Metric',180 'videoCount',181 data.statistics.videoCount,182 moment(1000),183 userId);184 return Promise.join(subscriberCount, viewCount, videoCount, function(sub, view, video){185 return [sub, view, video]; 186 });187 });188 case 'googleplus':189 return googleplus.showUser('me', accessToken).then(function(data){190 debug('googleplus value: ', data.circledByCount);191 return _this.updateWrapper(192 userId + ':' + serviceName + ':followers',193 'User:Service:Metric',194 'followers',195 data.circledByCount,196 moment(1000),197 userId);198 });199 case 'googleanalytics':200 return googleanalytics.showUser('me', accessToken).then(function(data){201 debug('google analytics account: ', data);202 return _this.updateWrapper(203 userId + ':' + serviceName + ':followers',204 'User:Service:Metric',205 'followers',206 data.friends.summary.total_count,207 moment(1000),208 userId);209 }).catch(function(err){210 debug(serviceName + ' not found for this provider');211 return null;212 });213 case 'instagram':214 return instagram.showUser('self', accessToken).then(function(data){215 debug('instagram user: ', data.full_name);216 return _this.updateWrapper(217 userId + ':' + serviceName + ':followers',218 'User:Service:Metric',219 'followers',220 data.counts.followed_by,221 moment(1000),222 userId);223 });224 default:225 return 0;226 }227});228MetricSchema.static('updateWrapper', Promise.method(function(id, type, metric, value, timestamp, userId, contentId, campaignId, companyId) {229 if(!value || value===0){230 return 0;...
NavBar.test.js
Source: NavBar.test.js
...62 it('should render the navbar even when the user is still undefined', async () => {63 // Arrange64 // Act65 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);66 await updateWrapper(wrapper);67 // Assert68 expect(wrapper).toMatchSnapshot();69 const collapse = wrapper.find('Collapse');70 expect(collapse.props().isOpen).toBe(false);71 const modalAbout = wrapper.find('ModalAbout');72 expect(modalAbout.length).toBe(0);73 wrapper.unmount();74 });75 it('should trigger the local storage rebuild when we click on the rebuild dropdown item', async () => {76 // Arrange77 localStorageBuilder.tryToRun.mockImplementation(async () => {});78 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);79 await updateWrapper(wrapper);80 const dropdownItemRebuildLocalStorage = wrapper.find('DropdownItem').at(5);81 // Act82 dropdownItemRebuildLocalStorage.simulate('click');83 await updateWrapper(wrapper);84 // Assert85 expect(localStorageBuilder.tryToRun).toBeCalledTimes(1);86 });87 it('should open the modal about when the user click on the about button', async () => {88 // Arrange89 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);90 await updateWrapper(wrapper);91 const dropdownItemAbout = wrapper.find('DropdownItem').at(9);92 // Act93 dropdownItemAbout.simulate('click');94 await updateWrapper(wrapper);95 // Assert96 const modalAbout = wrapper.find('ModalAbout');97 expect(modalAbout.props().visible).toBe(true);98 });99 it('should toggle the navbar when the user click on the navbar button', async () => {100 // Arrange101 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);102 await updateWrapper(wrapper);103 const navBarButton = wrapper.find('NavbarToggler');104 // Act105 navBarButton.simulate('click');106 await updateWrapper(wrapper);107 // Assert108 const collapse = wrapper.find('Collapse');109 expect(collapse.props().isOpen).toBe(true);110 });111 it('should re-render the navbar when the user changed', async () => {112 // Arrange113 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);114 await updateWrapper(wrapper);115 const user = {116 _uiId: 'user_01',117 name: 'torruella',118 email: 'test@axios',119 firstname: 'paul',120 imageFolderSizeInByte: 1000,121 imageFolderSizeLimitInByte: 10000,122 };123 // Act124 userContext.onUserChanged(user);125 await updateWrapper(wrapper);126 // Assert127 const collapse = wrapper.find('Collapse');128 expect(collapse.props().isOpen).toBe(false);129 const modalAbout = wrapper.find('ModalAbout');130 expect(modalAbout.length).toBe(0);131 const dropdownToggle = wrapper.find('DropdownToggle').at(0);132 expect(dropdownToggle.text()).toBe(user.email);133 const imageFolderGauge = wrapper.find('Memo(ImageFolderGauge)');134 expect(imageFolderGauge.props()).toEqual({ storageSizeInMB: (1000 / 1048576), storageSizeLimitInMB: (10000 / 1048576) });135 });136 it('should re-render the navbar when the user add an image', async () => {137 // Arrange138 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);139 await updateWrapper(wrapper);140 const user = {141 _uiId: 'user_01',142 name: 'torruella',143 email: 'test@axios',144 firstname: 'paul',145 imageFolderSizeInByte: 1000,146 imageFolderSizeLimitInByte: 10000,147 };148 userContext.onUserChanged(user);149 await updateWrapper(wrapper);150 // Act151 userContext.onImageAdded(100);152 await updateWrapper(wrapper);153 // Assert154 const collapse = wrapper.find('Collapse');155 expect(collapse.props().isOpen).toBe(false);156 const modalAbout = wrapper.find('ModalAbout');157 expect(modalAbout.length).toBe(0);158 const dropdownToggle = wrapper.find('DropdownToggle').at(0);159 expect(dropdownToggle.text()).toBe(user.email);160 const imageFolderGauge = wrapper.find('Memo(ImageFolderGauge)');161 expect(imageFolderGauge.props()).toEqual({ storageSizeInMB: (1100 / 1048576), storageSizeLimitInMB: (10000 / 1048576) });162 });163 it('should re-render the navbar when the user removed an image', async () => {164 // Arrange165 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);166 await updateWrapper(wrapper);167 const user = {168 _uiId: 'user_01',169 name: 'torruella',170 email: 'test@axios',171 firstname: 'paul',172 imageFolderSizeInByte: 1000,173 imageFolderSizeLimitInByte: 10000,174 };175 userContext.onUserChanged(user);176 await updateWrapper(wrapper);177 // Act178 userContext.onImageRemoved(100);179 await updateWrapper(wrapper);180 // Assert181 const collapse = wrapper.find('Collapse');182 expect(collapse.props().isOpen).toBe(false);183 const modalAbout = wrapper.find('ModalAbout');184 expect(modalAbout.length).toBe(0);185 const dropdownToggle = wrapper.find('DropdownToggle').at(0);186 expect(dropdownToggle.text()).toBe(user.email);187 const imageFolderGauge = wrapper.find('Memo(ImageFolderGauge)');188 expect(imageFolderGauge.props()).toEqual({ storageSizeInMB: (900 / 1048576), storageSizeLimitInMB: (10000 / 1048576) });189 });190 it('should logout when the user clicks on logout', async () => {191 // Arrange192 jest.spyOn(userProxy, 'logout').mockImplementation(() => userContext.onUserChanged(undefined));193 const wrapper = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><NavBar /></IntlProvider>);194 await updateWrapper(wrapper);195 const user = {196 _uiId: 'user_01',197 name: 'torruella',198 email: 'test@axios',199 firstname: 'paul',200 imageFolderSizeInByte: 1000,201 imageFolderSizeLimitInByte: 10000,202 };203 userContext.onUserChanged(user);204 await updateWrapper(wrapper);205 // Act206 const logoutButton = wrapper.find('DropdownItem').at(7);207 logoutButton.simulate('click');208 await updateWrapper(wrapper);209 // Assert210 const collapse = wrapper.find('Collapse');211 expect(collapse.props().isOpen).toBe(false);212 const modalAbout = wrapper.find('ModalAbout');213 expect(modalAbout.length).toBe(0);214 const dropdownToggle = wrapper.find('DropdownToggle').at(0);215 expect(dropdownToggle.text()).toBe('Login');216 const imageFolderGauge = wrapper.find('Memo(ImageFolderGauge)');217 expect(imageFolderGauge.props()).toEqual({ storageSizeInMB: 0, storageSizeLimitInMB: 0 });218 expect(userProxy.logout).toHaveBeenCalledTimes(1);219 });...
ModalEditTask.test.js
Source: ModalEditTask.test.js
...49 isVisible = !isVisible;50 });51 // Act52 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);53 await updateWrapper(modalEditTask);54 // Assert55 expect(modalEditTask).toMatchSnapshot();56 expect(modalEditTask.props().visible).toBe(true);57 expect(modalEditTask.find('ModalFooter').find('Button').length).toBe(3);58 });59 it('should render 2 buttons (cancel/create) when we create a new entry', async () => {60 // Arrange61 taskProxy.existTask.mockImplementation(async () => Promise.resolve(false));62 const onTaskSaved = jest.fn();63 const onTaskDeleted = jest.fn();64 let isVisible = true;65 const toggleFn = jest.fn().mockImplementation(() => {66 isVisible = !isVisible;67 });68 // Act69 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);70 await updateWrapper(modalEditTask);71 // Assert72 expect(modalEditTask.props().visible).toBe(true);73 expect(modalEditTask.find('ModalFooter').find('Button').length).toBe(2);74 });75 it('Should save the task using the task proxy when clicking on Save', async () => {76 // Arrange77 taskProxy.existTask.mockImplementation(async () => Promise.resolve(true));78 jest.spyOn(taskProxy, 'createOrSaveTask').mockImplementation(async (equipmentId, newTask) => Promise.resolve(newTask));79 const onTaskSaved = jest.fn();80 const onTaskDeleted = jest.fn();81 let isVisible = true;82 const toggleFn = jest.fn().mockImplementation(() => {83 isVisible = !isVisible;84 });85 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);86 await updateWrapper(modalEditTask);87 const myForm = modalEditTask.find('Memo(MyForm)');88 // Act89 myForm.simulate('submit');90 await updateWrapper(modalEditTask);91 // Assert92 expect(taskProxy.createOrSaveTask).toBeCalledTimes(1);93 expect(onTaskSaved).toBeCalledTimes(1);94 expect(toggleFn).toBeCalledTimes(1);95 });96 it('Should close the modal when clicking on Cancel', async () => {97 // Arrange98 taskProxy.existTask.mockImplementation(async () => Promise.resolve(true));99 const onTaskSaved = jest.fn();100 const onTaskDeleted = jest.fn();101 let isVisible = true;102 const toggleFn = jest.fn().mockImplementation(() => {103 isVisible = !isVisible;104 });105 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);106 await updateWrapper(modalEditTask);107 const cancelButton = modalEditTask.find('ModalFooter').find('Button').at(1);108 // Act109 cancelButton.simulate('click');110 await updateWrapper(modalEditTask);111 // Assert112 expect(toggleFn).toBeCalledTimes(1);113 });114 it('The deletion should be preceded by a confirmation message', async () => {115 // Arrange116 taskProxy.existTask.mockImplementation(async () => Promise.resolve(true));117 const onTaskSaved = jest.fn();118 const onTaskDeleted = jest.fn();119 let isVisible = true;120 const toggleFn = jest.fn().mockImplementation(() => {121 isVisible = !isVisible;122 });123 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);124 await updateWrapper(modalEditTask);125 const deleteButton = modalEditTask.find('ModalFooter').find('Button').at(2);126 // Act127 deleteButton.simulate('click');128 await updateWrapper(modalEditTask);129 // Assert130 const confirmationModal = modalEditTask.find('ModalYesNoConfirmation');131 expect(confirmationModal.props().visible).toBe(true);132 });133 it('Clicking yes on the confirmation should call the entryProxy.delete function', async () => {134 // Arrange135 taskProxy.existTask.mockImplementation(async () => Promise.resolve(true));136 jest.spyOn(taskProxy, 'deleteTask');137 const onTaskSaved = jest.fn();138 const onTaskDeleted = jest.fn();139 let isVisible = true;140 const toggleFn = jest.fn().mockImplementation(() => {141 isVisible = !isVisible;142 });143 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);144 await updateWrapper(modalEditTask);145 const deleteButton = modalEditTask.find('ModalFooter').find('Button').at(2);146 deleteButton.simulate('click');147 await updateWrapper(modalEditTask);148 const confirmationModal = modalEditTask.find('ModalYesNoConfirmation');149 const yesButton = confirmationModal.find('ActionButton');150 // Act151 yesButton.simulate('click');152 await updateWrapper(modalEditTask);153 // Assert154 expect(taskProxy.deleteTask).toBeCalledTimes(1);155 expect(onTaskDeleted).toBeCalledTimes(1);156 expect(toggleFn).toBeCalledTimes(1);157 expect(modalEditTask.find('ModalYesNoConfirmation').props().visible).toBe(false);158 });159 it('Clicking No on the confirmation should not call the entryProxy.delete function but just close the confirmation modal', async () => {160 // Arrange161 taskProxy.existTask.mockImplementation(async () => Promise.resolve(true));162 jest.spyOn(taskProxy, 'deleteTask');163 const onTaskSaved = jest.fn();164 const onTaskDeleted = jest.fn();165 let isVisible = true;166 const toggleFn = jest.fn().mockImplementation(() => {167 isVisible = !isVisible;168 });169 const modalEditTask = mount(<ModalEditTask equipment={equipment} task={task} visible={isVisible} onTaskSaved={onTaskSaved} onTaskDeleted={onTaskDeleted} toggle={toggleFn} />);170 await updateWrapper(modalEditTask);171 const deleteButton = modalEditTask.find('ModalFooter').find('Button').at(2);172 deleteButton.simulate('click');173 await updateWrapper(modalEditTask);174 const confirmationModal = modalEditTask.find('ModalYesNoConfirmation');175 const noButton = confirmationModal.find('Button').at(1);176 // Act177 noButton.simulate('click');178 await updateWrapper(modalEditTask);179 // Assert180 expect(taskProxy.deleteTask).toBeCalledTimes(0);181 expect(onTaskDeleted).toBeCalledTimes(0);182 expect(toggleFn).toBeCalledTimes(0);183 expect(modalEditTask.find('ModalYesNoConfirmation').props().visible).toBe(false);184 });...
ModalPasswordReset.test.js
Source: ModalPasswordReset.test.js
...23 // Arrange24 const toggle = jest.fn();25 // Act26 const modalPasswordReset = mount(<ModalPasswordReset visible toggle={toggle} data={data} />);27 await updateWrapper(modalPasswordReset);28 // Assert29 expect(modalPasswordReset).toMatchSnapshot();30 expect(modalPasswordReset.find('ModalFooter').find('Button').length).toBe(2);31 const alerts = modalPasswordReset.find('Alerts');32 expect(alerts.length).toBe(0);33 });34 it('should close the modal if the user click Cancel', async () => {35 // Arrange36 const toggle = jest.fn();37 const modalPasswordReset = mount(<ModalPasswordReset visible toggle={toggle} data={data} />);38 await updateWrapper(modalPasswordReset);39 const cancelButton = modalPasswordReset.find('ModalFooter').find('Button').at(1);40 // Act41 cancelButton.simulate('click');42 await updateWrapper(modalPasswordReset);43 // Assert44 expect(modalPasswordReset.find('ModalFooter').find('Button').length).toBe(2);45 const alerts = modalPasswordReset.find('Alerts');46 expect(alerts.length).toBe(0);47 expect(toggle).toBeCalledTimes(1);48 });49 it('should call resetPassword with all the data input when the user click on reset Password, then the modal should close if the user click the Close button', async () => {50 // Arrange51 const toggle = jest.fn();52 jest.spyOn(userProxy, 'resetPassword').mockImplementation(() => Promise.resolve());53 const modalPasswordReset = mount(<ModalPasswordReset visible toggle={toggle} data={data} />);54 await updateWrapper(modalPasswordReset);55 const myForm = modalPasswordReset.find('Memo(MyForm)');56 const inputs = myForm.find('input');57 inputs.at(0).simulate('change', { target: { value: data.email } });58 inputs.at(1).simulate('change', { target: { value: 'password1' } });59 inputs.at(2).simulate('change', { target: { value: 'password1' } });60 await updateWrapper(modalPasswordReset);61 // Act62 modalPasswordReset.find('Memo(MyForm)').simulate('submit');63 await updateWrapper(modalPasswordReset);64 // Assert65 expect(modalPasswordReset.find('ModalFooter').find('Button').length).toBe(1);66 const alerts = modalPasswordReset.find('Alerts');67 expect(alerts.length).toBe(1);68 expect(alerts.props()).toEqual({ error: 'confirmPasswordChange', color: 'success' });69 expect(toggle).toBeCalledTimes(0);70 expect(userProxy.resetPassword).toBeCalledTimes(1);71 expect(userProxy.resetPassword.mock.calls[0][0]).toEqual(data.email);72 expect(userProxy.resetPassword.mock.calls[0][1]).toEqual('password1');73 // Act74 modalPasswordReset.find('Memo(MyForm)').simulate('submit');75 await updateWrapper(modalPasswordReset);76 // Assert77 expect(toggle).toBeCalledTimes(1);78 });79 it('should display an error if the 2 passwords are not the same', async () => {80 // Arrange81 const toggle = jest.fn();82 jest.spyOn(userProxy, 'resetPassword').mockImplementation(() => Promise.resolve());83 const modalPasswordReset = mount(<ModalPasswordReset visible toggle={toggle} data={data} />);84 await updateWrapper(modalPasswordReset);85 const myForm = modalPasswordReset.find('Memo(MyForm)');86 const inputs = myForm.find('input');87 inputs.at(0).simulate('change', { target: { value: data.email } });88 inputs.at(1).simulate('change', { target: { value: 'password1' } });89 inputs.at(2).simulate('change', { target: { value: 'password2' } });90 await updateWrapper(modalPasswordReset);91 // Act92 modalPasswordReset.find('Memo(MyForm)').simulate('submit');93 await updateWrapper(modalPasswordReset);94 // Assert95 expect(modalPasswordReset.find('ModalFooter').find('Button').length).toBe(2);96 const alerts = modalPasswordReset.find('Alerts');97 expect(alerts.length).toBe(1);98 expect(alerts.props()).toEqual({ errors: { password: 'passwordsHaveToBeIdentical' } });99 expect(toggle).toBeCalledTimes(0);100 expect(userProxy.resetPassword).toBeCalledTimes(0);101 });102 it('should display an error message if an error occurs during the password reset', async () => {103 // Arrange104 const toggle = jest.fn();105 jest.spyOn(userProxy, 'resetPassword').mockImplementation(() => Promise.reject(new HttpError({ error: 'network error' })));106 const modalPasswordReset = mount(<ModalPasswordReset visible toggle={toggle} data={data} />);107 await updateWrapper(modalPasswordReset);108 const myForm = modalPasswordReset.find('Memo(MyForm)');109 const inputs = myForm.find('input');110 inputs.at(0).simulate('change', { target: { value: data.email } });111 inputs.at(1).simulate('change', { target: { value: 'password1' } });112 inputs.at(2).simulate('change', { target: { value: 'password1' } });113 await updateWrapper(modalPasswordReset);114 // Act115 modalPasswordReset.find('Memo(MyForm)').simulate('submit');116 await updateWrapper(modalPasswordReset);117 // Assert118 expect(modalPasswordReset.find('ModalFooter').find('Button').length).toBe(2);119 const alerts = modalPasswordReset.find('Alerts');120 expect(alerts.length).toBe(1);121 expect(alerts.props()).toEqual({ errors: { error: 'network error' } });122 expect(toggle).toBeCalledTimes(0);123 expect(userProxy.resetPassword).toBeCalledTimes(1);124 expect(userProxy.resetPassword.mock.calls[0][0]).toEqual(data.email);125 expect(userProxy.resetPassword.mock.calls[0][1]).toEqual('password1');126 });...
ModalSignup.test.js
Source: ModalSignup.test.js
...40 uuidv4.mockImplementation(() => 'user_01');41 const toggle = jest.fn();42 // Act43 const modalSignup = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><ModalSignup visible toggle={toggle} /></IntlProvider>);44 await updateWrapper(modalSignup);45 // Assert46 expect(modalSignup).toMatchSnapshot();47 expect(modalSignup.find('ModalFooter').find('Button').length).toBe(2);48 const alerts = modalSignup.find('Alerts');49 expect(alerts.length).toBe(0);50 });51 it('should close the modal if the user click Cancel', async () => {52 // Arrange53 uuidv4.mockImplementation(() => 'user_01');54 const toggle = jest.fn();55 const modalSignup = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><ModalSignup visible toggle={toggle} /></IntlProvider>);56 await updateWrapper(modalSignup);57 const cancelButton = modalSignup.find('ModalFooter').find('Button').at(1);58 // Act59 cancelButton.simulate('click');60 await updateWrapper(modalSignup);61 // Assert62 expect(modalSignup.find('ModalFooter').find('Button').length).toBe(2);63 const alerts = modalSignup.find('Alerts');64 expect(alerts.length).toBe(0);65 expect(toggle).toBeCalledTimes(1);66 });67 it('should call signup with all the data input when the user click on signup', async () => {68 // Arrange69 uuidv4.mockImplementation(() => user._uiId);70 const toggle = jest.fn();71 jest.spyOn(userProxy, 'signup').mockImplementation(() => Promise.resolve());72 const modalSignup = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><ModalSignup visible toggle={toggle} /></IntlProvider>);73 await updateWrapper(modalSignup);74 const myForm = modalSignup.find('Memo(MyForm)');75 const inputs = myForm.find('input');76 inputs.at(0).simulate('change', { target: { value: user.name } });77 inputs.at(1).simulate('change', { target: { value: user.firstname } });78 inputs.at(2).simulate('change', { target: { value: user.email } });79 inputs.at(3).simulate('change', { target: { value: user.password } });80 inputs.at(4).simulate('change', { target: { checked: user.privacyPolicyAccepted } });81 await updateWrapper(modalSignup);82 // Act83 modalSignup.find('Memo(MyForm)').simulate('submit');84 await updateWrapper(modalSignup);85 // Assert86 expect(modalSignup.find('ModalFooter').find('Button').length).toBe(2);87 const alerts = modalSignup.find('Alerts');88 expect(alerts.length).toBe(1);89 expect(alerts.props()).toEqual({ error: 'emailSent', color: 'success' });90 expect(toggle).toBeCalledTimes(0);91 expect(userProxy.signup).toBeCalledTimes(1);92 expect(userProxy.signup.mock.calls[0][0]).toEqual(user);93 });94 it('should display an error if an error occurs during signup', async () => {95 // Arrange96 uuidv4.mockImplementation(() => user._uiId);97 const toggle = jest.fn();98 jest.spyOn(userProxy, 'signup').mockImplementation(() => Promise.reject(new HttpError({ email: 'alreadyexisting' })));99 const modalSignup = mount(<IntlProvider locale="en-US" timeZone="Asia/Kuala_Lumpur"><ModalSignup visible toggle={toggle} /></IntlProvider>);100 await updateWrapper(modalSignup);101 const myForm = modalSignup.find('Memo(MyForm)');102 const inputs = myForm.find('input');103 inputs.at(0).simulate('change', { target: { value: user.name } });104 inputs.at(1).simulate('change', { target: { value: user.firstname } });105 inputs.at(2).simulate('change', { target: { value: user.email } });106 inputs.at(3).simulate('change', { target: { value: user.password } });107 inputs.at(4).simulate('change', { target: { checked: user.privacyPolicyAccepted } });108 await updateWrapper(modalSignup);109 // Act110 modalSignup.find('Memo(MyForm)').simulate('submit');111 await updateWrapper(modalSignup);112 // Assert113 expect(modalSignup.find('ModalFooter').find('Button').length).toBe(2);114 const alerts = modalSignup.find('Alerts');115 expect(alerts.length).toBe(1);116 expect(alerts.props()).toEqual({ errors: { email: 'alreadyexisting' } });117 expect(toggle).toBeCalledTimes(0);118 expect(userProxy.signup).toBeCalledTimes(1);119 expect(userProxy.signup.mock.calls[0][0]).toEqual(user);120 });...
MailHover.spec.js
Source: MailHover.spec.js
...28 });29 }30 beforeEach(()=>{31 moxios.install();32 updateWrapper()33 });34 afterEach(() => {35 moxios.uninstall()36 })37 it('is a vue instance',()=>{38 expect(wrapper.isVueInstance()).toBeTruthy();39 });40 it('calls `popOver` method on mouseeneter event',() => {41 updateWrapper()42 wrapper.vm.popOver =jest.fn()43 wrapper.find('#main').trigger('mouseenter')44 expect(wrapper.vm.popOver).toHaveBeenCalled()45 });46 it('calls `popOver` method on mouseleave event',() => {47 updateWrapper()48 wrapper.vm.popOver =jest.fn()49 wrapper.find('#main').trigger('mouseleave')50 expect(wrapper.vm.popOver).toHaveBeenCalled()51 });52 it('calls `popOver` method with number on `mouseenter` event',()=>{53 updateWrapper()54 wrapper.setProps({data:{id:12}})55 wrapper.vm.popOver =jest.fn()56 wrapper.find('#main').trigger('mouseenter')57 expect(wrapper.vm.popOver).toHaveBeenCalledWith(12)58 });59 it('calls `popOver` method with `null` value on `mouseleave` event',()=>{60 updateWrapper()61 wrapper.setProps({data:{id:12}})62 wrapper.vm.popOver =jest.fn()63 wrapper.find('#main').trigger('mouseleave')64 expect(wrapper.vm.popOver).toHaveBeenCalledWith(null)65 });66 it('calls `getData` method when click on `reciever_mail` value',() => {67 updateWrapper()68 wrapper.vm.getData =jest.fn()69 wrapper.find('#action_mail').trigger('click')70 expect(wrapper.vm.getData).toHaveBeenCalled()71 });72 it('calls `getData` method with correct value',() => {73 updateWrapper()74 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})75 wrapper.vm.getData =jest.fn()76 wrapper.find('#action_mail').trigger('click')77 expect(wrapper.vm.getData).toHaveBeenCalledWith('test@gmail.com',12)78 });79 it('show `popover` when ids are matching',() => {80 updateWrapper()81 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})82 wrapper.setData({popId : 12})83 expect(wrapper.find('popover-stub').exists()).toBe(true)84 });85 it('does not show `popover` when ids are not matching',() => {86 updateWrapper()87 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})88 wrapper.setData({popId : 10})89 expect(wrapper.find('popover-stub').exists()).toBe(false)90 });91 it('makes an API call when `getData` method called', (done) => {92 updateWrapper();93 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})94 wrapper.vm.getData('test@gmail.com',12);95 setTimeout(()=>{96 expect(moxios.requests.__items.length).toBe(1)97 expect(moxios.requests.mostRecent().url).toBe('/api/get-user-by-email?email=test@gmail.com')98 done();99 },50)100 });101 it('shows `loader` if loading is true, `popId` and `data.id` are equal ',()=>{102 updateWrapper();103 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})104 wrapper.setData({popId : 12})105 wrapper.vm.loading = true;106 expect(wrapper.find('loader-stub').exists()).toBe(true)107 });108 it('does not show `loader` if loading is true, `popId` and `data.id` are not equal ',()=>{109 updateWrapper();110 wrapper.setProps({data:{id:12,reciever_mail:'test@gmail.com'}})111 wrapper.setData({popId : 10})112 wrapper.vm.loading = true;113 expect(wrapper.find('loader-stub').exists()).toBe(false)114 });...
LocationCreateEdit.spec.js
Source: LocationCreateEdit.spec.js
...20 }21 22 beforeEach(() => {23 24 updateWrapper();25 moxios.install();26 })27 afterEach(() => {28 29 moxios.uninstall()30 })31 it('makes an API call', (done) => {32 33 updateWrapper();34 35 wrapper.vm.getInitialValues(1);36 37 stubRequest();38 39 setTimeout(()=>{40 41 expect(moxios.requests.mostRecent().url).toBe('/api/location/1')42 done();43 44 },50)45 });46 it('makes `loading` false when `getInitialValues` method return error', (done) => {47 48 updateWrapper();49 wrapper.vm.getInitialValues(1);50 51 stubRequest(400);52 53 setTimeout(()=>{54 55 expect(wrapper.vm.loading).toEqual(false);56 57 done();58 59 },50)60 })61 it('updates `name` of the label when onChange method is called with suitable parameters',()=>{62 wrapper.vm.onChange('test', 'title');63 expect(wrapper.vm.title).toBe('test');64 })65 it('makes an AJAX call when onSubmit method is called',(done)=>{66 updateWrapper()67 wrapper.setData({ loading : false, hasDataPopulated : true})68 wrapper.vm.isValid = () =>{return true}69 wrapper.vm.onSubmit()70 expect(wrapper.vm.loading).toBe(true)71 mockSubmitRequest();72 setTimeout(()=>{73 expect(moxios.requests.mostRecent().url).toBe('/api/location')74 expect(wrapper.vm.loading).toBe(false)75 done();76 },1);77 });78 it('makes an loading as false when onSubmit method return error',(done)=>{79 updateWrapper()80 wrapper.setData({ loading : false, hasDataPopulated : true,location_id : 1})81 wrapper.vm.isValid = () =>{return true}82 wrapper.vm.onSubmit()83 mockSubmitRequest(400);84 setTimeout(()=>{85 expect(wrapper.vm.loading).toBe(false)86 done();87 },1);88 });89 it("updates `title value when page is in edit`",()=>{90 91 updateWrapper()92 wrapper.vm.getInitialValues = jest.fn();93 wrapper.vm.getValues('/10/edit');94 expect(wrapper.vm.$data.page_title).toEqual('edit_location');95 expect(wrapper.vm.getInitialValues).toHaveBeenCalled();96 });97 it('call `isValid` method when onSubmit method is called',(done)=>{98 updateWrapper()99 wrapper.setData({ loading : false, hasDataPopulated : true})100 wrapper.vm.isValid =jest.fn() 101 wrapper.vm.onSubmit()102 expect(wrapper.vm.isValid).toHaveBeenCalled()103 104 done();105 });106 it('isValid - should return false ', done => {107 108 validation.validateLocationSettings = () =>{return {errors : [], isValid : false}}109 110 expect(wrapper.vm.isValid()).toBe(false)111 112 done()...
TaskProgressBar.test.js
Source: TaskProgressBar.test.js
...23 total: 0,24 remaining: 0,25 }));26 const syncAlertWrapper = mount(<TaskProgressBar taskWithProgress={syncService} color="warning" title="syncInProgress" />);27 await updateWrapper(syncAlertWrapper);28 // Act29 await syncAlertNotifier({30 isRunning: false,31 total: 5,32 remaining: 5,33 });34 await updateWrapper(syncAlertWrapper);35 // Assert36 const progress = syncAlertWrapper.find('Progress');37 expect(progress.length).toBe(0);38 });39 it('should display the SyncAlert when the synchronisation starts', async () => {40 // Arrange41 let syncAlertNotifier;42 syncService.registerListener.mockImplementation((listener) => {43 syncAlertNotifier = listener;44 });45 syncService.getContext.mockImplementation(() => ({46 isRunning: false,47 total: 0,48 remaining: 0,49 }));50 const syncAlertWrapper = mount(<TaskProgressBar taskWithProgress={syncService} color="warning" title="syncInProgress" />);51 await updateWrapper(syncAlertWrapper);52 // Act53 await syncAlertNotifier({54 isRunning: true,55 total: 5,56 remaining: 5,57 });58 await updateWrapper(syncAlertWrapper);59 // Assert60 const progress = syncAlertWrapper.find('Progress');61 expect(progress.props().value).toBe(100);62 });63 it('should display the progress when the synchronisation is running', async () => {64 // Arrange65 let syncAlertNotifier;66 syncService.registerListener.mockImplementation((listener) => {67 syncAlertNotifier = listener;68 });69 syncService.getContext.mockImplementation(() => ({70 isRunning: false,71 total: 0,72 remaining: 0,73 }));74 const syncAlertWrapper = mount(<TaskProgressBar taskWithProgress={syncService} color="warning" title="syncInProgress" />);75 await updateWrapper(syncAlertWrapper);76 await syncAlertNotifier({77 isRunning: true,78 total: 5,79 remaining: 5,80 });81 await updateWrapper(syncAlertWrapper);82 // Act83 await syncAlertNotifier({84 isRunning: true,85 total: 5,86 remaining: 3,87 });88 await updateWrapper(syncAlertWrapper);89 // Assert90 const progress = syncAlertWrapper.find('Progress');91 expect(progress.props().value).toBe(60);92 });...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.evaluate(() => {7 const input = document.querySelector('input[type="text"]');8 input.value = 'Hello World!';9 window.updateWrapper(input);10 });11 await browser.close();12})();13await page.type(selector, text, options)14const { chromium } = require('playwright');15(async () => {16 const browser = await chromium.launch({ headless: false });17 const context = await browser.newContext();18 const page = await context.newPage();19 await page.type('input[type="text"]', 'Hello World!');
Using AI Code Generation
1const { updateWrapper } = require('playwright/lib/server/wrapper');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const page = await browser.newPage();6 const element = await page.$('h1');7 await updateWrapper(element, {8 attributes: { id: 'test', class: 'test' },9 });10 await browser.close();11})();
Using AI Code Generation
1const { updateWrapper } = require('playwright/lib/internal/frames');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.waitForSelector('text=Get started');8 const elementHandle = await page.$('text=Get started');9 await updateWrapper(elementHandle, (e) => {10 e.style.backgroundColor = 'red';11 });12 await page.screenshot({ path: `example.png` });13 await browser.close();14})();
Using AI Code Generation
1import { chromium } from 'playwright';2import { updateWrapper } from 'playwright/lib/server/dom.js';3(async () => {4 const browser = await chromium.launch({ headless: false });5 const page = await browser.newPage();6 const elementHandle = await page.$('input[name="q"]');7 const wrapper = await elementHandle._element;8 updateWrapper(wrapper, 'value', 'test');9 await page.screenshot({ path: 'example.png' });10 await browser.close();11})();12import { chromium } from 'playwright';13import { updateWrapper } from 'playwright/lib/server/dom.js';14(async () => {15 const browser = await chromium.launch({ headless: false });16 const page = await browser.newPage();17 const elementHandle = await page.$('input[name="q"]');18 const wrapper = await elementHandle._element;19 updateWrapper(wrapper, 'value', 'test');20 await page.screenshot({ path: 'example.png' });21 await browser.close();22})();23import { chromium } from 'playwright';24import { updateWrapper } from 'playwright/lib/server/dom.js';25(async () => {26 const browser = await chromium.launch({ headless: false });27 const page = await browser.newPage();28 const elementHandle = await page.$('input[name="q"]');29 const wrapper = await elementHandle._element;30 updateWrapper(wrapper, 'value', 'test');31 await page.screenshot({ path: 'example.png' });32 await browser.close();33})();34import { chromium } from 'playwright';35import { updateWrapper } from 'playwright/lib/server/dom.js';36(async () => {37 const browser = await chromium.launch({ headless: false });38 const page = await browser.newPage();39 const elementHandle = await page.$('input[name="q"]');40 const wrapper = await elementHandle._element;41 updateWrapper(wrapper, 'value', 'test');
Using AI Code Generation
1const { test, expect } = require('@playwright/test');2test('should update wrapper', async ({ page }) => {3 const wrapper = await page.$('text=Get started');4 await page.updateWrapper(wrapper, 'text=Get started');5 expect(wrapper).toBeTruthy();6});7const context = await browser.newContext();8const page = await context.newPage();9const page2 = await browser.newPage();10await page.bringToFront();11await context.close();12const context = await browser.newContext({13 viewport: { width: 1280, height: 720 },14 userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',15});16const page = await context.newPage();17const page2 = await browser.newPage();
Using AI Code Generation
1const { updateWrapper } = require('@playwright/test/lib/test');2const { test } = require('@playwright/test');3test('update wrapper test', async ({ page }) => {4 await updateWrapper(page, { title: 'updated title' });5 expect(page.title()).toBe('updated title');6});7 ✓ update wrapper test (1ms)8 1 passed (2ms)
Using AI Code Generation
1const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');2const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');3const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');4const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');5const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');6const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');7const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');8const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');9const { updateWrapper } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!