From 7d2f9454c143802d55fabb3e369fd8aaf9294d1b Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Fri, 10 Jul 2020 14:09:13 +0200
Subject: [PATCH] NG_UI : type browser : extend tests (introduced a separate
 theme provider to globally disable animated transitions in tests to avoid
 unnecessary waiting on DOM changes)

---
 .../components/common/theme/ThemeProvider.jsx |  11 +-
 .../{ => components}/common/ComponentTest.js  |   2 +-
 .../components/common/theme/ThemeProvider.jsx |  23 +++
 .../components/login/LoginComponent.test.js   |   2 +-
 .../browser/TypeBrowserComponent.test.js      | 152 ++++++++++--------
 .../types/form/TypeFormComponent.test.js      |  16 +-
 .../browser/UserBrowserComponent.test.js      |   2 +-
 7 files changed, 131 insertions(+), 77 deletions(-)
 rename openbis_ng_ui/srcTest/js/{ => components}/common/ComponentTest.js (92%)
 create mode 100644 openbis_ng_ui/srcTest/js/components/common/theme/ThemeProvider.jsx

diff --git a/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx b/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx
index 3ca9f21354e..b49b053f9cc 100644
--- a/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx
+++ b/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx
@@ -3,7 +3,7 @@ import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'
 import indigo from '@material-ui/core/colors/indigo'
 import lightBlue from '@material-ui/core/colors/lightBlue'
 
-const theme = createMuiTheme({
+const config = {
   typography: {
     useNextVariants: true,
     label: {
@@ -33,12 +33,17 @@ const theme = createMuiTheme({
       secondary: '#ebebeb'
     }
   }
-})
+}
+
+const theme = createMuiTheme(config)
 
-export default class ThemeProvider extends React.Component {
+class ThemeProvider extends React.Component {
   render() {
     return (
       <MuiThemeProvider theme={theme}>{this.props.children}</MuiThemeProvider>
     )
   }
 }
+
+export default ThemeProvider
+export { config }
diff --git a/openbis_ng_ui/srcTest/js/common/ComponentTest.js b/openbis_ng_ui/srcTest/js/components/common/ComponentTest.js
similarity index 92%
rename from openbis_ng_ui/srcTest/js/common/ComponentTest.js
rename to openbis_ng_ui/srcTest/js/components/common/ComponentTest.js
index d78b7a28da6..f69367e18f2 100644
--- a/openbis_ng_ui/srcTest/js/common/ComponentTest.js
+++ b/openbis_ng_ui/srcTest/js/components/common/ComponentTest.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { Provider } from 'react-redux'
 import { mount } from 'enzyme'
 import { createStore } from '@src/js/store/store.js'
-import ThemeProvider from '@src/js/components/common/theme/ThemeProvider.jsx'
+import ThemeProvider from '@srcTest/js/components/common/theme/ThemeProvider.jsx'
 import actions from '@src/js/store/actions/actions.js'
 
 export default class ComponentTest {
diff --git a/openbis_ng_ui/srcTest/js/components/common/theme/ThemeProvider.jsx b/openbis_ng_ui/srcTest/js/components/common/theme/ThemeProvider.jsx
new file mode 100644
index 00000000000..68fa7411fe6
--- /dev/null
+++ b/openbis_ng_ui/srcTest/js/components/common/theme/ThemeProvider.jsx
@@ -0,0 +1,23 @@
+import React from 'react'
+import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'
+import { config } from '@src/js/components/common/theme/ThemeProvider.jsx'
+
+const theme = createMuiTheme({
+  ...config,
+  props: {
+    MuiCollapse: {
+      timeout: 0
+    }
+  },
+  transitions: {
+    create: () => 'none'
+  }
+})
+
+export default class ThemeProvider extends React.Component {
+  render() {
+    return (
+      <MuiThemeProvider theme={theme}>{this.props.children}</MuiThemeProvider>
+    )
+  }
+}
diff --git a/openbis_ng_ui/srcTest/js/components/login/LoginComponent.test.js b/openbis_ng_ui/srcTest/js/components/login/LoginComponent.test.js
index d7bde5a6503..4fd904e0fe8 100644
--- a/openbis_ng_ui/srcTest/js/components/login/LoginComponent.test.js
+++ b/openbis_ng_ui/srcTest/js/components/login/LoginComponent.test.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import ComponentTest from '@srcTest/js/common/ComponentTest.js'
+import ComponentTest from '@srcTest/js/components/common/ComponentTest.js'
 import Login from '@src/js/components/login/Login.jsx'
 import LoginWrapper from '@srcTest/js/components/login/wrapper/LoginWrapper.js'
 
diff --git a/openbis_ng_ui/srcTest/js/components/types/browser/TypeBrowserComponent.test.js b/openbis_ng_ui/srcTest/js/components/types/browser/TypeBrowserComponent.test.js
index 2cfbfdd614a..364eeb0ebaf 100644
--- a/openbis_ng_ui/srcTest/js/components/types/browser/TypeBrowserComponent.test.js
+++ b/openbis_ng_ui/srcTest/js/components/types/browser/TypeBrowserComponent.test.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import ComponentTest from '@srcTest/js/common/ComponentTest.js'
+import ComponentTest from '@srcTest/js/components/common/ComponentTest.js'
 import BrowserWrapper from '@srcTest/js/components/common/browser/wrapper/BrowserWrapper.js'
 import TypeBrowser from '@src/js/components/types/browser/TypeBrowser.jsx'
 import openbis from '@srcTest/js/services/openbis.js'
@@ -13,68 +13,94 @@ beforeEach(() => {
     wrapper => new BrowserWrapper(wrapper)
   )
   common.beforeEach()
+
+  openbis.mockSearchSampleTypes([
+    fixture.TEST_SAMPLE_TYPE_DTO,
+    fixture.ANOTHER_SAMPLE_TYPE_DTO
+  ])
+
+  openbis.mockSearchExperimentTypes([fixture.TEST_EXPERIMENT_TYPE_DTO])
+  openbis.mockSearchDataSetTypes([fixture.TEST_DATA_SET_TYPE_DTO])
+
+  openbis.mockSearchMaterialTypes([
+    fixture.TEST_MATERIAL_TYPE_DTO,
+    fixture.ANOTHER_MATERIAL_TYPE_DTO
+  ])
 })
 
-describe('browser', () => {
-  test('test', async () => {
-    openbis.mockSearchSampleTypes([
-      fixture.TEST_SAMPLE_TYPE_DTO,
-      fixture.ANOTHER_SAMPLE_TYPE_DTO
-    ])
-
-    openbis.mockSearchExperimentTypes([fixture.TEST_EXPERIMENT_TYPE_DTO])
-    openbis.mockSearchDataSetTypes([fixture.TEST_DATA_SET_TYPE_DTO])
-
-    openbis.mockSearchMaterialTypes([
-      fixture.TEST_MATERIAL_TYPE_DTO,
-      fixture.ANOTHER_MATERIAL_TYPE_DTO
-    ])
-
-    const browser = await common.mount()
-    await browser.update()
-
-    browser.expectJSON({
-      filter: {
-        value: null
-      },
-      nodes: [
-        { level: 0, text: 'Object Types' },
-        { level: 0, text: 'Collection Types' },
-        { level: 0, text: 'Data Set Types' },
-        { level: 0, text: 'Material Types' }
-      ]
-    })
-
-    browser.getNodes()[0].getIcon().click()
-    await browser.update()
-
-    browser.expectJSON({
-      filter: {
-        value: null
-      },
-      nodes: [
-        { level: 0, text: 'Object Types' },
-        { level: 1, text: fixture.ANOTHER_SAMPLE_TYPE_DTO.code },
-        { level: 1, text: fixture.TEST_SAMPLE_TYPE_DTO.code },
-        { level: 0, text: 'Collection Types' },
-        { level: 0, text: 'Data Set Types' },
-        { level: 0, text: 'Material Types' }
-      ]
-    })
-
-    browser.getFilter().change('ANOTHER')
-    await browser.update()
-
-    browser.expectJSON({
-      filter: {
-        value: 'ANOTHER'
-      },
-      nodes: [
-        { level: 0, text: 'Object Types' },
-        { level: 1, text: fixture.ANOTHER_SAMPLE_TYPE_DTO.code },
-        { level: 0, text: 'Material Types' },
-        { level: 1, text: fixture.ANOTHER_MATERIAL_TYPE_DTO.code }
-      ]
-    })
-  })
+describe('type browser', () => {
+  test('load', testLoad)
+  test('open/close node', testOpenCloseNode)
+  test('filter', testFilter)
 })
+
+async function testLoad() {
+  const browser = await common.mount()
+
+  browser.expectJSON({
+    filter: {
+      value: null
+    },
+    nodes: [
+      { level: 0, text: 'Object Types' },
+      { level: 0, text: 'Collection Types' },
+      { level: 0, text: 'Data Set Types' },
+      { level: 0, text: 'Material Types' }
+    ]
+  })
+}
+
+async function testOpenCloseNode() {
+  const browser = await common.mount()
+
+  browser.getNodes()[0].getIcon().click()
+  await browser.update()
+
+  browser.expectJSON({
+    filter: {
+      value: null
+    },
+    nodes: [
+      { level: 0, text: 'Object Types' },
+      { level: 1, text: fixture.ANOTHER_SAMPLE_TYPE_DTO.code },
+      { level: 1, text: fixture.TEST_SAMPLE_TYPE_DTO.code },
+      { level: 0, text: 'Collection Types' },
+      { level: 0, text: 'Data Set Types' },
+      { level: 0, text: 'Material Types' }
+    ]
+  })
+
+  browser.getNodes()[0].getIcon().click()
+  await browser.update()
+
+  browser.expectJSON({
+    filter: {
+      value: null
+    },
+    nodes: [
+      { level: 0, text: 'Object Types' },
+      { level: 0, text: 'Collection Types' },
+      { level: 0, text: 'Data Set Types' },
+      { level: 0, text: 'Material Types' }
+    ]
+  })
+}
+
+async function testFilter() {
+  const browser = await common.mount()
+
+  browser.getFilter().change('ANOTHER')
+  await browser.update()
+
+  browser.expectJSON({
+    filter: {
+      value: 'ANOTHER'
+    },
+    nodes: [
+      { level: 0, text: 'Object Types' },
+      { level: 1, text: fixture.ANOTHER_SAMPLE_TYPE_DTO.code },
+      { level: 0, text: 'Material Types' },
+      { level: 1, text: fixture.ANOTHER_MATERIAL_TYPE_DTO.code }
+    ]
+  })
+}
diff --git a/openbis_ng_ui/srcTest/js/components/types/form/TypeFormComponent.test.js b/openbis_ng_ui/srcTest/js/components/types/form/TypeFormComponent.test.js
index 1f940899e4e..ee60333d3d8 100644
--- a/openbis_ng_ui/srcTest/js/components/types/form/TypeFormComponent.test.js
+++ b/openbis_ng_ui/srcTest/js/components/types/form/TypeFormComponent.test.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import ComponentTest from '@srcTest/js/common/ComponentTest.js'
+import ComponentTest from '@srcTest/js/components/common/ComponentTest.js'
 import TypeForm from '@src/js/components/types/form/TypeForm.jsx'
 import TypeFormWrapper from '@srcTest/js/components/types/form/wrapper/TypeFormWrapper.js'
 import TypeFormController from '@src/js/components/types/form/TypeFormController.js'
@@ -10,11 +10,17 @@ import fixture from '@srcTest/js/common/fixture.js'
 
 jest.mock('@src/js/components/types/form/TypeFormFacade')
 
+let common = null
 let facade = null
 let controller = null
-let common = null
 
 beforeEach(() => {
+  common = new ComponentTest(
+    object => <TypeForm object={object} controller={controller} />,
+    wrapper => new TypeFormWrapper(wrapper)
+  )
+  common.beforeEach()
+
   facade = new TypeFormFacade()
   controller = new TypeFormController(facade)
 
@@ -25,12 +31,6 @@ beforeEach(() => {
   facade.loadMaterials.mockReturnValue(Promise.resolve([]))
   facade.loadVocabularyTerms.mockReturnValue(Promise.resolve([]))
   facade.loadGlobalPropertyTypes.mockReturnValue(Promise.resolve([]))
-
-  common = new ComponentTest(
-    object => <TypeForm object={object} controller={controller} />,
-    wrapper => new TypeFormWrapper(wrapper)
-  )
-  common.beforeEach()
 })
 
 describe('TypeFormComponent', () => {
diff --git a/openbis_ng_ui/srcTest/js/components/users/browser/UserBrowserComponent.test.js b/openbis_ng_ui/srcTest/js/components/users/browser/UserBrowserComponent.test.js
index 3d0f051cc8c..4161a0feded 100644
--- a/openbis_ng_ui/srcTest/js/components/users/browser/UserBrowserComponent.test.js
+++ b/openbis_ng_ui/srcTest/js/components/users/browser/UserBrowserComponent.test.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import ComponentTest from '@srcTest/js/common/ComponentTest.js'
+import ComponentTest from '@srcTest/js/components/common/ComponentTest.js'
 import BrowserWrapper from '@srcTest/js/components/common/browser/wrapper/BrowserWrapper.js'
 import UserBrowser from '@src/js/components/users/browser/UserBrowser.jsx'
 import openbis from '@srcTest/js/services/openbis.js'
-- 
GitLab