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');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!!
