From 9747afd930211ea0af0a0b5dff6abedfe279ae80 Mon Sep 17 00:00:00 2001 From: pkupczyk <piotr.kupczyk@id.ethz.ch> Date: Mon, 17 Aug 2020 16:18:07 +0200 Subject: [PATCH] NG_UI : vocabulary form : SSDM-10060 - extend tests with adding a term --- .../src/js/components/common/grid/Grid.jsx | 4 +- .../grid/{PageConfig.jsx => GridPaging.jsx} | 8 +- .../common/grid/wrapper/GridPagingWrapper.js | 30 +++++ .../common/grid/wrapper/GridWrapper.js | 9 +- .../form/VocabularyFormComponent.test.js | 103 ++++++++++++++++++ 5 files changed, 147 insertions(+), 7 deletions(-) rename openbis_ng_ui/src/js/components/common/grid/{PageConfig.jsx => GridPaging.jsx} (95%) create mode 100644 openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridPagingWrapper.js diff --git a/openbis_ng_ui/src/js/components/common/grid/Grid.jsx b/openbis_ng_ui/src/js/components/common/grid/Grid.jsx index 5082d8acf59..5bd46ee5e53 100644 --- a/openbis_ng_ui/src/js/components/common/grid/Grid.jsx +++ b/openbis_ng_ui/src/js/components/common/grid/Grid.jsx @@ -12,8 +12,8 @@ import logger from '@src/js/common/logger.js' import GridController from './GridController.js' import GridHeader from './GridHeader.jsx' import GridRow from './GridRow.jsx' +import GridPaging from './GridPaging.jsx' import ColumnConfig from './ColumnConfig.jsx' -import PageConfig from './PageConfig.jsx' const styles = theme => ({ table: { @@ -122,7 +122,7 @@ class Grid extends React.PureComponent { </TableBody> </Table> <div className={classes.tableFooter}> - <PageConfig + <GridPaging count={sortedRows.length} page={page} pageSize={pageSize} diff --git a/openbis_ng_ui/src/js/components/common/grid/PageConfig.jsx b/openbis_ng_ui/src/js/components/common/grid/GridPaging.jsx similarity index 95% rename from openbis_ng_ui/src/js/components/common/grid/PageConfig.jsx rename to openbis_ng_ui/src/js/components/common/grid/GridPaging.jsx index 6394c3885b3..ef64775218e 100644 --- a/openbis_ng_ui/src/js/components/common/grid/PageConfig.jsx +++ b/openbis_ng_ui/src/js/components/common/grid/GridPaging.jsx @@ -35,7 +35,7 @@ const styles = theme => ({ } }) -class PageConfig extends React.PureComponent { +class GridPaging extends React.PureComponent { constructor(props) { super(props) this.handlePageSizeChange = this.handlePageSizeChange.bind(this) @@ -68,7 +68,7 @@ class PageConfig extends React.PureComponent { } render() { - logger.log(logger.DEBUG, 'PageConfig.render') + logger.log(logger.DEBUG, 'GridPaging.render') const { classes, count, page, pageSize } = this.props @@ -96,7 +96,7 @@ class PageConfig extends React.PureComponent { /> </div> <div className={classes.pageRange}> - <Typography variant='body2'> + <Typography variant='body2' data-part='range'> {Math.min(count, page * pageSize + 1)}- {Math.min(count, (page + 1) * pageSize)} of {count} </Typography> @@ -136,4 +136,4 @@ class PageConfig extends React.PureComponent { } } -export default _.flow(withStyles(styles))(PageConfig) +export default _.flow(withStyles(styles))(GridPaging) diff --git a/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridPagingWrapper.js b/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridPagingWrapper.js new file mode 100644 index 00000000000..7877a738b58 --- /dev/null +++ b/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridPagingWrapper.js @@ -0,0 +1,30 @@ +import BaseWrapper from '@srcTest/js/components/common/wrapper/BaseWrapper.js' +import SelectField from '@src/js/components/common/form/SelectField.jsx' +import SelectFieldWrapper from '@srcTest/js/components/common/form/wrapper/SelectFieldWrapper.js' +import Typography from '@material-ui/core/Typography' + +export default class GridPagingWrapper extends BaseWrapper { + getPageSize() { + return new SelectFieldWrapper(this.findComponent(SelectField)) + } + + getRange() { + return this.getStringValue( + this.findComponent(Typography) + .filter({ 'data-part': 'range' }) + .text() + .trim() + ) + } + + toJSON() { + if (this.wrapper.exists()) { + return { + pageSize: this.getPageSize().toJSON(), + range: this.getRange() + } + } else { + return null + } + } +} diff --git a/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridWrapper.js b/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridWrapper.js index 792633f1b8f..0f1bed9e13b 100644 --- a/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridWrapper.js +++ b/openbis_ng_ui/srcTest/js/components/common/grid/wrapper/GridWrapper.js @@ -1,6 +1,8 @@ import BaseWrapper from '@srcTest/js/components/common/wrapper/BaseWrapper.js' import TableSortLabel from '@material-ui/core/TableSortLabel' import FilterField from '@src/js/components/common/form/FilterField.jsx' +import GridPaging from '@src/js/components/common/grid/GridPaging.jsx' +import GridPagingWrapper from '@srcTest/js/components/common/grid/wrapper/GridPagingWrapper.js' import GridHeaderLabel from '@src/js/components/common/grid/GridHeaderLabel.jsx' import GridRow from '@src/js/components/common/grid/GridRow.jsx' import GridRowWrapper from '@srcTest/js/components/common/grid/wrapper/GridRowWrapper.js' @@ -31,11 +33,16 @@ export default class GridWrapper extends BaseWrapper { return rows } + getPaging() { + return new GridPagingWrapper(this.findComponent(GridPaging)) + } + toJSON() { if (this.wrapper.exists()) { return { columns: this.getColumns().map(row => row.toJSON()), - rows: this.getRows().map(row => row.toJSON()) + rows: this.getRows().map(row => row.toJSON()), + paging: this.getPaging().toJSON() } } else { return null diff --git a/openbis_ng_ui/srcTest/js/components/types/form/VocabularyFormComponent.test.js b/openbis_ng_ui/srcTest/js/components/types/form/VocabularyFormComponent.test.js index b7feb913e2f..68d5c03ae0f 100644 --- a/openbis_ng_ui/srcTest/js/components/types/form/VocabularyFormComponent.test.js +++ b/openbis_ng_ui/srcTest/js/components/types/form/VocabularyFormComponent.test.js @@ -28,6 +28,7 @@ describe('VocabularyFormComponent', () => { test('load new', testLoadNew) test('load existing', testLoadExisting) test('select term', testSelectTerm) + test('add term', testAddTerm) }) async function testLoadNew() { @@ -274,6 +275,108 @@ async function testSelectTerm() { }) } +async function testAddTerm() { + const form = await mountExisting() + + form.expectJSON({ + grid: { + rows: fixture.TEST_VOCABULARY_DTO.terms.map(term => ({ + values: { + 'code.value': term.getCode(), + 'label.value': term.getLabel(), + 'description.value': term.getDescription(), + 'official.value': String(term.isOfficial()) + }, + selected: false + })), + paging: { + pageSize: { + value: 10 + }, + range: '1-6 of 6' + } + } + }) + + form.getGrid().getPaging().getPageSize().change(5) + await form.update() + + form.getButtons().getEdit().click() + await form.update() + + form.getButtons().getAddTerm().click() + await form.update() + + form.expectJSON({ + grid: { + rows: [ + { + values: { 'code.value': fixture.TEST_TERM_6_DTO.getCode() }, + selected: false + }, + { + values: { 'code.value': null }, + selected: true + } + ], + paging: { + pageSize: { + value: 5 + }, + range: '6-7 of 7' + } + }, + parameters: { + term: { + title: 'Term', + code: { + label: 'Code', + value: null, + enabled: true, + mode: 'edit' + }, + label: { + label: 'Label', + value: null, + enabled: true, + mode: 'edit' + }, + description: { + label: 'Description', + value: null, + enabled: true, + mode: 'edit' + }, + official: { + label: 'Official', + value: true, + enabled: true, + mode: 'edit' + } + } + }, + buttons: { + addTerm: { + enabled: true + }, + removeTerm: { + enabled: true + }, + save: { + enabled: true + }, + cancel: { + enabled: true + }, + edit: null, + message: { + text: 'You have unsaved changes.', + type: 'warning' + } + } + }) +} + async function mountNew() { return await common.mount({ type: objectTypes.NEW_VOCABULARY_TYPE -- GitLab