From f4082fb03fbc577aa0bb2fd49ce835536822e8d4 Mon Sep 17 00:00:00 2001
From: "guilhem.carron" <gcarron@grandlyon.com>
Date: Fri, 14 Jan 2022 16:30:24 +0100
Subject: [PATCH] add wait for component to paint to tests

---
 .../Ecogesture/EcogestureCard.spec.tsx        | 18 +++----
 .../Ecogesture/EcogestureList.spec.tsx        |  4 +-
 .../Ecogesture/EcogestureView.spec.tsx        | 38 +++++---------
 .../Ecogesture/SingleEcogesture.spec.tsx      | 51 +++++++------------
 .../EcogestureCard.spec.tsx.snap              |  1 -
 .../EcogestureList.spec.tsx.snap              |  1 -
 .../SingleEcogesture.spec.tsx.snap            |  1 -
 7 files changed, 39 insertions(+), 75 deletions(-)

diff --git a/src/components/Ecogesture/EcogestureCard.spec.tsx b/src/components/Ecogesture/EcogestureCard.spec.tsx
index 247154e7d..3146ddbdb 100644
--- a/src/components/Ecogesture/EcogestureCard.spec.tsx
+++ b/src/components/Ecogesture/EcogestureCard.spec.tsx
@@ -8,7 +8,7 @@ import configureStore from 'redux-mock-store'
 import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
 import { Provider } from 'react-redux'
 import { BrowserRouter } from 'react-router-dom'
-import { act } from 'react-dom/test-utils'
+import { waitForComponentToPaint } from '../../../tests/__mocks__/testUtils'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
@@ -44,14 +44,12 @@ describe('EcogestureCard component', () => {
     const wrapper = mount(
       <Provider store={store}>
         <BrowserRouter>
-          <EcogestureCard ecogesture={ecogesturesData[0]} currentTab={1} />
+          <EcogestureCard ecogesture={ecogesturesData[0]} />
         </BrowserRouter>
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(toJson(wrapper)).toMatchSnapshot()
   })
   it('should be with default icon', async () => {
@@ -64,14 +62,12 @@ describe('EcogestureCard component', () => {
     const wrapper = mount(
       <Provider store={store}>
         <BrowserRouter>
-          <EcogestureCard ecogesture={ecogesturesData[0]} currentTab={1} />
+          <EcogestureCard ecogesture={ecogesturesData[0]} />
         </BrowserRouter>
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find('.Icon').exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Ecogesture/EcogestureList.spec.tsx b/src/components/Ecogesture/EcogestureList.spec.tsx
index ba858ab86..58cc26495 100644
--- a/src/components/Ecogesture/EcogestureList.spec.tsx
+++ b/src/components/Ecogesture/EcogestureList.spec.tsx
@@ -35,7 +35,7 @@ describe('EcogesturesList component', () => {
     const wrapper = mount(
       <Provider store={store}>
         <BrowserRouter>
-          <EcogestureList currentTab={2} list={ecogesturesData} />
+          <EcogestureList list={ecogesturesData} />
         </BrowserRouter>
       </Provider>
     )
@@ -52,7 +52,7 @@ describe('EcogesturesList component', () => {
     const wrapper = mount(
       <Provider store={store}>
         <BrowserRouter>
-          <EcogestureList currentTab={2} list={ecogesturesData} />
+          <EcogestureList list={ecogesturesData} />
         </BrowserRouter>
       </Provider>
     )
diff --git a/src/components/Ecogesture/EcogestureView.spec.tsx b/src/components/Ecogesture/EcogestureView.spec.tsx
index 540542538..96898cfc9 100644
--- a/src/components/Ecogesture/EcogestureView.spec.tsx
+++ b/src/components/Ecogesture/EcogestureView.spec.tsx
@@ -9,13 +9,13 @@ import {
 } from '../../../tests/__mocks__/store'
 import EcogestureView from 'components/Ecogesture/EcogestureView'
 import { IconButton, Tab } from '@material-ui/core'
-import { act } from 'react-dom/test-utils'
 import toJson from 'enzyme-to-json'
 import EcogestureInitModal from './EcogestureInitModal'
 import { ecogesturesData } from '../../../tests/__mocks__/ecogesturesData.mock'
 import { Season } from 'enum/ecogesture.enum'
 import EcogestureEmptyList from './EcogestureEmptyList'
 import * as profileActions from 'store/profile/profile.actions'
+import { waitForComponentToPaint } from '../../../tests/__mocks__/testUtils'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
@@ -92,10 +92,8 @@ describe('EcogestureView component', () => {
         <EcogestureView />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find(Tab).length).toBe(3)
     expect(toJson(wrapper)).toMatchSnapshot()
   })
@@ -114,19 +112,15 @@ describe('EcogestureView component', () => {
         <EcogestureView />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find(EcogestureInitModal).exists()).toBeTruthy()
     wrapper
       .find(IconButton)
       .first()
       .simulate('click')
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(updateProfileSpy).toHaveBeenCalledWith({
       haveSeenEcogestureModal: true,
     })
@@ -145,10 +139,8 @@ describe('EcogestureView component', () => {
         <EcogestureView />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find(EcogestureEmptyList).exists()).toBeTruthy()
   })
   it('should change tab', async () => {
@@ -164,20 +156,16 @@ describe('EcogestureView component', () => {
         <EcogestureView />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     wrapper
       .find(Tab)
       .first()
       .simulate('click')
     mockgetAllEcogestures.mockResolvedValueOnce([])
 
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find(EcogestureEmptyList).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Ecogesture/SingleEcogesture.spec.tsx b/src/components/Ecogesture/SingleEcogesture.spec.tsx
index 4d3babb77..8f45017fc 100644
--- a/src/components/Ecogesture/SingleEcogesture.spec.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.spec.tsx
@@ -4,12 +4,11 @@ import { mount } from 'enzyme'
 import { Provider } from 'react-redux'
 import SingleEcogesture from 'components/Ecogesture/SingleEcogesture'
 import toJson from 'enzyme-to-json'
-import { act } from 'react-dom/test-utils'
 import { challengeStateData } from '../../../tests/__mocks__/challengeStateData.mock'
 import { ecogesturesData } from '../../../tests/__mocks__/ecogesturesData.mock'
 import configureStore from 'redux-mock-store'
 import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
-import { EcogestureStatus } from 'enum/ecogesture.enum'
+import { waitForComponentToPaint } from '../../../tests/__mocks__/testUtils'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
@@ -70,15 +69,13 @@ describe('SingleEcogesture component', () => {
       <Provider store={store}>
         <SingleEcogesture
           match={{
-            params: { id: 'ECOGESTURE0001', tab: EcogestureStatus.ALL },
+            params: { id: 'ECOGESTURE0001' },
           }}
         />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(toJson(wrapper)).toMatchSnapshot()
   })
   it('should change doing status', async () => {
@@ -97,24 +94,19 @@ describe('SingleEcogesture component', () => {
       <Provider store={store}>
         <SingleEcogesture
           match={{
-            params: { id: 'ECOGESTURE0001', tab: EcogestureStatus.ALL },
+            params: { id: 'ECOGESTURE0001' },
           }}
         />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
 
     wrapper
       .find('.doing-btn')
       .first()
       .simulate('click')
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(mockupdateEcogesture).toHaveBeenCalledWith(updatedEcogesture)
   })
   it('should change objective status', async () => {
@@ -134,23 +126,18 @@ describe('SingleEcogesture component', () => {
       <Provider store={store}>
         <SingleEcogesture
           match={{
-            params: { id: 'ECOGESTURE0001', tab: EcogestureStatus.ALL },
+            params: { id: 'ECOGESTURE0001' },
           }}
         />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     wrapper
       .find('.objective-btn')
       .first()
       .simulate('click')
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
     expect(mockupdateEcogesture).toHaveBeenCalledWith(updatedEcogesture)
   })
   it('should toggle more details', async () => {
@@ -168,23 +155,19 @@ describe('SingleEcogesture component', () => {
       <Provider store={store}>
         <SingleEcogesture
           match={{
-            params: { id: 'ECOGESTURE0001', tab: EcogestureStatus.ALL },
+            params: { id: 'ECOGESTURE0001' },
           }}
         />
       </Provider>
     )
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     wrapper
       .find('.toggle-text')
       .first()
       .simulate('click')
-    await act(async () => {
-      await new Promise(resolve => setTimeout(resolve))
-      wrapper.update()
-    })
+    await waitForComponentToPaint(wrapper)
+
     expect(wrapper.find('.toggle-text').text()).toBe(
       'ecogesture_modal.show_less'
     )
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
index 40c4853f7..67d64db10 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
@@ -37,7 +37,6 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
       }
     >
       <EcogestureCard
-        currentTab={1}
         ecogesture={
           Object {
             "_id": "ECOGESTURE001",
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
index 8af326e09..5bd3246ca 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
@@ -37,7 +37,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
       }
     >
       <EcogestureList
-        currentTab={2}
         list={
           Array [
             Object {
diff --git a/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
index 7ff8505b7..52ff63831 100644
--- a/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
@@ -18,7 +18,6 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
       Object {
         "params": Object {
           "id": "ECOGESTURE0001",
-          "tab": 2,
         },
       }
     }
-- 
GitLab