Skip to content

Commit aac83da

Browse files
author
pusztaie
committed
Merge branch 'release/2021-07'
2 parents 702a66a + 8ec7fc3 commit aac83da

File tree

115 files changed

+4999
-6679
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+4999
-6679
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { pathWithQueryParams } from '../../../src/services/query-string-builder'
2+
3+
const contextMenuItems = ['Details', 'Copy to', 'Edit', 'Move to', 'Versions', 'Share', 'Delete', 'Set permissions']
4+
5+
describe('Grid context menu', () => {
6+
before(() => {
7+
cy.login()
8+
cy.visit(pathWithQueryParams({ path: '/', newParams: { repoUrl: Cypress.env('repoUrl') } }))
9+
})
10+
11+
it('right-click on a content in the grid makes context-menu open', () => {
12+
cy.get('[data-test="drawer-menu-item-content"]').click()
13+
cy.checkContextMenu({
14+
selector: '[data-test="table-cell-it-workspace"]',
15+
contextMenuItems,
16+
clickAction: 'rightclick',
17+
})
18+
})
19+
20+
it('click on ... (Actions) in the grid makes context-menu open', () => {
21+
cy.get('[data-test="drawer-menu-item-content"]').click()
22+
cy.checkContextMenu({
23+
selector: '[data-test="actions-button-it"]',
24+
contextMenuItems,
25+
clickAction: 'click',
26+
})
27+
})
28+
})

apps/sensenet/cypress/integration/tree/tree.spec.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,10 @@ describe('Tree', () => {
3535
it('Right click on the Tree item should make context-menu open.', () => {
3636
const contextMenuItems = ['Details', 'Copy to', 'Edit', 'Move to', 'Versions', 'Share', 'Delete', 'Set permissions']
3737
cy.get('[data-test="drawer-menu-item-content"]').click()
38-
cy.get('[data-test="menu-item-it-workspace"]')
39-
.rightclick()
40-
.then(() => {
41-
cy.get('ul[role="menu"] li').each(($el) => {
42-
expect(contextMenuItems).to.include($el.text())
43-
})
44-
cy.get('body').click()
45-
})
38+
cy.checkContextMenu({
39+
selector: '[data-test="menu-item-it-workspace"]',
40+
contextMenuItems,
41+
clickAction: 'rightclick',
42+
})
4643
})
4744
})
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { PATHS, resolvePathParams } from '../../../src/application-paths'
2+
import { pathWithQueryParams } from '../../../src/services/query-string-builder'
3+
4+
describe('Batch operations: ', () => {
5+
beforeEach(() => {
6+
cy.login()
7+
cy.visit(pathWithQueryParams({ path: '/', newParams: { repoUrl: Cypress.env('repoUrl') } }))
8+
cy.visit(
9+
pathWithQueryParams({
10+
path: resolvePathParams({ path: PATHS.content.appPath, params: { browseType: 'explorer' } }),
11+
newParams: { repoUrl: Cypress.env('repoUrl'), path: '/Marketing/Document_Library' },
12+
}),
13+
)
14+
})
15+
16+
it('multiple content delete works as it is intended', () => {
17+
cy.get('[data-test="menu-item-chicago"]').click({ force: true })
18+
cy.get('[data-test="table-row-selection-control-100pages.docx"]').click({ force: true })
19+
cy.get('[data-test="table-row-selection-control-100pages.pdf"]')
20+
.find('input[type="checkbox"]')
21+
.check({ force: true })
22+
cy.get('[data-test="batch-delete"]').click()
23+
cy.get('[data-test="delete-permanently"] input[type="checkbox"]').check()
24+
cy.get('[data-test="button-delete-confirm"]').click()
25+
cy.get('[data-test="table-cell-100pages.docx"]').should('not.exist')
26+
cy.get('[data-test="table-cell-100pages.pdf"]').should('not.exist')
27+
})
28+
29+
it('multiple content move works as it is intended', () => {
30+
cy.get('[data-test="menu-item-munich"]').click({ force: true })
31+
cy.get('[data-test="table-row-selection-control-100pages.docx"]').click({ force: true })
32+
cy.get('[data-test="table-row-selection-control-100pages.pdf"]')
33+
.find('input[type="checkbox"]')
34+
.check({ force: true })
35+
cy.get('[data-test="batch-move"]').click()
36+
cy.get('[data-test="picker-up"]').dblclick()
37+
cy.get('[data-test="picker-checkbox-item-chicago"]').click()
38+
cy.get('[data-test="picker-submit"]').click()
39+
cy.get('[data-test="snackbar-message"]').should('have.text', '2 items has been moved to Chicago')
40+
cy.get('[data-test="table-cell-100pages.docx"]').should('not.exist')
41+
cy.get('[data-test="table-cell-100pages.pdf"]').should('not.exist')
42+
cy.get('[data-test="menu-item-chicago"]').click({ force: true })
43+
cy.get('[data-test="table-cell-100pages.docx"]').should('exist')
44+
cy.get('[data-test="table-cell-100pages.pdf"]').should('exist')
45+
})
46+
it('multiple content copy works as it is intended', () => {
47+
cy.get('[data-test="menu-item-chicago"]').click({ force: true })
48+
cy.get('[data-test="table-row-selection-control-100pages.docx"]').click({ force: true })
49+
cy.get('[data-test="table-row-selection-control-100pages.pdf"]')
50+
.find('input[type="checkbox"]')
51+
.check({ force: true })
52+
cy.get('[data-test="batch-copy"]').click()
53+
cy.get('[data-test="picker-up"]').dblclick()
54+
cy.get('[data-test="picker-checkbox-item-munich"]').click()
55+
cy.get('[data-test="picker-submit"]').click()
56+
cy.get('[data-test="snackbar-message"]').should('have.text', '2 items has been copied to Munich')
57+
cy.get('[data-test="table-cell-100pages.docx"]').should('exist')
58+
cy.get('[data-test="table-cell-100pages.pdf"]').should('exist')
59+
cy.get('[data-test="menu-item-munich"]').click({ force: true })
60+
cy.get('[data-test="table-cell-100pages.docx"]').should('exist')
61+
cy.get('[data-test="table-cell-100pages.pdf"]').should('exist')
62+
})
63+
})

apps/sensenet/cypress/support/commands.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,14 @@ Cypress.Commands.add('scrollToItem', ({ container, selector, done }) => {
111111
timeout()
112112
})
113113
})
114+
115+
Cypress.Commands.add('checkContextMenu', ({ selector, contextMenuItems, clickAction }) => {
116+
cy.get(selector)
117+
[clickAction]()
118+
.then(() => {
119+
cy.get('ul[role="menu"] li').each(($el) => {
120+
expect(contextMenuItems).to.include($el.text())
121+
})
122+
cy.get('body').click()
123+
})
124+
})

apps/sensenet/cypress/support/index.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,18 @@ declare namespace Cypress {
3636
selector: string
3737
done?: (element: HTMLElement) => void
3838
}): Promise<HTMLElement>
39+
40+
/**
41+
* Check the context menu items for the selected item
42+
*/
43+
checkContextMenu({
44+
selector,
45+
contextMenuItems,
46+
clickAction,
47+
}: {
48+
selector: string
49+
contextMenuItems: string[]
50+
clickAction: 'click' | 'rightclick'
51+
}): void
3952
}
4053
}

apps/sensenet/package.json

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@app/sensenet",
3-
"version": "1.21.0",
3+
"version": "1.22.0",
44
"main": "dist/index.js",
55
"files": [
66
"dist",
@@ -38,66 +38,66 @@
3838
]
3939
},
4040
"devDependencies": {
41-
"@cypress/code-coverage": "^3.9.4",
42-
"@relative-ci/agent": "^1.5.0",
41+
"@cypress/code-coverage": "^3.9.6",
42+
"@relative-ci/agent": "^2.0.0",
4343
"@types/autosuggest-highlight": "^3.1.1",
44-
"@types/react": "^17.0.3",
44+
"@types/react": "^17.0.11",
4545
"@types/react-autosuggest": "^10.1.4",
46-
"@types/react-dom": "^17.0.3",
46+
"@types/react-dom": "^17.0.7",
4747
"@types/react-responsive": "^8.0.2",
48-
"@types/react-router": "^5.1.12",
48+
"@types/react-router": "^5.1.15",
4949
"@types/react-router-dom": "^5.1.7",
5050
"@types/react-virtualized": "^9.21.11",
5151
"@types/uuid": "^8.0.1",
5252
"clean-webpack-plugin": "^4.0.0-alpha.0",
53-
"compression-webpack-plugin": "7.1.2",
54-
"copy-webpack-plugin": "^8.1.1",
55-
"css-loader": "^5.2.4",
56-
"css-minimizer-webpack-plugin": "^2.0.0",
57-
"cypress": "^7.1.0",
53+
"compression-webpack-plugin": "8.0.0",
54+
"copy-webpack-plugin": "^9.0.0",
55+
"css-loader": "^5.2.6",
56+
"css-minimizer-webpack-plugin": "^3.0.1",
57+
"cypress": "^7.5.0",
5858
"cypress-file-upload": "^5.0.6",
5959
"cypress-xpath": "^1.6.2",
6060
"file-loader": "^6.1.1",
61-
"fork-ts-checker-webpack-plugin": "^6.2.1",
61+
"fork-ts-checker-webpack-plugin": "^6.2.10",
6262
"html-webpack-plugin": "^5.3.1",
6363
"mini-css-extract-plugin": "^1.5.0",
64-
"monaco-editor-webpack-plugin": "^3.0.1",
64+
"monaco-editor-webpack-plugin": "^4.0.0",
6565
"nyc": "^15.1.0",
6666
"nyc-config-tsx": "^0.1.0",
6767
"react-router": "^5.2.0",
6868
"react-router-dom": "^5.2.0",
6969
"source-map-support": "^0.5.19",
7070
"style-loader": "^2.0.0",
71-
"terser-webpack-plugin": "^5.1.1",
72-
"ts-loader": "^9.0.0",
73-
"ts-node": "^9.1.1",
71+
"terser-webpack-plugin": "^5.1.3",
72+
"ts-loader": "^9.2.3",
73+
"ts-node": "^10.0.0",
7474
"url-loader": "^4.1.1",
75-
"webpack": "^5.34.0",
75+
"webpack": "^5.38.1",
7676
"webpack-bundle-analyzer": "^4.4.1",
77-
"webpack-cli": "^4.6.0",
77+
"webpack-cli": "^4.7.2",
7878
"webpack-dev-server": "^3.11.2",
79-
"webpack-merge": "^5.7.3"
79+
"webpack-merge": "^5.8.0"
8080
},
8181
"dependencies": {
82-
"@iconify-icons/logos": "^1.1.9",
82+
"@iconify-icons/logos": "^1.1.10",
8383
"@iconify/react": "^1.1.4",
8484
"@material-ui/core": "^4.11.4",
8585
"@material-ui/icons": "^4.11.2",
8686
"@material-ui/lab": "^4.0.0-alpha.58",
8787
"@sensenet/authentication-oidc-react": "^2.3.1",
88-
"@sensenet/client-core": "^4.0.0",
89-
"@sensenet/client-utils": "^2.1.1",
90-
"@sensenet/controls-react": "^8.0.0",
88+
"@sensenet/client-core": "^4.0.1",
89+
"@sensenet/client-utils": "^2.1.2",
90+
"@sensenet/controls-react": "^8.0.1",
9191
"@sensenet/default-content-types": "^5.0.0",
92-
"@sensenet/document-viewer-react": "^4.2.0",
93-
"@sensenet/hooks-react": "^1.6.1",
92+
"@sensenet/document-viewer-react": "^4.2.1",
93+
"@sensenet/hooks-react": "^1.6.2",
9494
"@sensenet/list-controls-react": "^2.1.1",
95-
"@sensenet/pickers-react": "^2.1.1",
96-
"@sensenet/query": "^2.1.1",
97-
"@sensenet/repository-events": "^2.1.1",
95+
"@sensenet/pickers-react": "^2.1.2",
96+
"@sensenet/query": "^2.1.2",
97+
"@sensenet/repository-events": "^2.1.2",
9898
"autosuggest-highlight": "^3.1.1",
9999
"clsx": "^1.1.1",
100-
"date-fns": "^2.21.3",
100+
"date-fns": "^2.22.1",
101101
"filesize": "^6.3.0",
102102
"react": "^16.13.0",
103103
"react-autosuggest": "^10.1.0",

apps/sensenet/src/components/ContentBreadcrumbs.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ export const ContentBreadcrumbs = <T extends GenericContent = GenericContent>(pr
8181
<div className={classes.batchActionWrapper}>
8282
<Tooltip title={localization.batchActions.delete} placement="bottom">
8383
<IconButton
84+
data-test="batch-delete"
8485
aria-label="delete"
8586
onClick={() => {
8687
openDialog({
@@ -94,6 +95,7 @@ export const ContentBreadcrumbs = <T extends GenericContent = GenericContent>(pr
9495
</Tooltip>
9596
<Tooltip title={localization.batchActions.move} placement="bottom">
9697
<IconButton
98+
data-test="batch-move"
9799
aria-label="move"
98100
onClick={() => {
99101
openDialog({
@@ -115,6 +117,7 @@ export const ContentBreadcrumbs = <T extends GenericContent = GenericContent>(pr
115117
</Tooltip>
116118
<Tooltip title={localization.batchActions.copy} placement="bottom">
117119
<IconButton
120+
data-test="batch-copy"
118121
aria-label="copy"
119122
onClick={() => {
120123
openDialog({

apps/sensenet/src/components/NotificationComponent.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export const NotificationComponent: FunctionComponent = () => {
9292
<div style={{ display: 'flex', alignItems: 'center' }}>
9393
<Icon item={value} style={{ marginRight: '1em' }} />
9494
<div
95+
data-test="snackbar-message"
9596
title={value.message}
9697
style={{ overflow: 'hidden', textOverflow: 'ellipsis', wordBreak: 'break-word' }}>
9798
{(count > 1 && value.data?.digestMessage && value.data.digestMessage.replace('{count}', count)) ||

apps/sensenet/src/components/SelectionControl.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ export const SelectionControl: FunctionComponent<SelectionControlProps> = ({
2929
}, [selectionService.selection])
3030

3131
return (
32-
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: 40, height: 40 }}>
32+
<div
33+
data-test={`table-row-selection-control-${content.Name.replace(/\s+/g, '-').toLowerCase()}`}
34+
style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: 40, height: 40 }}>
3335
<Checkbox
3436
checked={isSelected}
3537
style={{ display: selection.length > 0 ? undefined : 'none' }}

apps/sensenet/src/components/content-list/actions-field.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import { useGlobalStyles } from '../../globalStyles'
66

77
export const ActionsField: FC<{
88
onOpen: (ev: MouseEvent<HTMLButtonElement>) => void
9-
}> = ({ onOpen }) => {
9+
name: string
10+
}> = ({ onOpen, name }) => {
1011
const globalClasses = useGlobalStyles()
1112
return (
1213
<TableCell component="div" className={clsx(globalClasses.centered, globalClasses.virtualizedCellStyle)}>
13-
<IconButton onClick={onOpen}>
14+
<IconButton onClick={onOpen} data-test={`actions-button-${name?.replace(/\s+/g, '-').toLowerCase()}`}>
1415
<MoreHoriz />
1516
</IconButton>
1617
</TableCell>

0 commit comments

Comments
 (0)