Compare commits

...

129 Commits

Author SHA1 Message Date
AleksanderSklorz
4af199fde3
[ACS-9601] Fixed cut reference image (#4562) 2025-05-12 15:37:40 +02:00
dominikiwanekhyland
bf909d9a5b
[ACS-9602] resolve issue for upgrading prettier (#4554)
* Build(deps-dev): Bump prettier from 2.8.8 to 3.5.3

Bumps [prettier](https://github.com/prettier/prettier) from 2.8.8 to 3.5.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.8...3.5.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.5.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Resolve issue for upgrading prettier

* Update ADF

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 11:47:59 +02:00
Grzegorz Jaśkowski
325d072c4d
[ACS-9536] fix failing unit tests (#4556)
* [ACS-9536] fix failing unit tests, use correct testing module

* [ACS-9536] provide mock service for preview unit tests
2025-05-12 10:06:21 +02:00
Alfresco Build
311efee36d
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14908201181 JS:9.1.0-14908201181 (#4557)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-05-09 09:09:45 +02:00
AleksanderSklorz
2be3b94077
[ACS-9546] knowledge retrieval question is repeated when new question is asked (#4555)
* [ACS-9546] Fixed repeating displayed question for knowledge retrieval

* [ACS-9546] Fixed not displayed border around answer

* [ACS-9546] Unit tests
2025-05-08 15:23:57 +02:00
Alfresco Build
b4530e43b9
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14860367508 JS:9.1.0-14860367508 (#4553)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-05-07 08:03:52 +02:00
dependabot[bot]
ec910c14b1
Build(deps-dev): Bump vite from 5.4.18 to 5.4.19 (#4552)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.18 to 5.4.19.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.19/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.19/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.19
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 12:48:43 +02:00
dependabot[bot]
2d84588ec5
Build(deps-dev): Bump eslint-plugin-ban from 1.6.0 to 2.0.0 (#4542)
Bumps [eslint-plugin-ban](https://github.com/remithomas/eslint-plugin-ban) from 1.6.0 to 2.0.0.
- [Release notes](https://github.com/remithomas/eslint-plugin-ban/releases)
- [Commits](https://github.com/remithomas/eslint-plugin-ban/commits/v2.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-ban
  dependency-version: 2.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 12:11:57 +02:00
dependabot[bot]
ec661e445d
Build(deps): Bump formidable from 3.5.2 to 3.5.4 (#4546)
Bumps [formidable](https://github.com/node-formidable/formidable) from 3.5.2 to 3.5.4.
- [Release notes](https://github.com/node-formidable/formidable/releases)
- [Changelog](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md)
- [Commits](https://github.com/node-formidable/formidable/commits)

---
updated-dependencies:
- dependency-name: formidable
  dependency-version: 3.5.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 11:54:58 +02:00
dependabot[bot]
3c06b2e6b6
Build(deps): Bump Alfresco/alfresco-build-tools (#4551)
Bumps the github-actions group in /.github/actions/deploy-local-acs with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.18.0 to 8.19.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.18.0...v8.19.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.19.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 11:40:13 +02:00
dependabot[bot]
5141bef9ca
Build(deps): Bump Alfresco/alfresco-build-tools (#4550)
Bumps the github-actions group in /.github/actions/adf-linking with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.18.0 to 8.19.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.18.0...v8.19.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.19.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 11:27:06 +02:00
dependabot[bot]
f2a07a6d82
Build(deps): Bump Alfresco/alfresco-build-tools (#4549)
Bumps the github-actions group with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.18.0 to 8.19.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.18.0...v8.19.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.19.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 11:10:26 +02:00
dependabot[bot]
0246f5b05a
Build(deps): Bump Alfresco/alfresco-build-tools (#4548)
Bumps the github-actions group in /.github/actions/setup with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.18.0 to 8.19.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.18.0...v8.19.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.19.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 10:53:41 +02:00
Alfresco Build
fb925b92c8
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14757716769 JS:9.1.0-14757716769 (#4544)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-05-05 10:20:25 +02:00
Denys Vuika
6487b82fac
setup missing ngx-markdown dependency (#4547) 2025-04-30 08:54:42 -04:00
Adam Świderski
8e019a1295
[ACS-9482] [E2E] included XAT-17700 and XAT-17702 (#4543) 2025-04-28 14:42:11 +02:00
Alfresco Build
e7732d82dd
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14664375052 JS:9.1.0-14664375052 (#4538)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-25 12:11:58 -04:00
Denys Vuika
6928d8de13
AAE-34494 break dependency on ADF mat selectors (#4536) 2025-04-25 11:49:19 -04:00
Alfresco Build
680b11ba2e
GH Auto: Upstream dependencies ADF:8.1.0-14660630465 JS-API:9.1.0-14660630465 using Tag:8.1.0-14660630465 (#4533)
* [ci:force][auto-commit] Update dependencies ADF:8.1.0-14660630465  JS:9.1.0-14660630465

* [ACS-9564] Fix rendering of Knowledge Retrieval answer after change in answer structure

* incease viewer load time waiting

* exclude test XAT-5470 ACS-9580

---------

Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
Co-authored-by: Aleksander Sklorz <Aleksander.Sklorz@hyland.com>
Co-authored-by: akashrathod28 <akash.rathod@hyland.com>
2025-04-25 15:19:38 +02:00
Mykyta Maliarchuk
ba1ef44fdf
[ACS-9554] Redirect from permissions page after node delete (#4531) 2025-04-25 10:33:57 +02:00
Denys Vuika
5a168fa0c2
add missing palette color vars (#4535) 2025-04-24 12:47:55 -04:00
Wojciech Duda
75d006fd34
ACS-9570 Update Dockerfile node version to 20.18 (#4532) 2025-04-23 11:10:55 +02:00
Alfresco Build
279f4c6c33
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14605928703 JS:9.1.0-14605928703 (#4530)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-23 09:15:57 +02:00
Alfresco Build
3d4c2758e0
GH Auto: Upstream dependencies ADF:8.1.0-14595564278 JS-API:9.1.0-14595564278 using Tag:8.1.0-14595564278 (#4528)
* [ci:force][auto-commit] Update dependencies ADF:8.1.0-14595564278  JS:9.1.0-14595564278

* update pdfjs-dist

---------

Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
Co-authored-by: Wojciech Duda <69160975+wojd0@users.noreply.github.com>
2025-04-22 19:31:00 +01:00
dependabot[bot]
de8f8dcb22
Build(deps): Bump vite and @angular-devkit/build-angular (#4518)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to 5.4.18 and updates ancestor dependency [@angular-devkit/build-angular](https://github.com/angular/angular-cli). These dependencies need to be updated together.


Updates `vite` from 5.4.14 to 5.4.18
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.18/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.18/packages/vite)

Updates `@angular-devkit/build-angular` from 17.3.13 to 17.3.16
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/17.3.13...17.3.16)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.18
  dependency-type: indirect
- dependency-name: "@angular-devkit/build-angular"
  dependency-version: 17.3.16
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-22 08:36:52 +02:00
Alfresco Build
510c8f0880
New Crowdin translations by GitHub Action (#4463)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-04-18 14:34:04 +02:00
Alfresco Build
485946e733
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14532407293 JS:9.1.0-14532407293 (#4522)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-18 13:42:01 +02:00
AleksanderSklorz
f201760ba2
[ACS-9535] open links inside strings in md format as separated browser tab (#4521)
* [ACS-9535] Opening embedded links in MD formatted answer as new tab

* [ACS-9535] Unit tests for marked options
2025-04-18 08:03:20 +02:00
Alfresco Build
6ce927e63c
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14517305114 JS:9.1.0-14517305114 (#4519)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-18 08:02:43 +02:00
Alfresco Build
32cd099515
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14485353256 JS:9.1.0-14485353256 (#4517)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-16 08:58:49 +02:00
dominikiwanekhyland
0118c21bb0
[ACS-9510] Tasks and processes are not displayed when About page is refreshed (#4510)
* [ACS-9510] Tasks and processes are not displayed when About page is refreshed

* [ACS-9510] Tasks and processes are not displayed when About page is refreshed
2025-04-14 12:32:47 +02:00
Alfresco Build
215881b0cd
GH Auto: Upstream dependencies ADF:8.1.0-14352302445 JS-API:9.1.0-14352302445 using Tag:8.1.0-14352302445 (#4508)
* [ci:force][auto-commit] Update dependencies ADF:8.1.0-14352302445  JS:9.1.0-14352302445

* Upstream viewer tests fix 1

---------

Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
Co-authored-by: Adam Świderski <adam.tomasz.swiderski@gmail.com>
2025-04-11 14:58:38 +02:00
AleksanderSklorz
de9b74619d
[ACS-9427] Fix for linking with ADF (#4507) 2025-04-07 11:00:20 +02:00
AleksanderSklorz
6a3c888f18
[ACS-9427] support md format of response for knowledge retrieval (#4502)
* [ACS-9427] Added library for markdown format

* [ACS-9427] Display tooltip with mermaid source code and preprocess markdown format

* [ACS-9427] Rendering mathematical formulas

* [ACS-9427] Styling tables

* [ACS-9427] Added support for programming code language in MD

* [ACS-9427] Fixed existing unit tests for search ai results component

* [ACS-9427] Unit tests for markdown data and rendering of markdown

* [ACS-9427] Unit tests for markdown containing mermaid and latex blocks

* [ACS-9427] Reverted unwanted change

* [ACS-9427] Fixed Sonar issues for regex

* [ACS-9427] Fixed Sonar issues for regex

* [ACS-9427] Fixed Sonar issues for regex

* [ACS-9427] Fixed Sonar issues for regex

* [ACS-9427] Fixed unit test

* [ACS-9427] Fixed unit test

* [ACS-9427] Fixed unit test
2025-04-07 08:10:20 +02:00
Alfresco Build
46a7113e32
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14240499928 JS:9.1.0-14240499928 (#4501)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-03 16:21:54 +02:00
MichalKinas
544e63d38f
Update peer deps in aca-playwright-shared (#4500) 2025-04-03 12:53:18 +02:00
Adam Świderski
ebbc868aa1
[ACS-9065] [E2E] Added folder information tests in ACA (#4478)
* [ACS-9065] Added folder information tests in ACA

* [ACS-9065] fixed sonar issues

* [ACS-9065] Changed test describe name

* [ACS-9065] debugging dialog errors 1

* [ACS-9065] removed debugging reload

* [ACS-9065] renamed e2e file
2025-04-03 10:02:43 +02:00
Alfresco Build
66d6afd12a
[ci:force][auto-commit] Update dependencies ADF:8.1.0-14225641846 JS:9.1.0-14225641846 (#4469)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-04-03 08:54:49 +02:00
swapnil-verma-gl
9a8a45479e
[ACS-9388] Print button is now hidden for media files (#4495) 2025-04-02 15:56:13 +05:30
swapnil-verma-gl
ba75c0b233
[ACS-9466] Folder information dialog no longer displays error message if response returned from API is "IN_PROGRESS' (#4498)
* [ACS-9466] Added delay between folder size initiation and folder size retrieval APIs. Added case to check if folder size calculation is in progress or not, before displaying error message. Updated unit test

* [ACS-9466] Added unit test

* [ACS-9466] Updated unit test

* [ACS-9466] E2Es should now use latest version of alfresco content repository on GHA
2025-04-02 15:46:58 +05:30
dependabot[bot]
d8acd1954b
Build(deps): Bump the github-actions group (#4494)
Bumps the github-actions group in /.github/actions/deploy-local-acs with 2 updates: [docker/login-action](https://github.com/docker/login-action) and [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `docker/login-action` from 3.3.0 to 3.4.0
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](9780b0c442...74a5d14239)

Updates `Alfresco/alfresco-build-tools` from 8.16.0 to 8.18.0
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.16.0...v8.18.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-02 08:54:46 +02:00
dependabot[bot]
cd7121aa8c
Build(deps): Bump Alfresco/alfresco-build-tools (#4492)
Bumps the github-actions group in /.github/actions/adf-linking with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.16.0 to 8.18.0
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.16.0...v8.18.0)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-02 08:19:45 +02:00
dependabot[bot]
c1db5f0adb
Build(deps): Bump the github-actions group with 2 updates (#4493)
Bumps the github-actions group with 2 updates: [crowdin/github-action](https://github.com/crowdin/github-action) and [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `crowdin/github-action` from 2.6.1 to 2.7.0
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](2cc7959c56...b8012bd549)

Updates `Alfresco/alfresco-build-tools` from 8.16.0 to 8.18.0
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.16.0...v8.18.0)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-version: 2.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 15:46:21 +02:00
dependabot[bot]
2ef8901671
Build(deps): Bump Alfresco/alfresco-build-tools (#4491)
Bumps the github-actions group in /.github/actions/setup with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.16.0 to 8.18.0
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.16.0...v8.18.0)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 15:45:15 +02:00
MichalKinas
e01f0389d4
[MNT-24848] Include properties in search header calls (#4496)
* [MNT-24848] Include properties in search header calls

* [MNT-24848] [E2E] Excluded XAT-17700 and XAT-17702

---------

Co-authored-by: Adam Świderski <adam.tomasz.swiderski@gmail.com>
2025-04-01 14:42:22 +02:00
MichalKinas
c09bfc0809
[ACS-7241] Fixed if structure to properly run jobs if some are skipped (#4489)
* [ACS-7241] Test changes

* [ACS-7241] Change condition to always and add additional step for proper verification

* [ACS-7241] Echo additional info

* [ACS-7241] Echo additional info

* [ACS-7241] Echo additional info

* [ACS-7241] Echo additional info

* [ACS-7241] Fixed if conditionals
2025-03-31 11:59:38 +02:00
MichalKinas
af3b54129e
[ACS-7241] Parallel releases fix (#4488) 2025-03-31 10:12:00 +02:00
Adam Świderski
ec3d88829f
[ACS-9301] Updated IDs with the new test cases (#4483) 2025-03-31 09:52:56 +02:00
MichalKinas
d88bf8ce3e
[ACS-7241] Support parallel releases (#4297)
* [ACS-7241] Parallel releases support v1

* [ACS-7241] Add missing needs clauses

* [ACS-7241] Proper conditional job check

* [ACS-7241] Revert testing changes, namespace fix

* [ACS-7241] Add improved conditions
2025-03-31 09:15:45 +02:00
Adam Świderski
436127edb2
[ACS-9294] [E2E] XAT-4526 stable and included (#4482) 2025-03-27 12:11:34 +01:00
Adam Świderski
f879958781
[ACS-9255] Automated XAT-17591 (#4480) 2025-03-26 13:43:02 +01:00
Adam Świderski
d2b6e6d6b4
[ACS-9372] [E2E] Fixed eslint errors (#4479)
* [ACS-9372] Fixed eslint errors

* [ACS-9372] Review fixes 1
2025-03-26 09:09:52 +01:00
swapnil-verma-gl
8c1d2f3cd7
Fixed configuration issue preventing unit tests for rules getting executed (#4466)
* Fixed configuration issue preventing unit tests for rules getting executed

* Added unit tests for SnackbarEffects to improve coverage

* Added unit tests for RouterEffects to improve coverage

* Excluding store actions, models, selectors and states from getting included in code coverage

* Added type to store
2025-03-21 15:44:12 +05:30
swapnil-verma-gl
1ef1976a4c
[ACS-9388] Print button is now disabled in viewer for media files (#4465)
* [ACS-9388] Print button is now disabled in viewer for media files

* [ACS-9388] Added canPrintFile rule to documentation. Code review fixes
2025-03-20 14:16:30 +05:30
Vito Albano
ad52115f41
[AAE-33014] - Update rule for fetching ADF (#4467) 2025-03-19 15:53:39 +00:00
Akash Rathod
3575974609
[ACS-6412] remove excluded test for template issue (#4461)
* ACS-6412 remove excluded test for template issue

* ACS-6412 fix locator

* ACS-6412 fix locator

* ACS-6412 fix locator

* ACS-6412 test case fix

* ACS-6412 locator mat selector fix

* ACS-6412 locator mat selector fix
2025-03-19 12:03:24 +01:00
Adam Świderski
9d22bf0efe
[ACS-9297] [ACA] [E2E] Update test IDs to match the XRAY test cases IDs (#4429)
* [ACS-9297] [E2E] Authentication and List Views updated

* [ACS-9297] navigation tests IDs updated

* [ACS-9297] updated pagination IDs

* [ACS-9297] updated download actions ids

* [ACS-9297] Updated upload-download actions IDs & changed the location of viewer-version-actions tests to match XRAY

* [ACS-9297] updated copy-move-actions IDs

* [ACS-9297] Updated delete-actions IDs

* [ACS-9297] updated create-actions IDs

* [ACS-9297] Updated library-actions IDs

* [ACS_9297] Updated share IDs

* [ACS-9297] Special Permissions Updated IDs

* [ACS-9297] Updated viewer IDs

* [ACS-9297] Updated comments IDs

* [ACS-9297] Updated Search IDs

* [ACS-9297] Updated the remaning IDs

* [ACS-9297] one tests excluded one duplicated deleted

* [ACS-9297] fixing rebase mistakes 1
2025-03-19 10:20:24 +01:00
dependabot[bot]
8fffe98e01
Build(deps): Bump @babel/runtime and @angular-devkit/build-angular (#4455)
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) to 7.26.10 and updates ancestor dependency [@angular-devkit/build-angular](https://github.com/angular/angular-cli). These dependencies need to be updated together.


Updates `@babel/runtime` from 7.24.0 to 7.26.10
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

Updates `@angular-devkit/build-angular` from 17.3.12 to 17.3.13
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/17.3.12...17.3.13)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
- dependency-name: "@angular-devkit/build-angular"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 10:10:25 +01:00
Alfresco Build
1ea505314d
[ci:force][auto-commit] Update dependencies ADF:8.1.0-13941047340 JS:9.1.0-13941047340 (#4462)
Co-authored-by: AleksanderSklorz <115619721+AleksanderSklorz@users.noreply.github.com>
2025-03-19 09:42:33 +01:00
dependabot[bot]
db23b741eb
Build(deps): Bump the github-actions group (#4438)
Bumps the github-actions group in /.github/actions/deploy-local-acs with 2 updates: [azure/setup-helm](https://github.com/azure/setup-helm) and [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `azure/setup-helm` from 4.2.0 to 4.3.0
- [Release notes](https://github.com/azure/setup-helm/releases)
- [Changelog](https://github.com/Azure/setup-helm/blob/main/CHANGELOG.md)
- [Commits](fe7b79cd5e...b9e51907a0)

Updates `Alfresco/alfresco-build-tools` from 8.4.0 to 8.16.0
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.4.0...v8.16.0)

---
updated-dependencies:
- dependency-name: azure/setup-helm
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 09:14:43 +01:00
Akash Rathod
d3df91d15e
[ACS-9426] [e2e] fix smoke test sonar issue (#4459)
* ACS-9426 rewrite smoke test

* ACS-9426 rewrite smoke test add to xray

* ACS-9426 check for smoke test run
2025-03-19 09:13:57 +01:00
dependabot[bot]
485d499f9f
Build(deps): Bump Alfresco/alfresco-build-tools (#4423)
Bumps the github-actions group in /.github/actions/adf-linking with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.12.1 to 8.14.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.12.1...v8.14.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 09:03:49 +01:00
Mykyta Maliarchuk
73d4743b62
[ACS-9386] Fix wrong dialog title & button text on edit rule dialog (#4445) 2025-03-19 08:55:20 +01:00
dependabot[bot]
801d671f98
Build(deps): Bump the github-actions group with 2 updates (#4422)
Bumps the github-actions group with 2 updates: [crowdin/github-action](https://github.com/crowdin/github-action) and [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `crowdin/github-action` from 2.5.2 to 2.6.1
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](b811e49583...2cc7959c56)

Updates `Alfresco/alfresco-build-tools` from 8.12.1 to 8.14.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.12.1...v8.14.1)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 08:54:25 +01:00
dependabot[bot]
0ca8849d19
Build(deps): Bump Alfresco/alfresco-build-tools (#4421)
Bumps the github-actions group in /.github/actions/setup with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.12.1 to 8.14.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.12.1...v8.14.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 08:40:03 +01:00
dependabot[bot]
810a5044f3
Build(deps-dev): Bump axios from 1.8.1 to 1.8.3 (#4453)
Bumps [axios](https://github.com/axios/axios) from 1.8.1 to 1.8.3.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.8.1...v1.8.3)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 08:31:07 +01:00
Alfresco Build
6fceb2000f
[ci:force][auto-commit] Update dependencies ADF:8.1.0-13917759001 JS:9.1.0-13917759001 (#4434)
Co-authored-by: MichalKinas <113341662+MichalKinas@users.noreply.github.com>
2025-03-18 09:27:06 +01:00
MichalKinas
be9372b090
[ACS-9398] Add snackbar notifications for favorite actions (#4447) 2025-03-18 08:33:35 +01:00
MichalKinas
8a960a813e
Post-release version bump (#4456) 2025-03-18 07:44:50 +01:00
Adam Świderski
7995718ffc
[ACS-9424] [E2E] updated C595967 (#4458) 2025-03-17 13:43:49 +01:00
MichalKinas
5f7a80f94d
Release 6.0.0 (#4452)
* Release 6.0.0

* Reset cache
2025-03-17 12:45:13 +01:00
MichalKinas
0e7610919d
[ACS-9371] Migrate docs from docs.alfresco to support.hyland (#4446) 2025-03-12 14:25:42 +01:00
Swarnajit3004
2a509abebb
[ACS-9364] Update upload.e2e.ts tests to have proper expects (#4427) 2025-03-11 16:32:38 +05:30
Giovanni Toraldo
5bc0214e07
Bump tests environment to latest chart/tag (#4440) 2025-03-06 15:35:55 +01:00
Giovanni Toraldo
651212da62
Use kubectl-wait action (#4437) 2025-03-06 14:22:08 +01:00
dominikiwanekhyland
c8850bcd13
Update angular/cli (#4433) 2025-03-05 14:04:47 +01:00
Alfresco Build
c9199e7c57
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13674229115 JS:8.0.0-alpha.9-13674229115 (#4432)
Co-authored-by: MichalKinas <113341662+MichalKinas@users.noreply.github.com>
2025-03-05 12:36:41 +01:00
Alfresco Build
a46d84cd54
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13653137168 JS:8.0.0-alpha.9-13653137168 (#4431)
Co-authored-by: MichalKinas <113341662+MichalKinas@users.noreply.github.com>
2025-03-04 13:38:43 +01:00
Alfresco Build
e010f496f7
New Crowdin translations by GitHub Action (#4366)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: MichalKinas <113341662+MichalKinas@users.noreply.github.com>
2025-03-04 12:47:53 +01:00
MichalKinas
2e6229b779
[ACS-9346] Use visibility rules as array (#4430)
* [ACS-9346] Use visibility rules as array

* Empty commit to reset cache
2025-03-04 11:37:17 +01:00
Alfresco Build
66f8f7036c
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13628318332 JS:8.0.0-alpha.9-13628318332 (#4428)
Co-authored-by: AleksanderSklorz <115619721+AleksanderSklorz@users.noreply.github.com>
Co-authored-by: MichalKinas <113341662+MichalKinas@users.noreply.github.com>
2025-03-03 12:54:52 +01:00
swapnil-verma-gl
2efea8c6d8
Rollback visibility rules cleanup (#4426)
* Revert "[ACS-9369] Updated rule-migration-guide.md to include missed rule (#4420)"

This reverts commit b3e2af7f0fc1dbd67186d03c98ea8b6f4ab19f47.

* Revert "[ACS-9369] Resolved issues where visibility rules with a single element array would log errors (#4416)"

This reverts commit 4e33f1126da07cf18c1896f7e839336e493b12cb.

* Revert "[ACS-8694] Cleanup of visibility rules for extensions in ACA (#4140)"

This reverts commit f1c4dcf45d0d0ce038109510004bf0edb66c6e66.
2025-03-03 16:56:13 +05:30
AleksanderSklorz
4e37f194ac
[ACS-9225] serious a11y testing side bar elements must meet minimum color contrast ratio thresholds (#4425)
* [ACS-9225] Fixed color contrast ratio for sidebar elements

* [ACS-9225] Fixed color contrast ratio for sidebar elements
2025-03-03 11:09:10 +01:00
Alfresco Build
553ecf8cea
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13569691252 JS:8.0.0-alpha.9-13569691252 (#4419)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-28 17:27:18 +01:00
Mykyta Maliarchuk
9724f46258
[ACA-4735] Fix search input focus styles (#4418) 2025-02-28 15:40:04 +01:00
Swarnajit3004
03b5ac83cc
[ACS-9291] [ACA] [E2E] Automate XAT-5488, XAT-5490 (#4405)
* [XAT-5488] [XAT-5490] Percentage of the zoom when an image is opened in viewer mode

* [XAT-5488] [XAT-5490] Percentage of the zoom when an image is opened in viewer mode_2

* [XAT-5488] [XAT-5490] Percentage of the zoom when an image is opened in viewer mode_3

* Zoom activity on different files in viewer_Committed on 022125_1

* Committed on 022525_1

* Committed on 022725_1

* Committed on 02282025_1
2025-02-28 16:49:53 +05:30
swapnil-verma-gl
b3e2af7f0f
[ACS-9369] Updated rule-migration-guide.md to include missed rule (#4420) 2025-02-28 13:17:26 +05:30
swapnil-verma-gl
4e33f1126d
[ACS-9369] Resolved issues where visibility rules with a single element array would log errors (#4416)
* [ACS-9369] Resolved issues where visibility rules with a single element array would log errors

* [ACS-9369] Improved rule array filtering logic

* [ACS-9369] Added type to variable
2025-02-27 17:20:43 +05:30
MichalKinas
34c52ac42f
[MNT-24892] Upgrade Node to 20 (#4415) 2025-02-27 12:27:23 +01:00
Alfresco Build
60d53ddbf7
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13562138419 JS:8.0.0-alpha.9-13562138419 (#4413)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-27 11:21:34 +01:00
AleksanderSklorz
0696ce82ba
[ACS-9344] change permissions error message for opening records management library (#4414)
* [ACS-9344] Changed error messages

* [ACS-9344] Unit tests

* [ACS-9344] Fixed unit test
2025-02-27 08:05:44 +01:00
swapnil-verma-gl
f1c4dcf45d
[ACS-8694] Cleanup of visibility rules for extensions in ACA (#4140)
* [ACS-8694] Updated occurrences of visible in extensions.json to use arrays instead of single strings. Cleaned up rules in aca-content.module.ts

* [ACS-8694] Removed extra commas

* [ACS-8694] Broke down canDelete rule into seperate entities

* [ACS-8694] Fixed typo for notEmpty rule

* [ACS-8694] Fixed rule for edit offline

* [ACS-8694] Updated extension.schema.json

* [ACS-8694] Updated extension.schema.json

* [ACS-8694] Fixed rule for manage versions context menu item

* [ACS-8694] Fixed rule for manage versions and manage permissions

* [ACS-8694] Added rules.canManageFolderRules

* [ACS-8694] Fixed typo

* [ACS-8694] Updated visibility rules for folder rules and AOS plugin

* [ACS-8694] Updated extension.schema.json

* [ACS-8694] Updated existing rules to use !isTrashcan() instead of isNotTrashcan()

* [ACS-8694] folder-rules.plugin.json now uses arrays for controlling visibility

* [ACS-8694] Updated app.extensions.schema

* [ACS-8694] Removed unused rules

* [ACS-8694] Added unit tests for canToggleFileLock

* [ACS-8694] Added rules-list.md

* [ACS-8694] Revert unneeded project.json change

* [ACS-8694] Fixed toggleEditOffline rule

* [ACS-8694] Added migration guide (#4139)

* [ACS-8694] Added migration guide

* [ACS-8694] Fixed typo

* [ACS-8694] Added missing rule migration. Fixed incorrect rule migration. Fixed typos

* [ACS-8694] Code review finding - Replaced instance of any

* [ACS-8694] Code review finding - Updated rules.md. Removed duplication of rules list from rules-list.md. Added pointer to rules-list.md under tips section

* [ACS-8694] Fixed build issue

* [ACS-8694] Removed unneeded isNotDetails rule
2025-02-25 17:00:22 +05:30
Alfresco Build
1dd00c9e4c
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13448157104 JS:8.0.0-alpha.9-13448157104 (#4409)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-24 08:29:16 +01:00
Mykyta Maliarchuk
4751dcd12c
[ACS-9158] Remove 'View Details' button from node Details page (#4351)
* [ACS-9158] Remove 'View Details' button from node Details page

* [ACS-9158] remove redundant onDestroy$

* cr fix
2025-02-21 14:53:22 +01:00
AleksanderSklorz
c799049790
[ACS-8782] list of frozen files under a hold (#4406)
* [ACS-8782] Exported content management service and hide drag and drop hint when files can not be uploaded

* [ACS-8782] Unit tests

* [ACS-8782] Fixed unit test issues

* [ACS-8782] Fixed unit test issues
2025-02-20 14:12:07 +01:00
Alfresco Build
8e8b6c051d
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13433112066 JS:8.0.0-alpha.9-13433112066 (#4407)
Co-authored-by: AleksanderSklorz <115619721+AleksanderSklorz@users.noreply.github.com>
2025-02-20 12:02:48 +01:00
Alfresco Build
b7bfa7494b
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13391109227 JS:8.0.0-alpha.9-13391109227 (#4404)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-19 10:19:33 +01:00
Akash Rathod
a99ca755ea
ACS-9201 create smoke test suite (#4361)
* ACS-9201 create smote suite

* [ACS-9201] add smoke test workflow

* [ACS-9201] add smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] fix smoke test workflow

* [ACS-9201] revert playwright pr smoke test run

* [ACS-9201]smoke test suite tests

* [ACS-9201]smoke test suite tests

* [ACS-9201] remove workflow changes as not needed

* [ACS-9201] fix lint
2025-02-18 12:32:29 +01:00
Alfresco Build
3412fe1da5
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13385746022 JS:8.0.0-alpha.9-13385746022 (#4403)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-18 12:14:43 +01:00
Mykyta Maliarchuk
261cdaebed
[ACS-9266] Make notification and user menu accessible with keyboard (#4394)
* [ACS-9266] Make notification and user menu accessible with keyboard

* [ACS-9266] cr fixes

* [ACS-9266] cr fix

* [link-adf:dev-mmaliarchuk/ACS-9266-Notification-and-user-menu-are-not-accessible-with-keyboard][ci:force]

* empty commit
2025-02-17 14:05:02 +01:00
Alfresco Build
a75ddc4cfb
GH Auto: Upstream dependencies ADF:7.0.0-alpha.9-13367447514 JS-API:8.0.0-alpha.9-13367447514 using Tag:7.0.0-alpha.9-13367447514 (#4402)
* [ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13367447514  JS:8.0.0-alpha.9-13367447514

* C589205 - excluded a failing test for future investigation

---------

Co-authored-by: nikita-web-ua <84377976+nikita-web-ua@users.noreply.github.com>
Co-authored-by: Adam Świderski <adam.tomasz.swiderski@gmail.com>
2025-02-17 13:30:25 +01:00
Alfresco Build
d758d00d3d
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13357533609 JS:8.0.0-alpha.9-13357533609 (#4401)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-17 08:16:16 +01:00
dependabot[bot]
0fa7569ea9
Build(deps): Bump vite and @angular-devkit/build-angular (#4395)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to 5.4.14 and updates ancestor dependency [@angular-devkit/build-angular](https://github.com/angular/angular-cli). These dependencies need to be updated together.


Updates `vite` from 5.0.12 to 5.4.14
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.14/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.14/packages/vite)

Updates `@angular-devkit/build-angular` from 17.1.4 to 17.3.12
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/17.1.4...17.3.12)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
- dependency-name: "@angular-devkit/build-angular"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-14 12:40:07 +01:00
Alfresco Build
1c9ffd6a2c
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.9-13304787292 JS:8.0.0-alpha.9-13304787292 (#4387)
Co-authored-by: AleksanderSklorz <115619721+AleksanderSklorz@users.noreply.github.com>
2025-02-14 10:33:21 +01:00
dominikiwanekhyland
a70378bffc
[ACS-6849][ACA] Upgrade to Angular 17 (#4275) 2025-02-12 14:42:09 +01:00
Adam Świderski
b013818649
[ACS-9187] [E2E] Fix XAT-5304 - file downloading is flaky (#4375)
* [ACS-9187] [E2E] Github Actions test run

* [ACS-9187] added artifacts

* [ACS-9187] Download fix1 for XAT-5304

* [ACS-9187] removed github artifacts
2025-02-10 12:03:50 +01:00
dominikiwanekhyland
2093a7acc1
[ACS-9229] a11y testing: Search Page / Elements must only use supported ARIA attributes (#4383) 2025-02-10 10:06:29 +01:00
Alfresco Build
766ee8e937
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13199421341 JS:8.0.0-alpha.8-13199421341 (#4382)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-10 09:18:40 +01:00
Wojciech Duda
5bd8357169
AAE-30880 Remove usage of commonjs buffer package (#4379)
* AAE-30880 Remove usage of commonjs buffer package

* AAE-30880 Replace missing conversion with atob

* AAE-30880 Utilize TextEncoder tool
2025-02-07 14:59:02 +01:00
Mykyta Maliarchuk
6a5e894998
[ACS-9235] a11y testing: Breadcrumbs / Back Arrow / Buttons must have discernible text (#4384)
* [ACS-9235] a11y testing: Breadcrumbs / Back Arrow / Buttons must have discernible text

* [ACS-9235] a11y testing: Breadcrumbs / Back Arrow / Buttons must have discernible text
2025-02-07 13:36:32 +01:00
Mykyta Maliarchuk
0446ef6090
[ACS-9236] a11y testing: Create Rule - Buttons must have discernible text (#4381) 2025-02-07 13:35:04 +01:00
dominikiwanekhyland
85e0b43359
[ACS-9228] a11y testing: Search Page / Buttons must have discernible text (#4376) 2025-02-07 08:52:17 +01:00
Alfresco Build
9f3486b3d1
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13178609839 JS:8.0.0-alpha.8-13178609839 (#4380)
Co-authored-by: nikita-web-ua <84377976+nikita-web-ua@users.noreply.github.com>
2025-02-06 14:15:27 +01:00
Alfresco Build
8981fa9e97
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13161984194 JS:8.0.0-alpha.8-13161984194 (#4374)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-06 12:19:05 +01:00
Mykyta Maliarchuk
e0fa9d6d5c
[ACS-9213] Update license visible on login page from SSO (#4373) 2025-02-04 14:21:20 +01:00
Mykyta Maliarchuk
09636b377d
[ACS-9211] Update license headers (#4372) 2025-02-04 12:11:48 +01:00
Adam Świderski
f01d6e161b
[ACS-9154] Fix unstable tests in ACA after migration to local ACS (#4341)
* [ACS-9154] enable flaky tests for debugging

* [ACS-9154] added artifacts

* [ACS-9154] Added wait for viewer spinner to load + excluded one test

* [ACS-9154] Final tests stabilization (for this pr)

* [ACS-9154] Excluded XAT-5304

* [ACS-9154] exclude C277736 updated
2025-02-04 11:35:17 +01:00
Alfresco Build
9138802bd3
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13117029289 JS:8.0.0-alpha.8-13117029289 (#4371)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-04 08:28:37 +01:00
dependabot[bot]
6cfd7aa844
Build(deps): Bump Alfresco/alfresco-build-tools (#4368)
Bumps the github-actions group in /.github/actions/setup with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.8.0 to 8.12.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.8.0...v8.12.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 13:25:20 +01:00
dependabot[bot]
b3b5096e41
Build(deps): Bump the github-actions group with 2 updates (#4369)
Bumps the github-actions group with 2 updates: [crowdin/github-action](https://github.com/crowdin/github-action) and [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `crowdin/github-action` from 2.5.0 to 2.5.2
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](8dfaf9c206...b811e49583)

Updates `Alfresco/alfresco-build-tools` from 8.8.0 to 8.12.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.8.0...v8.12.1)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 12:52:52 +01:00
dependabot[bot]
1cff5dd4ce
Build(deps): Bump Alfresco/alfresco-build-tools (#4367)
Bumps the github-actions group in /.github/actions/adf-linking with 1 update: [Alfresco/alfresco-build-tools](https://github.com/alfresco/alfresco-build-tools).


Updates `Alfresco/alfresco-build-tools` from 8.8.0 to 8.12.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/v8.8.0...v8.12.1)

---
updated-dependencies:
- dependency-name: Alfresco/alfresco-build-tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 12:25:22 +01:00
Alfresco Build
b4a2beab37
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13074429584 JS:8.0.0-alpha.8-13074429584 (#4364)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-02-03 09:53:55 +01:00
Alfresco Build
8348b4242d
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13068943536 JS:8.0.0-alpha.8-13068943536 (#4363)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-01-31 10:29:49 +01:00
dominikiwanekhyland
75f25e9741
[ACS-9083][ADW] Comment creation is available after document is retained (declared as record) (#4359) 2025-01-30 10:32:04 +01:00
Alfresco Build
2c1e2c63d6
[ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13038266721 JS:8.0.0-alpha.8-13038266721 (#4360)
Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
2025-01-30 08:10:34 +01:00
swapnil-verma-gl
02caa7acbd
[ACS-9119] Saved Search navbar title now gets translated (#4356)
* [ACS-9119] Fixed issue where Saved Search Nav Bar title was not getting updated on changing language

* [ACS-9119] Added unit test

* [ACS-9119] Added null safety check

* [ACS-9119] Addressed PR comments

* [ACS-9119] Fixed Unit test
2025-01-29 15:24:30 +05:30
Alfresco Build
003537ff1c
GH Auto: Upstream dependencies ADF:7.0.0-alpha.8-13013055766 JS-API:8.0.0-alpha.8-13013055766 using Tag:7.0.0-alpha.8-13013055766 (#4349)
* [ci:force][auto-commit] Update dependencies ADF:7.0.0-alpha.8-13013055766  JS:8.0.0-alpha.8-13013055766

* fix test

---------

Co-authored-by: DenysVuika <503991+DenysVuika@users.noreply.github.com>
Co-authored-by: Mykyta Maliarchuk <mykyta.maliarchuk@hyland.com>
2025-01-29 10:36:45 +01:00
MichalKinas
3bfeca3b86
[ACS-9166] Migrate Saved Searches to preferences API from config file (#4358)
* [ACS-9166] Migrate Saved Searches to preferences API from config file

* [ACS-9166] Remove unused components

* [ACS-9166] Unit test fix

* [ACS-9166] sorting test fix

* [ACS-9166] Bump ADF version

---------

Co-authored-by: akash.rathod@hyland.com <akash.rathod@hyland.com>
2025-01-28 11:48:45 +01:00
AleksanderSklorz
0286d08b63
Post release version bump (#4357) 2025-01-27 13:15:30 +01:00
723 changed files with 16451 additions and 9762 deletions

View File

@ -59,7 +59,7 @@
"error",
[
"/*!",
" * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.",
" * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.",
" *",
" * Alfresco Example Content Application",
" *",

View File

@ -18,4 +18,9 @@ kibana-audit:
enabled: false
alfresco-repository:
image:
tag: 25.1.0-A.7
tag: latest
global:
imagePullSecrets:
- name: regcred
alfrescoRegistryPullSecrets: regcred
known_urls: http://localhost

View File

@ -4,7 +4,7 @@ description: "ADF linking"
runs:
using: "composite"
steps:
- uses: Alfresco/alfresco-build-tools/.github/actions/get-commit-message@v8.8.0
- uses: Alfresco/alfresco-build-tools/.github/actions/get-commit-message@v8.19.1
- name: clone and install
shell: bash
run: |

View File

@ -18,28 +18,27 @@ inputs:
runs:
using: "composite"
steps:
- uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814
- uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112
with:
version: "3.14.3"
- name: Login to Docker Hub
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
username: ${{ inputs.docker_username }}
password: ${{ inputs.docker_password }}
- name: Login to Quay.io
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: quay.io
username: ${{ inputs.quay_username }}
password: ${{ inputs.quay_password }}
- name: Setup cluster
uses: Alfresco/alfresco-build-tools/.github/actions/setup-kind@v8.4.0
uses: Alfresco/alfresco-build-tools/.github/actions/setup-kind@v8.19.1
with:
ingress-nginx-ref: controller-v1.8.2
metrics: "true"
- name: Set nginx ingress config
shell: bash
@ -64,7 +63,7 @@ runs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: Alfresco/acs-deployment
ref: v8.6.1
ref: v9.0.0
path: acs-deployment
- name: Helm install
@ -73,25 +72,8 @@ runs:
helm dep build acs-deployment/helm/alfresco-content-services &&
helm install acs acs-deployment/helm/alfresco-content-services
--set global.search.sharedSecret="$(openssl rand -hex 24)"
--set global.known_urls=http://localhost
--set global.alfrescoRegistryPullSecrets=regcred
--values acs-deployment/test/enterprise-integration-test-values.yaml
--values .github/acs-deployment-values-override.yaml
- name: Watch Helm deployment
shell: bash
run: |
kubectl get pods --watch &
KWPID=$!
kubectl wait --timeout=7m --all=true --for=condition=Available deploy && kill $KWPID
echo -n "Waiting for ESC Reindexing job to complete... "
kubectl wait --timeout=5m --for=condition=complete job/acs-alfresco-search-enterprise-reindexing
echo "Completed."
- name: Spit cluster status after install
if: always()
shell: bash
run: |
helm ls --all-namespaces --all
helm status acs --show-resources
kubectl describe pod
- name: Wait for pods to be ready
uses: Alfresco/alfresco-build-tools/.github/actions/kubectl-wait@v8.19.1

View File

@ -12,7 +12,7 @@ runs:
- name: Get docker image tag name
shell: bash
run: |
if [[ "${{ inputs.branch_name }}" == "master" ]]; then
if [[ "${{ inputs.branch_name }}" == "master" ]] || [[ "${{ inputs.branch_name }}" == release/* ]]; then
TAG_VERSION="$(jq -cr '.version' < package.json)"
else
TAG_VERSION="${{ inputs.branch_name }}-${{ github.run_id }}"

View File

@ -18,7 +18,7 @@ runs:
- name: publish tag
shell: bash
run: |
if [[ "${{ inputs.branch_name }}" == "master" ]]; then
if [[ "${{ inputs.branch_name }}" == "master" ]] || [[ "${{ inputs.branch_name }}" == release/* ]]; then
VERSION=$(jq -cr '.version' < package.json)
echo "git tag -a ${VERSION} -m ${VERSION}"

View File

@ -1,6 +1,12 @@
name: "Variables setup"
description: "Variables setup"
inputs:
npm_tag:
description: 'NPM tag'
required: false
type: string
runs:
using: "composite"
steps:
@ -13,27 +19,31 @@ runs:
echo "GIT_HASH=$(git rev-parse HEAD)" >> $GITHUB_ENV
echo "HEAD_HASH=HEAD" >> $GITHUB_ENV
- uses: Alfresco/alfresco-build-tools/.github/actions/get-branch-name@v8.8.0
- uses: Alfresco/alfresco-build-tools/.github/actions/get-branch-name@v8.19.1
- name: set TAG_NPM
shell: bash
run: |
TAG_NPM="alpha"
VERSION_IN_PACKAGE_JSON=$(jq -cr '.version' < package.json)
if [[ -n "${{ inputs.npm_tag }}" ]]; then
TAG_NPM=${{ inputs.npm_tag }}
else
TAG_NPM="alpha"
VERSION_IN_PACKAGE_JSON=$(jq -cr '.version' < package.json)
echo "version in package.json=${VERSION_IN_PACKAGE_JSON}"
echo "version in package.json=${VERSION_IN_PACKAGE_JSON}"
if [[ $BRANCH_NAME =~ ^master(-patch.*)?$ ]]; then
# Pre-release versions
if [[ $VERSION_IN_PACKAGE_JSON =~ ^[0-9]*\.[0-9]*\.[0-9]*-A\.[0-9]*$ ]];
then
TAG_NPM=next
# Stable major versions
else
TAG_NPM=latest
fi
fi
if [[ $BRANCH_NAME =~ ^master(-patch.*)?$ ]] || [[ $BRANCH_NAME == release/* ]]; then
# Pre-release versions
if [[ $VERSION_IN_PACKAGE_JSON =~ ^[0-9]*\.[0-9]*\.[0-9]*-A\.[0-9]*$ ]];
then
TAG_NPM=next
# Stable major versions
else
TAG_NPM=latest
fi
fi
if [[ $BRANCH_NAME =~ ^develop(-patch.*)?$ ]]; then
TAG_NPM=alpha
if [[ $BRANCH_NAME =~ ^develop(-patch.*)?$ ]]; then
TAG_NPM=alpha
fi
fi
echo "TAG_NPM=${TAG_NPM}" >> $GITHUB_ENV

View File

@ -61,3 +61,12 @@ updates:
github-actions:
patterns:
- "*"
- package-ecosystem: "github-actions"
directory: "/.github/actions/deploy-local-acs"
schedule:
interval: "monthly"
groups:
github-actions:
patterns:
- "*"

View File

@ -10,7 +10,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Pull translations from Crowdin
uses: crowdin/github-action@8dfaf9c206381653e3767e3cb5ea5f08b45f02bf # v2.5.0
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0
with:
upload_sources: false
download_translations: true

View File

@ -146,6 +146,10 @@ jobs:
id: 16
- name: "edit-actions"
id: 17
- name: "smoke-test"
id: 18
- name: "folder-information-actions"
id: 19
steps:
- name: Checkout
uses: actions/checkout@v4
@ -213,7 +217,7 @@ jobs:
fetch-depth: 2
- name: Extract commit message
uses: Alfresco/alfresco-build-tools/.github/actions/get-commit-message@v8.8.0
uses: Alfresco/alfresco-build-tools/.github/actions/get-commit-message@v8.19.1
- name: Check ADF link
shell: bash

View File

@ -1,87 +0,0 @@
name: Release ACA libs from branch
run-name: Release ACA libs from branch ${{ github.ref_name }}
on:
workflow_dispatch:
inputs:
dry-run-flag:
description: 'enable dry-run'
required: false
type: boolean
default: true
env:
BASE_URL: ${{ secrets.PIPELINE_ENV_URL }}
jobs:
lint:
name: 'lint'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- run: npm ci
- run: npm run affected:lint -- --base=origin/develop
- run: npm run stylelint
unit-tests:
needs: [lint]
name: "Unit tests: ${{ matrix.unit-tests.name }}"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
unit-tests:
- name: "aca-content"
- name: "aca-shared"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: ./.github/actions/before-install
- run: npm ci
- run: npm run affected:test -- --browsers=ChromeHeadless --watch=false $TEST_OPTS --base=origin/develop
publish-libs:
needs: [lint, unit-tests]
name: "Publish libs to NPM and GitHub registry"
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: Alfresco/alfresco-build-tools/.github/actions/get-branch-name@v8.8.0
- name: publish
uses: ./.github/actions/publish-libs
with:
branch_name: ${{ env.BRANCH_NAME }}
github_token: ${{ secrets.BOT_GITHUB_TOKEN }}
npm_registry_token: ${{ secrets.NPM_REGISTRY_TOKEN }}
npm_tag: 'branch'
dry-run: ${{ inputs.dry-run-flag }}

View File

@ -1,10 +1,36 @@
name: "Release"
name: Release workflow
run-name: Release workflow triggered from ${{ github.ref_name }} branch
on:
workflow_dispatch:
inputs:
publish-to-docker:
description: 'Publish to Docker'
required: false
type: boolean
default: true
publish-to-quay:
description: 'Publish to Quay'
required: false
type: boolean
default: true
publish-to-npm:
description: 'Publish NPM libraries'
required: false
type: boolean
default: true
publish-git-tag:
description: 'Publish Git Tag'
required: false
type: boolean
default: true
npm-tag:
description: 'NPM tag that libraries will be published with'
required: false
type: string
default: ''
dry-run-release:
description: 'enable dry-run'
description: 'Enable dry-run'
required: false
type: boolean
default: true
@ -12,6 +38,7 @@ on:
branches:
- master
- develop
- release/**
env:
BASE_URL: ${{ secrets.PIPELINE_ENV_URL }}
@ -20,10 +47,61 @@ env:
PLAYWRIGHT_E2E_HOST: ${{ secrets.PLAYWRIGHT_E2E_HOST }}
jobs:
lint:
if: github.event_name == 'workflow_dispatch'
name: 'lint'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- run: npm ci
- run: npm run affected:lint -- --base=origin/develop
- run: npm run stylelint
unit-tests:
if: github.event_name == 'workflow_dispatch'
needs: [lint]
name: "Unit tests: ${{ matrix.unit-tests.name }}"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
unit-tests:
- name: "aca-content"
- name: "aca-shared"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: ./.github/actions/before-install
- run: npm ci
- run: npm run affected:test -- --browsers=ChromeHeadless --watch=false $TEST_OPTS --base=origin/develop
publish-docker-registry:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish to Quay"
runs-on: ubuntu-latest
steps:
- name: Check previous jobs status
if: ${{ inputs.publish-to-quay == 'false' || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: exit 1
- name: Checkout
uses: actions/checkout@v4
with:
@ -34,6 +112,8 @@ jobs:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: Get Tag
uses: ./.github/actions/get-image-tag
@ -50,9 +130,15 @@ jobs:
dry-run: ${{ inputs.dry-run-release }}
publish-to-dockerhub:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish to Dockerhub"
runs-on: ubuntu-latest
steps:
- name: Check previous jobs status
if: ${{ inputs.publish-to-docker == 'false' || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: exit 1
- name: Checkout
uses: actions/checkout@v4
with:
@ -63,6 +149,8 @@ jobs:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: Get Tag
uses: ./.github/actions/get-image-tag
@ -79,9 +167,15 @@ jobs:
dry-run: ${{ inputs.dry-run-release }}
publish-git-tag:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish Git Tag"
runs-on: ubuntu-latest
steps:
- name: Check previous jobs status
if: ${{ inputs.publish-git-tag == 'false' || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: exit 1
- name: Checkout
uses: actions/checkout@v4
with:
@ -92,7 +186,9 @@ jobs:
node-version-file: '.nvmrc'
cache: 'npm'
- uses: ./.github/actions/setup
- uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.8.0
with:
npm_tag: ${{ inputs.npm-tag }}
- uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.19.1
with:
username: ${{ vars.BOT_GITHUB_USERNAME }}
email: ${{ vars.BOT_GITHUB_EMAIL }}
@ -105,11 +201,17 @@ jobs:
dry-run: ${{ inputs.dry-run-release }}
publish-libs:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish libs to NPM and GitHub registry"
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Check previous jobs status
if: ${{ inputs.publish-to-npm == 'false' || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: exit 1
- name: Checkout
uses: actions/checkout@v4
with:
@ -122,6 +224,8 @@ jobs:
cache: 'npm'
- uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: publish
uses: ./.github/actions/publish-libs
@ -145,7 +249,7 @@ jobs:
uses: actions/checkout@v4
- name: Push Source Files to Crowdin
uses: crowdin/github-action@8dfaf9c206381653e3767e3cb5ea5f08b45f02bf # v2.5.0
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0
with:
upload_sources: true
upload_sources_args: --delete-obsolete

2
.nvmrc
View File

@ -1 +1 @@
18
20.18.1

View File

@ -1,6 +1,6 @@
# 1. Generate licenses
FROM node:18.16-alpine3.17 AS builder
FROM node:20.18-alpine3.21 AS builder
WORKDIR /usr/src/alfresco
COPY package.json package.json

View File

@ -12,18 +12,19 @@ Please refer to the public [documentation](https://alfresco-content-app.netlify.
## Compatibility
| ACA | ADF | ACS | Node | Angular |
|-------|---------------|-----------|------|--------|
| 5.3.x | 7.0.0-alpha.7 | 23.4 | 18.x | 16.x |
| 5.2.x | 7.0.0-alpha.6 | 23.4 | 18.x | 16.x |
| 5.1.x | 7.0.0-alpha.3 | 23.3 | 18.x | 15.x |
| 5.0.x | 7.0.0-alpha.2 | 23.3 | 18.x | 15.x |
| 4.4.x | 6.7 | 23.2 | 18.x | 14.x |
| 4.3.x | 6.4 | 23.1 | 18.x | 14.x |
| 4.2.x | 6.3 | 23.1.0-M4 | 18.x | 14.x |
| 4.1.x | 6.2 | 7.4 | 18.x | 14.x |
| 4.0.x | 6.1 | 7.4 | 14.x | 14.x |
| 3.1.x | 5.1 | 7.3 | | |
| 3.0.x | 5.0 | 7.3 | | |
|-------|---------------|-----------|------|---------|
| 6.0.x | 7.0.0 | 25.1 | 20.x | 17.x |
| 5.3.x | 7.0.0-alpha.7 | 23.4 | 18.x | 16.x |
| 5.2.x | 7.0.0-alpha.6 | 23.4 | 18.x | 16.x |
| 5.1.x | 7.0.0-alpha.3 | 23.3 | 18.x | 15.x |
| 5.0.x | 7.0.0-alpha.2 | 23.3 | 18.x | 15.x |
| 4.4.x | 6.7 | 23.2 | 18.x | 14.x |
| 4.3.x | 6.4 | 23.1 | 18.x | 14.x |
| 4.2.x | 6.3 | 23.1.0-M4 | 18.x | 14.x |
| 4.1.x | 6.2 | 7.4 | 18.x | 14.x |
| 4.0.x | 6.1 | 7.4 | 14.x | 14.x |
| 3.1.x | 5.1 | 7.3 | | |
| 3.0.x | 5.0 | 7.3 | | |
> See <https://angular.io/guide/versions> for more details on Angular and Node.js compatibility

View File

@ -41,7 +41,7 @@
"output": "/assets"
},
{
"glob": "pdf.worker.min.js",
"glob": "pdf.worker.min.mjs",
"input": "node_modules/pdfjs-dist/build",
"output": "/"
},
@ -89,10 +89,19 @@
"styles": [
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css",
"node_modules/katex/dist/katex.min.css",
"node_modules/prismjs/themes/prism-okaidia.css",
"projects/aca-content/src/lib/ui/application.scss",
"app/src/styles.scss"
],
"scripts": ["node_modules/pdfjs-dist/build/pdf.js", "node_modules/pdfjs-dist/web/pdf_viewer.js"],
"scripts": [
"node_modules/mermaid/dist/mermaid.min.js",
"node_modules/katex/dist/katex.min.js",
"node_modules/katex/dist/contrib/auto-render.min.js",
"node_modules/prismjs/prism.js",
"node_modules/prismjs/components/prism-csharp.min.js",
"node_modules/prismjs/components/prism-css.min.js"
],
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,

View File

@ -126,6 +126,7 @@
},
"search-headers": {
"filterWithContains": true,
"include": ["path", "allowableOperations", "properties"],
"app:fields": [
"cm:name",
"cm:title",

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -40,6 +40,7 @@ The documentation is divided into the following sections:
| ACA | ADF | ACS | Node | Angular |
|-------|---------------|-----------|------|---------|
| 6.0.x | 7.0.0 | 25.1 | 20.x | 17.x |
| 5.3.x | 7.0.0-alpha.7 | 23.4 | 18.x | 16.x |
| 5.2.x | 7.0.0-alpha.6 | 23.4 | 18.x | 16.x |
| 5.1.x | 7.0.0-alpha.3 | 23.3 | 18.x | 15.x |

View File

@ -0,0 +1,25 @@
---
Title: Audit info, alfresco-content-app 6.0.0
---
# Audit information for alfresco-content-app 6.0.0
This page lists the security audit of the dependencies this project depends on.
## Risks
- Critical risk: 0
- High risk: 1
- Moderate risk: 1
- Low risk: 0
Dependencies analyzed:
## Libraries
| Severity | Module | Vulnerable versions |
| --- | --- | --- |
|moderate | @babel/runtime | &#34;&lt;7.26.10&#34; |
|high | pdfjs-dist | &#34;&lt;=4.1.392&#34; |

View File

@ -0,0 +1,40 @@
---
Title: Changelog for alfresco-content-app v6.0.0
---
# Changelog
- [0e7610919](git@github.com:Alfresco/alfresco-content-app/commit/0e7610919) [ACS-9371] Migrate docs from docs.alfresco to support.hyland (#4446)
- [2a509abeb](git@github.com:Alfresco/alfresco-content-app/commit/2a509abeb) [ACS-9364] Update upload.e2e.ts tests to have proper expects (#4427)
- [5bc0214e0](git@github.com:Alfresco/alfresco-content-app/commit/5bc0214e0) Bump tests environment to latest chart/tag (#4440)
- [651212da6](git@github.com:Alfresco/alfresco-content-app/commit/651212da6) Use kubectl-wait action (#4437)
- [c8850bcd1](git@github.com:Alfresco/alfresco-content-app/commit/c8850bcd1) Update angular/cli (#4433)
- [2e6229b77](git@github.com:Alfresco/alfresco-content-app/commit/2e6229b77) [ACS-9346] Use visibility rules as array (#4430)
- [2efea8c6d](git@github.com:Alfresco/alfresco-content-app/commit/2efea8c6d) Rollback visibility rules cleanup (#4426)
- [4e37f194a](git@github.com:Alfresco/alfresco-content-app/commit/4e37f194a) [ACS-9225] serious a11y testing side bar elements must meet minimum color contrast ratio thresholds (#4425)
- [9724f4625](git@github.com:Alfresco/alfresco-content-app/commit/9724f4625) [ACA-4735] Fix search input focus styles (#4418)
- [03b5ac83c](git@github.com:Alfresco/alfresco-content-app/commit/03b5ac83c) [ACS-9291] [ACA] [E2E] Automate XAT-5488, XAT-5490 (#4405)
- [b3e2af7f0](git@github.com:Alfresco/alfresco-content-app/commit/b3e2af7f0) [ACS-9369] Updated rule-migration-guide.md to include missed rule (#4420)
- [4e33f1126](git@github.com:Alfresco/alfresco-content-app/commit/4e33f1126) [ACS-9369] Resolved issues where visibility rules with a single element array would log errors (#4416)
- [34c52ac42](git@github.com:Alfresco/alfresco-content-app/commit/34c52ac42) [MNT-24892] Upgrade Node to 20 (#4415)
- [0696ce82b](git@github.com:Alfresco/alfresco-content-app/commit/0696ce82b) [ACS-9344] change permissions error message for opening records management library (#4414)
- [f1c4dcf45](git@github.com:Alfresco/alfresco-content-app/commit/f1c4dcf45) [ACS-8694] Cleanup of visibility rules for extensions in ACA (#4140)
- [4751dcd12](git@github.com:Alfresco/alfresco-content-app/commit/4751dcd12) [ACS-9158] Remove &#39;View Details&#39; button from node Details page (#4351)
- [c79904979](git@github.com:Alfresco/alfresco-content-app/commit/c79904979) [ACS-8782] list of frozen files under a hold (#4406)
- [a99ca755e](git@github.com:Alfresco/alfresco-content-app/commit/a99ca755e) ACS-9201 create smoke test suite (#4361)
- [261cdaebe](git@github.com:Alfresco/alfresco-content-app/commit/261cdaebe) [ACS-9266] Make notification and user menu accessible with keyboard (#4394)
- [a70378bff](git@github.com:Alfresco/alfresco-content-app/commit/a70378bff) [ACS-6849][ACA] Upgrade to Angular 17 (#4275)
- [b01381864](git@github.com:Alfresco/alfresco-content-app/commit/b01381864) [ACS-9187] [E2E] Fix XAT-5304 - file downloading is flaky (#4375)
- [2093a7acc](git@github.com:Alfresco/alfresco-content-app/commit/2093a7acc) [ACS-9229] a11y testing: Search Page / Elements must only use supported ARIA attributes (#4383)
- [5bd835716](git@github.com:Alfresco/alfresco-content-app/commit/5bd835716) AAE-30880 Remove usage of commonjs buffer package (#4379)
- [6a5e89499](git@github.com:Alfresco/alfresco-content-app/commit/6a5e89499) [ACS-9235] a11y testing: Breadcrumbs / Back Arrow / Buttons must have discernible text (#4384)
- [0446ef609](git@github.com:Alfresco/alfresco-content-app/commit/0446ef609) [ACS-9236] a11y testing: Create Rule - Buttons must have discernible text (#4381)
- [85e0b4335](git@github.com:Alfresco/alfresco-content-app/commit/85e0b4335) [ACS-9228] a11y testing: Search Page / Buttons must have discernible text (#4376)
- [e0fa9d6d5](git@github.com:Alfresco/alfresco-content-app/commit/e0fa9d6d5) [ACS-9213] Update license visible on login page from SSO (#4373)
- [09636b377](git@github.com:Alfresco/alfresco-content-app/commit/09636b377) [ACS-9211] Update license headers (#4372)
- [f01d6e161](git@github.com:Alfresco/alfresco-content-app/commit/f01d6e161) [ACS-9154] Fix unstable tests in ACA after migration to local ACS (#4341)
- [75f25e974](git@github.com:Alfresco/alfresco-content-app/commit/75f25e974) [ACS-9083][ADW] Comment creation is available after document is retained (declared as record) (#4359)
- [02caa7acb](git@github.com:Alfresco/alfresco-content-app/commit/02caa7acb) [ACS-9119] Saved Search navbar title now gets translated (#4356)
- [3bfeca3b8](git@github.com:Alfresco/alfresco-content-app/commit/3bfeca3b8) [ACS-9166] Migrate Saved Searches to preferences API from config file (#4358)
- [0286d08b6](git@github.com:Alfresco/alfresco-content-app/commit/0286d08b6) Post release version bump (#4357)

View File

@ -197,45 +197,46 @@ The button will be visible only when the linked rule evaluates to `true`.
## Application Evaluators
| Ver. | Key | Description |
| ----- | ----------------------------------- | ------------------------------------------------------------------------ |
| 1.7.0 | app.selection.canDelete | User has permission to delete selected node(s). |
| 1.7.0 | app.selection.canDownload | User can download selected node(s). |
| 1.7.0 | app.selection.notEmpty | At least one node is selected. |
| 1.7.0 | app.selection.canUnshare | User is able to remove selected node(s) from public sharing. |
| 1.7.0 | app.selection.canAddFavorite | User can add selected node(s) to favorites. |
| 1.7.0 | app.selection.canRemoveFavorite | User can remove selected node(s) from favorites. |
| 1.7.0 | app.selection.first.canUpdate | User has permission to update selected node(s). |
| 1.7.0 | app.selection.file | A single File node is selected. |
| 1.7.0 | app.selection.file.canShare | User is able to share the selected file. |
| 1.7.0 | app.selection.file.isShared | A shared node is selected. |
| 1.7.0 | app.selection.file.isLocked | File is locked for editing. |
| 1.7.0 | app.selection.file.isLockOwner | File is locked and current user is the lock owner. |
| 1.7.0 | app.selection.file.canUploadVersion | User can update file version. |
| 1.7.0 | app.selection.library | A single Library node is selected. |
| 1.7.0 | app.selection.isPrivateLibrary | A private Library node is selected. |
| 1.7.0 | app.selection.hasLibraryRole | The selected Library node has a role property. |
| 1.7.0 | app.selection.hasNoLibraryRole | The selected Library node has no role property. |
| 1.7.0 | app.selection.folder | A single Folder node is selected. |
| 1.7.0 | app.selection.folder.canUpdate | User has permissions to update the selected folder. |
| 1.7.0 | app.selection.folder.canUpdate | User has permissions to update the selected folder. |
| 1.7.0 | app.selection.file.canLock | User has permissions to lock file. |
| 1.7.0 | app.selection.file.canUnlock | User has permissions to unlock file. |
| 1.7.0 | repository.isQuickShareEnabled | Whether the quick share repository option is enabled or not. |
| 1.8.0 | canCopyNode | Checks if user can copy selected node. |
| 1.8.0 | canToggleJoinLibrary | Checks if user can perform "Join" or "Cancel Join Request" on a library. |
| 1.8.0 | canEditFolder | Checks if user can edit the selected folder. |
| 1.8.0 | isTrashcanItemSelected | Checks if user has trashcan item selected. |
| 1.8.0 | canViewFile | Checks if user can view the file. |
| 1.8.0 | canLeaveLibrary | Checks if user can **Leave** selected library. |
| 1.8.0 | canToggleSharedLink | Checks if user can toggle shared link mode. |
| 1.8.0 | canShowInfoDrawer | Checks if user can show **Info Drawer** for the selected node. |
| 1.8.0 | canManageFileVersions | Checks if user can manage file versions for the selected node. |
| 1.8.0 | canManagePermissions | Checks if user can manage permissions for the selected node. |
| 1.8.0 | canToggleEditOffline | Checks if user can toggle **Edit Offline** mode for selected node. |
| 1.8.0 | user.isAdmin | Checks if user is admin. |
| 1.9.0 | app.canShowLogout | Whether logout action should be present or not. |
| 1.12.0 | app.isLibraryManager | Checks if user is library manager. |
| Ver. | Key | Description |
|--------|-------------------------------------|---------------------------------------------------------------------------------------------------|
| 1.7.0 | app.selection.canDelete | User has permission to delete selected node(s). |
| 1.7.0 | app.selection.canDownload | User can download selected node(s). |
| 1.7.0 | app.selection.notEmpty | At least one node is selected. |
| 1.7.0 | app.selection.canUnshare | User is able to remove selected node(s) from public sharing. |
| 1.7.0 | app.selection.canAddFavorite | User can add selected node(s) to favorites. |
| 1.7.0 | app.selection.canRemoveFavorite | User can remove selected node(s) from favorites. |
| 1.7.0 | app.selection.first.canUpdate | User has permission to update selected node(s). |
| 1.7.0 | app.selection.file | A single File node is selected. |
| 1.7.0 | app.selection.file.canShare | User is able to share the selected file. |
| 1.7.0 | app.selection.file.isShared | A shared node is selected. |
| 1.7.0 | app.selection.file.isLocked | File is locked for editing. |
| 1.7.0 | app.selection.file.isLockOwner | File is locked and current user is the lock owner. |
| 1.7.0 | app.selection.file.canUploadVersion | User can update file version. |
| 1.7.0 | app.selection.library | A single Library node is selected. |
| 1.7.0 | app.selection.isPrivateLibrary | A private Library node is selected. |
| 1.7.0 | app.selection.hasLibraryRole | The selected Library node has a role property. |
| 1.7.0 | app.selection.hasNoLibraryRole | The selected Library node has no role property. |
| 1.7.0 | app.selection.folder | A single Folder node is selected. |
| 1.7.0 | app.selection.folder.canUpdate | User has permissions to update the selected folder. |
| 1.7.0 | app.selection.folder.canUpdate | User has permissions to update the selected folder. |
| 1.7.0 | app.selection.file.canLock | User has permissions to lock file. |
| 1.7.0 | app.selection.file.canUnlock | User has permissions to unlock file. |
| 1.7.0 | repository.isQuickShareEnabled | Whether the quick share repository option is enabled or not. |
| 1.8.0 | canCopyNode | Checks if user can copy selected node. |
| 1.8.0 | canToggleJoinLibrary | Checks if user can perform "Join" or "Cancel Join Request" on a library. |
| 1.8.0 | canEditFolder | Checks if user can edit the selected folder. |
| 1.8.0 | isTrashcanItemSelected | Checks if user has trashcan item selected. |
| 1.8.0 | canViewFile | Checks if user can view the file. |
| 1.8.0 | canLeaveLibrary | Checks if user can **Leave** selected library. |
| 1.8.0 | canToggleSharedLink | Checks if user can toggle shared link mode. |
| 1.8.0 | canShowInfoDrawer | Checks if user can show **Info Drawer** for the selected node. |
| 1.8.0 | canManageFileVersions | Checks if user can manage file versions for the selected node. |
| 1.8.0 | canManagePermissions | Checks if user can manage permissions for the selected node. |
| 1.8.0 | canToggleEditOffline | Checks if user can toggle **Edit Offline** mode for selected node. |
| 1.8.0 | user.isAdmin | Checks if user is admin. |
| 1.9.0 | app.canShowLogout | Whether logout action should be present or not. |
| 1.12.0 | app.isLibraryManager | Checks if user is library manager. |
| 6.1.0 | canPrintFile | Checks if current file can be printed or not (media files such as audio/video cannot be printed). |
## Navigation Evaluators
@ -248,7 +249,7 @@ for example mixing `core.every` and `core.not`.
`!app.navigation.isTrashcan` is the opposite of the `app.navigation.isTrashcan`.
| Version | Key | Description |
| ------- | --------------------------------- | ---------------------------------------------------------------- |
|---------|-----------------------------------|------------------------------------------------------------------|
| 1.7.0 | app.navigation.folder.canCreate | User can create content in the currently opened folder. |
| 1.7.0 | app.navigation.folder.canUpload | User can upload content to the currently opened folder. |
| 1.7.0 | app.navigation.isTrashcan | User is using the **Trashcan** page. |
@ -269,6 +270,7 @@ for example mixing `core.every` and `core.not`.
| 1.7.0 | app.navigation.isPreview | Current page is **Preview**. |
| 1.7.0 | app.navigation.isPersonalFiles | Current page is **Personal Files**. |
| 1.7.0 | app.navigation.isLibraryFiles | Current page is **Library Files**. |
| 5.3.0 | app.navigation.isNotDetails | Current page is not **Details**. |
**Tip:** See the [Registration](./registration) section for more details
on how to register your own entries to be re-used at runtime.

View File

@ -26,6 +26,6 @@ In order to configure multiple search form you have to add your search configura
In order to learn more about :
-The search UI configuration possibilities refer to the [ADF Search configuration documentation](https://github.com/Alfresco/alfresco-ng2-components/blob/develop/docs/user-guide/search-configuration-guide.md)
-The search Query configuration possibilities refer to the [Full text search reference documentation](https://docs.alfresco.com/search-services/latest/using/)
-The search Query configuration possibilities refer to the [Full text search reference documentation](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference)

View File

@ -22,33 +22,33 @@ And also the Info Drawer, Toolbar and Node Selector dialogs for copy and move op
## Alfresco Full Text Search
The following table describes current support of the
[Alfresco Full Text Search](http://docs.alfresco.com/6.1/concepts/rm-searchsyntax-intro.html) (FTS) syntax
[Alfresco Full Text Search](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference) (FTS) syntax
in the Content Application when using **Search Input** component.
| Feature | Full | Partial | N/A | Details |
| ---------------------------------------------------------------- | ---- | ------- | --- | ---------------------------------------------------------------------------------- |
| Search for a single term | 1.6 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-single.html) |
| Search for a phrase | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-phrase.html) |
| Search for an exact term | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-exact.html) |
| Search for term expansion | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-term.html) |
| Search for conjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-conjunct.html) |
| Search for disjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-disjunct.html) |
| Search for negation | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-negate.html) |
| Search for optional, mandatory, and excluded elements of a query | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-optional.html) |
| Search in fields | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fields.html) |
| Search for wildcards | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-wildcards.html) |
| Search for ranges | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ranges.html) |
| Search for fuzzy matching | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fuzzy.html) |
| Search for proximity | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-proximity.html) |
| Search for boosts | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-boosts.html) |
| Search for grouping | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-grouping.html) |
| Search for spans and positions | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-spans.html) |
| Escaping characters | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-escaping.html) |
| Mixed FTS ID behavior | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ftsid.html) |
| Search for operator precedence | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-precedence.html) |
| Search query templates | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-querytemplates.html) |
| Search query literals | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-literals.html) |
| Search using date math | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-datemaths.html) |
| Search for a single term | 1.6 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-a-single-term) |
| Search for a phrase | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-a-phrase) |
| Search for an exact term | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-an-exact-term) |
| Search for term expansion | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-term-expansion) |
| Search for conjunctions | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Enterprise/4.1/Alfresco-Search-Enterprise/Using/Search-query-syntax/Search-for-conjunctions) |
| Search for disjunctions | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-disjunctions) |
| Search for negation | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-negation) |
| Search for optional, mandatory, and excluded elements of a query | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-optional-mandatory-and-excluded-elements-of-a-query) |
| Search in fields | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-in-fields) |
| Search for wildcards | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-wildcards) |
| Search for ranges | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-ranges) |
| Search for fuzzy matching | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-fuzzy-matching) |
| Search for proximity | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-proximity) |
| Search for boosts | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Query-time-boosts) |
| Search for grouping | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-grouping) |
| Search for spans and positions | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-spans-and-positions) |
| Escaping characters | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Escaping-characters) |
| Mixed FTS ID behavior | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Mixed-FTS-ID-behavior) |
| Search for operator precedence | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-operator-precedence) |
| Search query templates | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-query-templates) |
| Search query literals | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-query-literals) |
| Search using date math | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-using-date-math) |
> **Partial** support means the feature supports basic scenarios
> and there are edge cases that are not yet fully tested and might not work.

View File

@ -7,7 +7,7 @@ Title: Single Sign-On
Besides Basic Authentication, you can use Content Application with:
- [Keycloak](https://www.keycloak.org/)
- [Identity Service](https://docs.alfresco.com/identity1.0/concepts/identity-overview.html)
- [Identity Service](https://support.hyland.com/r/Alfresco/Alfresco-Process-Services/24.3/Alfresco-Process-Services/Configure/Authentication/Identity-Service)
- Kerberos
The application contains reasonable defaults for Single Sign-On (aka SSO) setup.

View File

@ -23,33 +23,33 @@ nav: ja
## Alfresco 全文検索
次の表は、**検索入力**コンポーネントを使用する場合のコンテンツアプリケーションでの
[Alfresco 全文検索](http://docs.alfresco.com/6.1/concepts/rm-searchsyntax-intro.html) (FTS) 構文の
[Alfresco 全文検索](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference) (FTS) 構文の
現在のサポートについて説明しています。
| 機能 | フル | 部分的 | N/A | 詳細 |
| ---------------------------------------------------------------- | ---- | ------- | --- | ---------------------------------------------------------------------------------- |
| Search for a single term | 1.6 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-single.html) |
| Search for a phrase | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-phrase.html) |
| Search for an exact term | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-exact.html) |
| Search for term expansion | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-term.html) |
| Search for conjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-conjunct.html) |
| Search for disjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-disjunct.html) |
| Search for negation | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-negate.html) |
| Search for optional, mandatory, and excluded elements of a query | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-optional.html) |
| Search in fields | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fields.html) |
| Search for wildcards | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-wildcards.html) |
| Search for ranges | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ranges.html) |
| Search for fuzzy matching | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fuzzy.html) |
| Search for proximity | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-proximity.html) |
| Search for boosts | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-boosts.html) |
| Search for grouping | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-grouping.html) |
| Search for spans and positions | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-spans.html) |
| Escaping characters | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-escaping.html) |
| Mixed FTS ID behavior | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ftsid.html) |
| Search for operator precedence | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-precedence.html) |
| Search query templates | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-querytemplates.html) |
| Search query literals | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-literals.html) |
| Search using date math | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-datemaths.html) |
| Search for a single term | 1.6 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-a-single-term) |
| Search for a phrase | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-a-phrase) |
| Search for an exact term | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-an-exact-term) |
| Search for term expansion | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-term-expansion) |
| Search for conjunctions | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Enterprise/4.1/Alfresco-Search-Enterprise/Using/Search-query-syntax/Search-for-conjunctions) |
| Search for disjunctions | 1.7 | | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-disjunctions) |
| Search for negation | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-negation) |
| Search for optional, mandatory, and excluded elements of a query | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-optional-mandatory-and-excluded-elements-of-a-query) |
| Search in fields | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-in-fields) |
| Search for wildcards | | 1.7 | | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-wildcards) |
| Search for ranges | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-ranges) |
| Search for fuzzy matching | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-fuzzy-matching) |
| Search for proximity | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-proximity) |
| Search for boosts | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Query-time-boosts) |
| Search for grouping | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-grouping) |
| Search for spans and positions | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-spans-and-positions) |
| Escaping characters | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Escaping-characters) |
| Mixed FTS ID behavior | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Mixed-FTS-ID-behavior) |
| Search for operator precedence | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-for-operator-precedence) |
| Search query templates | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-query-templates) |
| Search query literals | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-query-literals) |
| Search using date math | | | X | [Docs](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-using-date-math) |
> **部分的**なサポートとは、この機能が基本的なシナリオをサポートすることを意味し、
> まだ完全にはテストされておらず動作しない可能性があるエッジケースがあります。

View File

@ -13,5 +13,5 @@ nav: ja
**注:** ソースコードからローカルにビルドするには、[Node.js](https://nodejs.org/ja/) (LTS) もインストールする必要があります。
アプリケーションは最新の [REST API](https://docs.alfresco.com/5.2/pra/1/topics/pra-welcome.html) を使用して開発されているため、
アプリケーションは最新の [REST API](https://api-explorer.alfresco.com/api-explorer/) を使用して開発されているため、
Alfresco Content プラットフォームの最新バージョンが必要です。

View File

@ -8,7 +8,7 @@ nav: ja
Basic 認証に加えて、Content Application を以下で使用できます:
- [Keycloak](https://www.keycloak.org/)
- [Identity Service](https://docs.alfresco.com/identity1.0/concepts/identity-overview.html)
- [Identity Service](https://support.hyland.com/r/Alfresco/Alfresco-Process-Services/24.3/Alfresco-Process-Services/Configure/Authentication/Identity-Service)
- Kerberos
アプリケーションには、シングルサインオン (別名 SSO) セットアップの適切なデフォルトの設定が含まれています。

View File

@ -0,0 +1,43 @@
---
Title: License info, alfresco-content-app 6.0.0
---
# License information for alfresco-content-app 6.0.0
This page lists all third party libraries the project depends on.
## Libraries
| Name | Version | License |
| --- | --- | --- |
| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 7.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 7.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 7.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/eslint-plugin-eslint-angular](https://github.com/Alfresco/alfresco-ng2-components) | 7.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/js-api](https://github.com/Alfresco/alfresco-ng2-components) | 8.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@angular/animations](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/cdk](https://github.com/angular/components) | 17.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/common](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/compiler](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/core](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/forms](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material-date-fns-adapter](https://github.com/angular/components) | 17.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material](https://github.com/angular/components) | 17.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/router](https://github.com/angular/angular) | 17.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@fontsource/open-sans](https://github.com/fontsource/font-files) | 5.2.5 | [OFL-1.1](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web) |
| [@mat-datetimepicker/core](https://github.com/kuhnroyal/mat-datetimepicker) | 13.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngrx/effects](https://github.com/ngrx/platform) | 17.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngrx/router-store](https://github.com/ngrx/platform) | 17.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngrx/store-devtools](https://github.com/ngrx/platform) | 17.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngrx/store](https://github.com/ngrx/platform) | 17.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngx-translate/core](https://github.com/ngx-translate/core) | 14.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [date-fns](https://github.com/date-fns/date-fns) | 2.30.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [material-icons](https://github.com/marella/material-icons) | 1.13.14 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [minimatch-browser](https://github.com/isaacs/minimatch) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) | 3.3.122 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [rxjs](https://github.com/reactivex/rxjs) | 7.8.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [tslib](https://github.com/Microsoft/tslib) | 2.8.1 | [0BSD](http://landley.net/toybox/license.html) |
| [zone.js](https://github.com/angular/angular) | 0.14.8 | [MIT](http://www.opensource.org/licenses/MIT) |

View File

@ -26,7 +26,7 @@ In this tutorial, we are going to implement the following features:
In order to learn more about :
-The search UI configuration possibilities refer to the [ADF Search configuration documentation](https://github.com/Alfresco/alfresco-ng2-components/blob/develop/docs/user-guide/search-configuration-guide.md)
-The search Query configuration possibilities refer to the [Full text search reference documentation](https://docs.alfresco.com/search-services/latest/using/)
-The search Query configuration possibilities refer to the [Full text search reference documentation](https://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference)
### Add a new search form

View File

@ -1,3 +1,3 @@
{
"C213097" : "https://hyland.atlassian.net/browse/ACS-5479"
"XAT-4370" : "https://hyland.atlassian.net/browse/ACS-5479"
}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -43,7 +43,7 @@ test.describe('Create folders', () => {
await apiClientFactory.loginUser(sessionTestUser);
});
test('[C286473] should close opened dialogs on session expire', async ({ loginPage, personalFiles }) => {
test('[XAT-17773] Should close opened dialogs on session expire', async ({ loginPage, personalFiles }) => {
await loginPage.navigate();
await loginPage.loginUser({ username: sessionTestUser.username, password: sessionTestUser.password });
const folderDialog = personalFiles.folderDialog;

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -59,7 +59,7 @@ test.describe('viewer file', () => {
});
test.describe('general tests', () => {
test('[C213089] login page layout', async ({ loginPage }) => {
test('[XAT-4366] login page layout', async ({ loginPage }) => {
await loginPage.navigate();
await expect(loginPage.username, 'username input is not enabled').toBeEnabled();
await expect(loginPage.password, 'password input is not enabled').toBeEnabled();
@ -72,20 +72,20 @@ test.describe('viewer file', () => {
});
test.describe('with invalid credentials', () => {
test('[C213106] unauthenticated user is redirected to Login page', async ({ personalFiles }) => {
test('[XAT-4378] unauthenticated user is redirected to Login page', async ({ personalFiles }) => {
await personalFiles.navigate();
expect(personalFiles.page.url()).toContain('login');
});
});
test.describe('with valid credentials', () => {
test('[C213097] logs in with user with non-latin characters', async ({ loginPage }) => {
test('[XAT-4370] Login with a user that contains non-Latin characters in username or password', async ({ loginPage }) => {
await loginPage.navigate();
await loginPage.loginUser({ username: otherLanguageUser.username, password: otherLanguageUser.password });
expect(loginPage.page.url()).toContain('personal-files');
});
test('[C213107] redirects to Home Page when navigating to the Login page while already logged in', async ({ loginPage }) => {
test('[XAT-17774] Redirects to Home Page when navigating to the Login page while already logged in', async ({ loginPage }) => {
const { username } = johnDoe;
await loginPage.navigate();
await loginPage.loginUser({ username: username, password: username });
@ -95,7 +95,7 @@ test.describe('viewer file', () => {
expect(loginPage.page.url()).toContain('personal-files');
});
test('[C213104] user is able to login after changing his password', async ({ loginPage }) => {
test('[XAT-4372] Login with a user that has changed its password', async ({ loginPage }) => {
await apiClientFactory.changePassword(testUser2.username, newPassword);
await loginPage.navigate();
await loginPage.loginUser({ username: testUser2.username, password: newPassword });

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -37,7 +37,7 @@ test.describe('viewer file', () => {
await apiClientFactory.createUser(testUser);
});
test('[C213145] redirects to Login page when pressing browser Back after logout', async ({ loginPage }) => {
test('[XAT-4382] User is not signed back in when pressing browser Back button after sign out', async ({ loginPage }) => {
await loginPage.navigate();
await loginPage.loginUser({ username: testUser.username, password: testUser.password });
await loginPage.logoutUser();

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -82,7 +82,7 @@ test.describe('Copy actions', () => {
}
};
test('[C217135] Copy a file', async ({ personalFiles }) => {
test('[XAT-4941] Copy a file', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
await copyContentInPersonalFiles(personalFiles, [sourceFile], destinationFolder);
expect.soft(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
@ -91,7 +91,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C291888] Copy a folder with content', async ({ personalFiles }) => {
test('[XAT-4942] Copy a folder with content', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
await copyContentInPersonalFiles(personalFiles, [sourceFolder], destinationFolder);
expect.soft(await personalFiles.dataTable.isItemPresent(sourceFolder)).toBeTruthy();
@ -103,7 +103,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFileInsideFolder)).toBeTruthy();
});
test('[C291889] Copy multiple items', async ({ personalFiles }) => {
test('[XAT-4943] Copy multiple items', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
await copyContentInPersonalFiles(personalFiles, [sourceFolder, sourceFile], destinationFolder);
expect.soft(await personalFiles.dataTable.isItemPresent(sourceFolder)).toBeTruthy();
@ -115,7 +115,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C217137] Copy a file with a name that already exists on the destination', async ({ personalFiles }) => {
test('[XAT-4944] Copy a file with a name that already exists on the destination', async ({ personalFiles }) => {
await nodesApi.createFile(sourceFile, destinationFolderId);
const expectedNameForCopiedFile = sourceFile.replace('.', '-1.');
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
@ -127,7 +127,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(expectedNameForCopiedFile)).toBeTruthy();
});
test('[C217138] Copy a folder with a name that already exists on the destination', async ({ personalFiles }) => {
test('[XAT-4945] Copy a folder with a name that already exists on the destination', async ({ personalFiles }) => {
const existingFolderId = (await nodesApi.createFolder(sourceFolder, destinationFolderId)).entry.id;
await nodesApi.createFile(sourceFileInsideFolder, existingFolderId);
const expectedNameForCopiedFile = sourceFileInsideFolder.replace('.', '-1.');
@ -143,7 +143,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(expectedNameForCopiedFile)).toBeTruthy();
});
test('[C217139] Copy locked file', async ({ personalFiles }) => {
test('[XAT-4947] Copy locked file', async ({ personalFiles }) => {
const lockType = 'ALLOW_OWNER_CHANGES';
await nodesApi.lockNodes([sourceFileId], lockType);
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
@ -154,7 +154,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C217140] Copy folder that contains locked file', async ({ personalFiles }) => {
test('[XAT-4948] Copy folder that contains locked file', async ({ personalFiles }) => {
const lockType = 'ALLOW_OWNER_CHANGES';
await nodesApi.lockNodes([sourceFileInsideFolderId], lockType);
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
@ -168,7 +168,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFileInsideFolder)).toBeTruthy();
});
test('[C217171] Undo copy of files', async ({ personalFiles }) => {
test('[XAT-4949] Undo copy of files', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
await copyContentInPersonalFiles(personalFiles, [sourceFile], destinationFolder);
await personalFiles.snackBar.actionButton.click();
@ -178,7 +178,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeFalsy();
});
test('[C217172] Undo copy of folders', async ({ personalFiles }) => {
test('[XAT-4950] Undo copy of folders', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
await copyContentInPersonalFiles(personalFiles, [sourceFolder], destinationFolder);
await personalFiles.snackBar.actionButton.click();
@ -188,7 +188,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFolder)).toBeFalsy();
});
test('[C217173] Undo copy of a file when a file with same name already exists on the destination', async ({ personalFiles }) => {
test('[XAT-4951] Undo copy of a file when a file with same name already exists on the destination', async ({ personalFiles }) => {
await nodesApi.createFile(sourceFile, destinationFolderId);
const expectedNameForCopiedFile = sourceFile.replace('.', '-1.');
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
@ -201,7 +201,7 @@ test.describe('Copy actions', () => {
expect(await personalFiles.dataTable.isItemPresent(expectedNameForCopiedFile)).toBeFalsy();
});
test('[C217174] Undo copy of a folder when a folder with same name already exists on the destination', async ({ personalFiles }) => {
test('[XAT-4952] Undo copy of a folder when a folder with same name already exists on the destination', async ({ personalFiles }) => {
const existingFolderId = (await nodesApi.createFolder(sourceFolder, destinationFolderId)).entry.id;
await nodesApi.createFile(sourceFileInsideFolder, existingFolderId);
const expectedNameForCopiedFile = sourceFileInsideFolder.replace('.', '-1.');

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -79,21 +79,21 @@ test.describe('Copy Move actions', () => {
await myLibrariesPage.contentNodeSelector.selectDestination(destinationFolder);
};
test('[C263876] Consumer user cannot select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
test('[XAT-4922] Consumer user cannot select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
await loginPage.loginUser({ username: consumerUser, password: consumerUser }, { withNavigation: true, waitForLoading: true });
await myLibrariesPage.navigate();
await copyContentInMyLibraries(myLibrariesPage);
await expect(myLibrariesPage.contentNodeSelector.actionButton).toBeDisabled();
});
test('[C263877] Contributor user can select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
test('[XAT-4923] Contributor user can select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
await loginPage.loginUser({ username: contributorUser, password: contributorUser }, { withNavigation: true, waitForLoading: true });
await myLibrariesPage.navigate();
await copyContentInMyLibraries(myLibrariesPage);
await expect(myLibrariesPage.contentNodeSelector.actionButton).toBeEnabled();
});
test('[C263878] Collaborator user can select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
test('[XAT-4924] Collaborator user can select the folder as destination', async ({ loginPage, myLibrariesPage }) => {
await loginPage.loginUser({ username: collaboratorUser, password: collaboratorUser }, { withNavigation: true, waitForLoading: true });
await myLibrariesPage.navigate();
await copyContentInMyLibraries(myLibrariesPage);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -74,7 +74,7 @@ test.describe('Move actions', () => {
await personalFilesPage.spinner.waitForReload();
};
test('[C217316] Move a file', async ({ personalFiles }) => {
test('[XAT-4996] Move a file', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
await moveContentInPersonalFiles(personalFiles, [sourceFile], destinationFolder);
const msg = await personalFiles.snackBar.message.innerText();
@ -85,7 +85,7 @@ test.describe('Move actions', () => {
expect(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C291958] Move multiple items', async ({ personalFiles }) => {
test('[XAT-4998] Move multiple items', async ({ personalFiles }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
await moveContentInPersonalFiles(personalFiles, [sourceFolder, sourceFile], destinationFolder);
const msg = await personalFiles.snackBar.message.innerText();
@ -98,7 +98,7 @@ test.describe('Move actions', () => {
expect.soft(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C217318] Move a file with a name that already exists on the destination', async ({ personalFiles }) => {
test('[XAT-4999] Move a file with a name that already exists on the destination', async ({ personalFiles }) => {
await nodesApi.createFile(sourceFile, destinationFolderId);
const expectedNameForCopiedFile = sourceFile.replace('.', '-1.');
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
@ -112,7 +112,7 @@ test.describe('Move actions', () => {
expect(await personalFiles.dataTable.isItemPresent(expectedNameForCopiedFile)).toBeFalsy();
});
test('[C217319] Move a folder with a name that already exists on the destination', async ({ personalFiles }) => {
test('[XAT-5000] Move a folder with a name that already exists on the destination', async ({ personalFiles }) => {
const existingFolderId = (await nodesApi.createFolder(sourceFolder, destinationFolderId)).entry.id;
await nodesApi.createFile(sourceFileInsideFolder, existingFolderId);
const expectedNameForCopiedFile = sourceFileInsideFolder.replace('.', '-1.');
@ -129,7 +129,7 @@ test.describe('Move actions', () => {
expect(await personalFiles.dataTable.isItemPresent(expectedNameForCopiedFile)).toBeFalsy();
});
test('[C217320] Move locked file', async ({ personalFiles }) => {
test('[XAT-4989] Move locked file', async ({ personalFiles }) => {
const lockType = 'ALLOW_OWNER_CHANGES';
await nodesApi.lockNodes([sourceFileId], lockType);
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
@ -142,7 +142,7 @@ test.describe('Move actions', () => {
expect.soft(await personalFiles.dataTable.isItemPresent(sourceFile)).toBeTruthy();
});
test('[C217324] Undo move files', async ({ personalFiles, trashPage }) => {
test('[XAT-4992] Undo move files', async ({ personalFiles, trashPage }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFile);
await moveContentInPersonalFiles(personalFiles, [sourceFile], destinationFolder);
await personalFiles.snackBar.actionButton.click();
@ -154,7 +154,7 @@ test.describe('Move actions', () => {
expect(await trashPage.dataTable.isItemPresent(sourceFile)).toBeFalsy();
});
test('[C217325] Undo move of folders', async ({ personalFiles, trashPage }) => {
test('[XAT-4993] Undo move folder', async ({ personalFiles, trashPage }) => {
await Utils.reloadPageIfRowNotVisible(personalFiles, sourceFolder);
await moveContentInPersonalFiles(personalFiles, [sourceFolder], destinationFolder);
await personalFiles.snackBar.actionButton.click();
@ -185,12 +185,12 @@ test.describe('Move actions', () => {
[
{
id: 'C217317',
id: 'XAT-4997',
testTitle: `Move a folder with content`,
lockedFile: false
},
{
id: 'C217321',
id: 'XAT-4990',
testTitle: 'Move folder that contains locked file',
lockedFile: true
}

View File

@ -1,48 +1 @@
{
"C325043": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325044": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325045": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325047": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325031": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325032": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325033": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325030": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325026": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325042": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325147": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325148": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325149": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325150": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325153": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325151": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325139": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325143": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325144": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325145": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325146": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325157": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325154": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325158": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325161": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325142": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325141": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325140": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325156": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325155": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325162": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325163": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325050": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325048": "https://alfresco.atlassian.net/browse/ACS-6412",
"C216339": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325020": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325034": "https://alfresco.atlassian.net/browse/ACS-6412",
"C290146": "https://alfresco.atlassian.net/browse/ACS-6412",
"C290142": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325028": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325027": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325023": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325024": "https://alfresco.atlassian.net/browse/ACS-6412",
"C325025": "https://alfresco.atlassian.net/browse/ACS-6412"
}
{}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -51,7 +51,7 @@ test.describe('Create file from template', () => {
let fileLink: string;
const selectDialogTitle = 'Select a document template';
const dialogBreadcrumb = 'Node Templates';
const nameLabel = 'Name *';
const nameLabel = 'Name';
const titleLabel = 'Title';
const descriptionLabel = 'Description';
const emptyString = '';
@ -138,7 +138,7 @@ test.describe('Create file from template', () => {
});
test.describe('Select Template dialog', () => {
test('[C325043] Select template - dialog UI - with existing templates', async () => {
test('[XAT-5229] Select template - dialog UI - when no templates exist in the repo', async () => {
await expect.soft(selectFileTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await expect.soft(selectFileTemplateDialog.getBreadcrumb(dialogBreadcrumb)).toBeVisible();
await expect.soft(dataTable.getRowByName(templatesFolder1)).not.toBeEmpty();
@ -149,13 +149,13 @@ test.describe('Create file from template', () => {
await expect(selectFileTemplateDialog.actionButton).toBeDisabled();
});
test(`[C325044] Templates don't appear if user doesn't have permissions to see them`, async () => {
test(`[XAT-5231] Templates don't appear if user doesn't have permissions to see them`, async () => {
await expect(selectFileTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await expect(dataTable.getRowByName(restrictedTemplateFolder)).toBeHidden();
await expect(dataTable.getRowByName(templateInRestrictedFolder)).toBeHidden();
});
test(`[C325045] Navigate through the templates list with folder hierarchy`, async () => {
test(`[XAT-5232] Navigate through the templates list with folder hierarchy`, async () => {
await expect(selectFileTemplateDialog.getBreadcrumb(dialogBreadcrumb)).toBeVisible();
await expect(dataTable.getRowByName(templatesFolder1)).toBeVisible();
await expect(dataTable.getRowByName(templatesFolder2)).toBeVisible();
@ -175,7 +175,7 @@ test.describe('Create file from template', () => {
await expect(selectFileTemplateDialog.getOptionLocator(dialogBreadcrumb)).toBeVisible();
});
test(`[C325047] Templates list doesn't allow multiple selection`, async () => {
test(`[XAT-5233] Templates list doesn't allow multiple selection`, async () => {
await expect(dataTable.getSelectedRow).toHaveCount(0);
await dataTable.getRowByName(template1InRoot).click({ modifiers: [commandKey] });
@ -188,20 +188,20 @@ test.describe('Create file from template', () => {
await expect(dataTable.getSelectedRow).toContainText(template2InRoot);
});
test('[C325050] Links to files are not displayed', async () => {
test('[XAT-5235] Links to files are not displayed', async () => {
await expect(dataTable.getRowByName(template1InRoot)).toBeVisible();
await expect(dataTable.getRowByName(template2InRoot)).toBeVisible();
await expect(dataTable.getRowByName(fileLink)).toBeHidden();
});
test('[C325048] Cancel the Select template dialog', async () => {
test('[XAT-5236] Cancel the Select template dialog', async () => {
await expect(selectFileTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await selectFileTemplateDialog.cancelButton.click();
await expect(selectFileTemplateDialog.getDialogTitle(selectDialogTitle)).toBeHidden();
});
test('[C216339] Next button is disabled when selecting a folder', async () => {
test('[XAT-5234] Select Template - Next button is disabled when selecting a folder', async () => {
await expect(dataTable.getRowByName(templatesFolder1)).toBeVisible();
await expect(selectFileTemplateDialog.actionButton).toBeDisabled();
@ -225,7 +225,7 @@ test.describe('Create file from template', () => {
}
});
test('[C325020] Create file from template - dialog UI', async () => {
test('[XAT-5237] Create file from template - dialog UI', async () => {
await expect.soft(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await expect.soft(createFileFromTemplateDialog.getDialogLabel(nameLabel)).toBeVisible();
await expect.soft(createFileFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(template1InRoot);
@ -237,7 +237,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeEnabled();
});
test('[C325031] File name is required', async () => {
test('[XAT-5238] File name is required', async () => {
await expect(createFileFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(template1InRoot);
await createFileFromTemplateDialog.getDialogLabel(nameLabel).clear();
@ -249,7 +249,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325032] Special characters in file name', async () => {
test('[XAT-5239] Special characters in file name', async () => {
const nameWithSpecialChars = ['a*a', 'a"a', 'a<a', 'a>a', `a\\a`, 'a/a', 'a?a', 'a:a', 'a|a'];
for (const specialFileName of nameWithSpecialChars) {
@ -266,8 +266,8 @@ test.describe('Create file from template', () => {
}
});
test('[C325033] File name ending with a dot', async () => {
await createFileFromTemplateDialog.getDialogLabel(nameLabel).fill(dotString);
test('[XAT-5240] File name ending with a dot', async () => {
await createFileFromTemplateDialog.getDialogLabel(nameLabel).fill(template1InRoot + dotString);
await createFileFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFileFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(template1InRoot + dotString);
expect
@ -276,7 +276,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325034] File name containing only spaces', async () => {
test('[XAT-5241] File name containing only spaces', async () => {
await createFileFromTemplateDialog.getDialogLabel(nameLabel).clear();
await createFileFromTemplateDialog.getDialogLabel(nameLabel).fill(spaceString);
await createFileFromTemplateDialog.page.keyboard.press(tabKeyString);
@ -290,7 +290,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeDisabled();
});
test('[C290146] File title too long', async () => {
test('[XAT-5243] File title too long', async () => {
await createFileFromTemplateDialog.getDialogLabel(titleLabel).fill(Utils.string257Long);
await createFileFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFileFromTemplateDialog.getDialogLabel(titleLabel)).toHaveValue(Utils.string257Long);
@ -300,7 +300,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeDisabled();
});
test('[C290142] Description too long', async () => {
test('[XAT-5242] Description too long', async () => {
await createFileFromTemplateDialog.getDialogLabel(descriptionLabel).fill(Utils.string513Long);
await createFileFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFileFromTemplateDialog.getDialogLabel(descriptionLabel)).toHaveValue(Utils.string513Long);
@ -313,7 +313,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325028] Create a file with a duplicate name', async ({ personalFiles }) => {
test('[XAT-5246] Create a file with a duplicate name', async ({ personalFiles }) => {
const snackBar = personalFiles.snackBar;
await createFileFromTemplateDialog.createFromTemplateAction(commonFileName);
@ -321,7 +321,7 @@ test.describe('Create file from template', () => {
await expect(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
});
test('[C325027] Cancel file creation', async () => {
test('[XAT-5247] Cancel file creation', async () => {
await expect(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await createFileFromTemplateDialog.cancelButton.click();
await expect(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeHidden();
@ -342,19 +342,19 @@ test.describe('Create file from template', () => {
}
});
test('[C325030] Create a file from a template - with a new Name', async () => {
test('[XAT-5244] Create a file from a template - with a new Name', async () => {
await createFileFromTemplateDialog.createFromTemplateAction(randomFileName);
await dataTable.goThroughPagesLookingForRowWithName(randomFileName);
await expect(dataTable.getRowByName(randomFileName)).toBeVisible();
});
test('[C325026] Create a file from a template - with a Name, Title and Description', async () => {
test('[XAT-5245] Create a file from a template - with a Name, Title and Description', async () => {
await createFileFromTemplateDialog.createFromTemplateAction(randomFileName, randomFileTitle, randomFileDescription);
await dataTable.goThroughPagesLookingForRowWithName(randomFileName);
await expect(dataTable.getCellLinkByName(randomFileName)).toHaveAttribute(titleLabel, randomFileTitle + `\n` + randomFileDescription);
});
test('[C325042] Trim spaces from file Name', async () => {
test('[XAT-5248] Trim spaces from file Name', async () => {
await createFileFromTemplateDialog.createFromTemplateAction(' ' + randomFileName + ' ');
await dataTable.goThroughPagesLookingForRowWithName(randomFileName);
await expect(dataTable.getRowByName(randomFileName)).toBeVisible();
@ -362,7 +362,7 @@ test.describe('Create file from template', () => {
});
});
test.describe('File created from template on Personal Files Libraries', () => {
test.describe('File created from template on Libraries', () => {
const randomLibraryName = `playwright-library-c2-${Utils.random()}`;
let sitesApi: SitesApi;
@ -390,7 +390,7 @@ test.describe('Create file from template', () => {
await dataTable.getRowByName(template1InRoot).click();
await selectFileTemplateDialog.actionButton.click();
} catch (error) {
console.error(`File created from template on Personal Files Libraries, beforeEach failed: ${error}`);
console.error(`File created from template on Libraries, beforeEach failed: ${error}`);
}
});
@ -398,19 +398,19 @@ test.describe('Create file from template', () => {
await sitesApi.deleteSites([randomLibraryName]);
});
test('[C325023] Create a file from a template from library - with Name, Title and Description', async () => {
test('[XAT-5249] Create a file from a template from library - with Name, Title and Description', async () => {
await createFileFromTemplateDialog.createFromTemplateAction(randomFileName, randomFileTitle, randomFileDescription);
await expect(dataTable.getCellLinkByName(randomFileName)).toHaveAttribute(titleLabel, randomFileTitle + `\n` + randomFileDescription);
});
test('[C325024] Cancel file creation in a library', async () => {
test('[XAT-5250] Cancel file creation in a library', async () => {
await expect(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await createFileFromTemplateDialog.cancelButton.click();
await expect(createFileFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeHidden();
await expect(dataTable.getRowByName(randomFileName)).toBeHidden();
});
test('[C325025] Create a file with a duplicate name in a library', async ({ myLibrariesPage }) => {
test('[XAT-5251] Create a file with a duplicate name in a library', async ({ myLibrariesPage }) => {
const snackBar = myLibrariesPage.snackBar;
await createFileFromTemplateDialog.createFromTemplateAction(commonFileName);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -52,7 +52,7 @@ test.describe('Create folder from template', () => {
let folderLink: string;
const selectDialogTitle = 'Select a folder template';
const dialogBreadcrumb = 'Space Templates';
const nameLabel = 'Name *';
const nameLabel = 'Name';
const titleLabel = 'Title';
const descriptionLabel = 'Description';
const emptyString = '';
@ -165,7 +165,7 @@ test.describe('Create folder from template', () => {
});
test.describe('Select Template dialog', () => {
test('[C325147] Select template - dialog UI - with existing templates', async () => {
test('[XAT-5252] Select template - dialog UI - with existing templates', async () => {
await expect.soft(selectFolderTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await expect.soft(selectFolderTemplateDialog.getBreadcrumb(dialogBreadcrumb)).toBeVisible();
await expect.soft(dataTable.getRowByName(templateFolder1)).not.toBeEmpty();
@ -176,12 +176,12 @@ test.describe('Create folder from template', () => {
await expect(selectFolderTemplateDialog.actionButton).toBeDisabled();
});
test(`[C325148] Templates don't appear if user doesn't have permissions to see them`, async () => {
test(`[XAT-5253] Templates don't appear if user doesn't have permissions to see them`, async () => {
await expect(selectFolderTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await expect(dataTable.getRowByName(restrictedTemplateFolder)).toBeHidden();
});
test(`[C325149] Navigate through the templates list with folder hierarchy`, async () => {
test(`[XAT-5254] Navigate through the templates list with folder hierarchy`, async () => {
await expect(selectFolderTemplateDialog.getBreadcrumb(dialogBreadcrumb)).toBeVisible();
await expect(dataTable.getRowByName(templateFolder1)).toBeVisible();
@ -199,7 +199,7 @@ test.describe('Create folder from template', () => {
await expect(selectFolderTemplateDialog.getOptionLocator(dialogBreadcrumb)).toBeVisible();
});
test(`[C325150] Templates list doesn't allow multiple selection`, async () => {
test(`[XAT-5255] Templates list doesn't allow multiple selection`, async () => {
await expect(dataTable.getSelectedRow).toHaveCount(0);
await dataTable.getRowByName(templateFolder1).click({ modifiers: [commandKey] });
@ -212,19 +212,19 @@ test.describe('Create folder from template', () => {
await expect(dataTable.getSelectedRow).toContainText(templateFolder2);
});
test('[C325153] Links to folders are not displayed', async () => {
test('[XAT-5257] Links to folders are not displayed', async () => {
await expect(dataTable.getRowByName(templateFolder1)).toBeVisible();
await expect(dataTable.getRowByName(folderLink)).toBeHidden();
});
test('[C325151] Cancel the Select template dialog', async () => {
test('[XAT-5258] Cancel the Select template dialog', async () => {
await expect(selectFolderTemplateDialog.getDialogTitle(selectDialogTitle)).toBeVisible();
await selectFolderTemplateDialog.cancelButton.click();
await expect(selectFolderTemplateDialog.getDialogTitle(selectDialogTitle)).toBeHidden();
});
test('[C325139] Next button is disabled when selecting a file', async () => {
test('[XAT-5256] Select Template - Next button is disabled when selecting a file', async () => {
await expect(dataTable.getRowByName(fileInRootFolder)).toBeVisible();
await expect(selectFolderTemplateDialog.actionButton).toBeDisabled();
@ -252,7 +252,7 @@ test.describe('Create folder from template', () => {
}
});
test('[C325142] Create folder from template - dialog UI', async () => {
test('[XAT-5259] Create folder from template - dialog UI', async () => {
await expect.soft(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await expect.soft(createFolderFromTemplateDialog.getDialogLabel(nameLabel)).toBeVisible();
await expect.soft(createFolderFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(templateFolder1);
@ -264,7 +264,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeEnabled();
});
test('[C325143] Folder name is required', async () => {
test('[XAT-5260] Folder name is required', async () => {
await expect(createFolderFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(templateFolder1);
await createFolderFromTemplateDialog.getDialogLabel(nameLabel).clear();
@ -276,7 +276,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325144] Special characters in folder name', async () => {
test('[XAT-5261] Special characters in folder name', async () => {
const nameWithSpecialChars = ['a*a', 'a"a', 'a<a', 'a>a', `a\\a`, 'a/a', 'a?a', 'a:a', 'a|a'];
for (const specialFolderName of nameWithSpecialChars) {
@ -293,8 +293,8 @@ test.describe('Create folder from template', () => {
}
});
test('[C325145] Folder name ending with a dot', async () => {
await createFolderFromTemplateDialog.getDialogLabel(nameLabel).fill(dotString);
test('[XAT-5262] Folder name ending with a dot', async () => {
await createFolderFromTemplateDialog.getDialogLabel(nameLabel).fill(templateFolder1 + dotString);
await createFolderFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFolderFromTemplateDialog.getDialogLabel(nameLabel)).toHaveValue(templateFolder1 + dotString);
expect
@ -303,7 +303,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325146] Folder name containing only spaces', async () => {
test('[XAT-5263] Folder name containing only spaces', async () => {
await createFolderFromTemplateDialog.getDialogLabel(nameLabel).clear();
await createFolderFromTemplateDialog.getDialogLabel(nameLabel).fill(spaceString);
await createFolderFromTemplateDialog.page.keyboard.press(tabKeyString);
@ -317,7 +317,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325141] Title too long', async () => {
test('[XAT-5265] Folder title too long', async () => {
await createFolderFromTemplateDialog.getDialogLabel(titleLabel).fill(Utils.string257Long);
await createFolderFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFolderFromTemplateDialog.getDialogLabel(titleLabel)).toHaveValue(Utils.string257Long);
@ -327,7 +327,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325140] Description too long', async () => {
test('[XAT-5264] Folder description too long', async () => {
await createFolderFromTemplateDialog.getDialogLabel(descriptionLabel).fill(Utils.string513Long);
await createFolderFromTemplateDialog.page.keyboard.press(tabKeyString);
await expect(createFolderFromTemplateDialog.getDialogLabel(descriptionLabel)).toHaveValue(Utils.string513Long);
@ -340,7 +340,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.createButton).toBeDisabled();
});
test('[C325156] Create a folder with a duplicate name', async ({ personalFiles }) => {
test('[XAT-5268] Create a folder with a duplicate name', async ({ personalFiles }) => {
const snackBar = personalFiles.snackBar;
await createFolderFromTemplateDialog.createFromTemplateAction(commonFolderName);
@ -348,7 +348,7 @@ test.describe('Create folder from template', () => {
await expect(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
});
test('[C325155] Cancel folder creation', async () => {
test('[XAT-5269] Cancel folder creation', async () => {
await expect(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await createFolderFromTemplateDialog.cancelButton.click();
await expect(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeHidden();
@ -369,7 +369,7 @@ test.describe('Create folder from template', () => {
}
});
test('[C325157] Create a folder from a template - with a new Name', async () => {
test('[XAT-5266] Create a folder from a template - with a new Name', async () => {
await createFolderFromTemplateDialog.createFromTemplateAction(randomFolderName);
await dataTable.goThroughPagesLookingForRowWithName(randomFolderName);
await expect(dataTable.getRowByName(randomFolderName)).toBeVisible();
@ -379,13 +379,13 @@ test.describe('Create folder from template', () => {
await expect(dataTable.getRowByName(fileInFolder1)).toBeVisible();
});
test('[C325154] Create a folder from a template - with a Name, Title and Description', async () => {
test('[XAT-5267] Create a folder from a template - with a Name, Title and Description', async () => {
await createFolderFromTemplateDialog.createFromTemplateAction(randomFolderName, randomFolderTitle, randomFolderDescription);
await dataTable.goThroughPagesLookingForRowWithName(randomFolderName);
await expect(dataTable.getCellLinkByName(randomFolderName)).toHaveAttribute(titleLabel, randomFolderTitle + `\n` + randomFolderDescription);
});
test('[C325158] Trim spaces from folder Name', async () => {
test('[XAT-5270] Trim spaces from folder Name', async () => {
await createFolderFromTemplateDialog.createFromTemplateAction(' ' + randomFolderName + ' ');
await dataTable.goThroughPagesLookingForRowWithName(randomFolderName);
await expect(dataTable.getRowByName(randomFolderName)).toBeVisible();
@ -393,7 +393,7 @@ test.describe('Create folder from template', () => {
});
});
test.describe('Folder created from template on Personal Files Libraries', () => {
test.describe('Folder created from template on Libraries', () => {
const randomLibraryName = `playwright-library-c1-${Utils.random()}`;
let sitesApi: SitesApi;
@ -404,7 +404,7 @@ test.describe('Create folder from template', () => {
const libraryGuId = await sitesApi.getDocLibId(randomLibraryName);
await nodesApi.createFolder(commonFolderName, libraryGuId);
} catch (error) {
console.error(`Folder created from template on Personal Files Libraries, beforeAll failed : ${error}`);
console.error(`Folder created from template on Libraries, beforeAll failed : ${error}`);
}
});
@ -438,7 +438,7 @@ test.describe('Create folder from template', () => {
}
});
test('[C325161] Create a folder from a template from library - with Name, Title and Description', async () => {
test('[XAT-5271] Create a folder from a template from library - with Name, Title and Description', async () => {
await createFolderFromTemplateDialog.createFromTemplateAction(randomFolderName, randomFolderTitle, randomFolderDescription);
await expect
.soft(dataTable.getCellLinkByName(randomFolderName))
@ -449,14 +449,14 @@ test.describe('Create folder from template', () => {
await expect(dataTable.getRowByName(fileInFolder1)).toBeVisible();
});
test('[C325162] Cancel folder creation in a library', async () => {
test('[XAT-5272] Cancel folder creation in a library', async () => {
await expect(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeVisible();
await createFolderFromTemplateDialog.cancelButton.click();
await expect(createFolderFromTemplateDialog.getDialogTitle(createDialogTitle)).toBeHidden();
await expect(dataTable.getRowByName(randomFolderName)).toBeHidden();
});
test('[C325163] Create a folder with a duplicate name in a library', async ({ myLibrariesPage }) => {
test('[XAT-5273] Create a folder with a duplicate name in a library', async ({ myLibrariesPage }) => {
const snackBar = myLibrariesPage.snackBar;
await createFolderFromTemplateDialog.createFromTemplateAction(commonFolderName);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -48,6 +48,7 @@ test.describe('Create folders', () => {
const createNewFolderString = 'Create new folder';
const spacesString = ' ';
const commonFolderName = `create-folder-${Utils.random()}`;
const newFolderName = `new-folder-${Utils.random()}`;
const username = `user-${Utils.random()}`;
test.beforeAll(async () => {
@ -77,7 +78,7 @@ test.describe('Create folders', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C216345] Create new folder dialog check', async () => {
test('[XAT-5078] Create new folder dialog UI check', async () => {
await expect(folderDialog.getLabelText('Name')).toBeVisible();
await expect(folderDialog.getRequiredMarker('Name')).toBeVisible();
await expect(folderDialog.folderNameInputLocator).toBeVisible();
@ -89,7 +90,7 @@ test.describe('Create folders', () => {
await expect(folderDialog.createButton).toBeDisabled();
});
test('[C216346] Create a folder without a name', async () => {
test('[XAT-5079] Create a folder without a name - Disabled Create button', async () => {
await folderDialog.folderNameInputLocator.fill(randomFolderName);
await expect(folderDialog.folderNameInputLocator).toHaveValue(randomFolderName);
await expect(folderDialog.createButton).toBeEnabled();
@ -101,14 +102,14 @@ test.describe('Create folders', () => {
await expect(folderDialog.createButton).toBeDisabled();
});
test('[C216348] Create folder when a name that ends with a dot "."', async () => {
test('[XAT-5081] Create folder when a name that ends with a dot "."', async () => {
await folderDialog.folderNameInputLocator.fill(randomFolderName + '.');
await expect(folderDialog.createButton).toBeDisabled();
await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantEndWithAPeriod);
});
test('[C216347] Create folder with a name containing special characters', async () => {
test('[XAT-5080] Create folder with a name containing special characters', async () => {
const namesWithSpecialChars = ['a*a', 'a"a', 'a<a', 'a>a', `a\\a`, 'a/a', 'a?a', 'a:a', 'a|a'];
for (const folderName of namesWithSpecialChars) {
await folderDialog.folderNameInputLocator.fill(folderName);
@ -118,21 +119,21 @@ test.describe('Create folders', () => {
}
});
test('[C280406] Create a folder with a name containing only spaces', async () => {
test('[XAT-5082] Create a folder with a name containing only spaces', async () => {
await folderDialog.folderNameInputLocator.fill(spacesString);
await expect(folderDialog.createButton).toBeDisabled();
await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantContainOnlySpaces);
});
test('[C216349] Cancel folder creation', async ({ personalFiles }) => {
test('[XAT-5083] Cancel folder creation', async ({ personalFiles }) => {
await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeVisible();
await folderDialog.folderNameInputLocator.fill(randomFolderName);
await folderDialog.cancelButton.click();
await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeHidden();
});
test('[C216350] Duplicate folder name error', async ({ personalFiles }) => {
test('[XAT-5084] Duplicate folder name error', async ({ personalFiles }) => {
const folderSnackBar = personalFiles.snackBar;
await folderDialog.createNewFolderDialog(commonFolderName);
@ -145,22 +146,30 @@ test.describe('Create folders', () => {
folderTable = personalFiles.dataTable;
});
test('[C216341] Create a folder with name only', async () => {
test('[XAT-5077] Create folder when pressing OK - with name and no description', async () => {
await folderDialog.createNewFolderDialog(randomFolderName);
await expect(folderTable.getRowByName(randomFolderName)).toBeVisible();
});
test('[C216340] Create a folder with name, title and description', async () => {
test('[XAT-5076] Create folder when pressing OK - with name, title and description', async () => {
await folderDialog.createNewFolderDialog(randomFolderName, randomFolderTitle, randomFolderDescription);
await expect(folderTable.getCellLinkByName(randomFolderName)).toHaveAttribute('title', randomFolderTitle + `\n` + randomFolderDescription);
});
test('[C216351] Folder created after trimmed ending spaces from a folder name', async () => {
test('[XAT-5085] Folder created after trimmed ending spaces from a folder name', async () => {
await folderDialog.createNewFolderDialog(randomFolderName + spacesString);
await expect(folderTable.getRowByName(randomFolderName)).toBeVisible();
});
test('[XAT-17591] Duplicate folder name - can create folder with a new name', async ({ personalFiles }) => {
const folderSnackBar = personalFiles.snackBar;
await folderDialog.createNewFolderDialog(commonFolderName);
await expect(folderSnackBar.getByMessageLocator(errorStrings.thereIsAlreadyAFolderWithThisName)).toBeVisible();
await folderDialog.createNewFolderDialog(newFolderName);
await expect(folderTable.getRowByName(newFolderName)).toBeVisible();
});
});
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -94,7 +94,7 @@ test.describe('Create Libraries ', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', sitesApi, createdLibrariesIds);
});
test('[C280024] Create Library dialog UI', async () => {
test('[XAT-5118] Create Library dialog UI check', async () => {
await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible();
await expect(libraryDialog.getLabelText(libraryNameLabel)).toBeVisible();
await expect(libraryDialog.getRequiredMarker(libraryNameLabel)).toBeVisible();
@ -115,7 +115,7 @@ test.describe('Create Libraries ', () => {
libraryBreadcrumb = myLibrariesPage.breadcrumb;
});
test('[C280025] Create a public library', async ({ myLibrariesPage }) => {
test('[XAT-5119] Create a public library', async ({ myLibrariesPage }) => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await expect(libraryDialog.getLabelText(libraryNameLabel)).toHaveValue(randomLibraryName);
await expect(libraryDialog.getLabelText(libraryIdLabel)).toHaveValue(randomLibraryName);
@ -128,7 +128,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryName);
});
test('[C289880] Create a moderated library', async ({ myLibrariesPage }) => {
test('[XAT-5120] Create a moderated library', async ({ myLibrariesPage }) => {
await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, moderatedVisibility);
await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible();
@ -139,7 +139,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId);
});
test('[C289881] Create a private library', async ({ myLibrariesPage }) => {
test('[XAT-5121] Create a private library', async ({ myLibrariesPage }) => {
await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, privateVisibility);
await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible();
@ -149,7 +149,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId);
});
test('[C289882] Create a library with a given ID and description', async ({ myLibrariesPage }) => {
test('[XAT-5122] Create a library with a given ID and description', async ({ myLibrariesPage }) => {
const libraryViewDetails = myLibrariesPage.acaHeader.viewDetails;
const libraryDetails = myLibrariesPage.libraryDetails;
@ -169,7 +169,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId);
});
test('[C280029] Cancel button', async () => {
test('[XAT-5126] Create Library - Cancel button', async () => {
await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible();
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.cancelButton.click();
@ -178,7 +178,7 @@ test.describe('Create Libraries ', () => {
await expect(libraryTable.getRowByName(randomLibraryName)).toHaveCount(0);
});
test('[C280030] Create 2 libraries with same name but different IDs', async ({ myLibrariesPage }) => {
test('[XAT-5127] Create multiple sites with same name but different IDs', async ({ myLibrariesPage }) => {
const libraryName = commonLibraryName + ' (' + commonLibraryName + ')';
const libraryName2 = commonLibraryName + ' (' + randomLibraryId + ')';
@ -193,7 +193,7 @@ test.describe('Create Libraries ', () => {
});
});
test('[C280026] Library ID cannot contain special characters', async () => {
test('[XAT-5123] Library ID cannot contain special characters', async () => {
const idsWithSpecialChars = [
'a!a',
'a@a',
@ -226,7 +226,7 @@ test.describe('Create Libraries ', () => {
}
});
test('[C280027] Duplicate library ID', async () => {
test('[XAT-5124] Duplicate library ID', async () => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.getLabelText(libraryIdLabel).clear();
await libraryDialog.getLabelText(libraryIdLabel).fill(commonLibraryName);
@ -237,7 +237,7 @@ test.describe('Create Libraries ', () => {
expect(await libraryDialog.isErrorMessageDisplayed(libraryErrors.libraryIdIsNotAvailable), errorMessageNotPresent).toBe(true);
});
test('[C280028] Create library using the ID of a library from the Trashcan', async () => {
test('[XAT-5125] Create library using the ID of a library from the Trashcan', async () => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.getLabelText(libraryIdLabel).clear();
await libraryDialog.getLabelText(libraryIdLabel).fill(commonTrashLibraryName);

View File

@ -1,3 +1,3 @@
{
"C280502": "https://hyland.atlassian.net/browse/ACS-8888"
"XAT-5017": "https://hyland.atlassian.net/browse/ACS-8888"
}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -116,7 +116,7 @@ test.describe('Delete and undo delete', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C217125] delete a file and check notification', async ({ personalFiles, trashPage }) => {
test('[XAT-5016] Delete a file and check snackbar notification', async ({ personalFiles, trashPage }) => {
let items = await personalFiles.dataTable.getRowsCount();
await personalFiles.dataTable.selectItems(file1);
await personalFiles.acaHeader.clickMoreActions();
@ -133,7 +133,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.dataTable.isItemPresent(file1)).toBeTruthy();
});
test('[C280502] delete multiple files and check notification', async ({ personalFiles, trashPage }) => {
test('[XAT-5017] Delete multiple files and check snackbar notification', async ({ personalFiles, trashPage }) => {
await personalFiles.page.reload({ waitUntil: 'load' });
let items = await personalFiles.dataTable.getRowsCount();
await personalFiles.dataTable.selectItems(file2, file3);
@ -150,7 +150,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.dataTable.isItemPresent(file3)).toBeTruthy();
});
test('[C217126] delete a folder with content', async ({ personalFiles, trashPage }) => {
test('[XAT-5018] Delete a folder with content', async ({ personalFiles, trashPage }) => {
let items = await personalFiles.dataTable.getRowsCount();
await personalFiles.dataTable.selectItems(folder1);
await personalFiles.acaHeader.clickMoreActions();
@ -164,7 +164,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.dataTable.isItemPresent(file1InFolder)).toBeFalsy();
});
test('[C217127] delete a folder containing locked files', async ({ personalFiles, trashPage }) => {
test(`[XAT-5019] Delete a folder containing files that can't be deleted (e.g. locked files)`, async ({ personalFiles, trashPage }) => {
await personalFiles.dataTable.selectItems(folder2);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Delete');
@ -176,7 +176,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.dataTable.isItemPresent(fileLocked1)).toBeFalsy();
});
test('[C217129] notification on multiple items deletion - some items fail to delete', async ({ personalFiles }) => {
test('[XAT-5020] Notification on unsuccessful multiple items deletion - some items fail to delete', async ({ personalFiles }) => {
await personalFiles.dataTable.selectItems(file4, folder3);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Delete');
@ -185,7 +185,7 @@ test.describe('Delete and undo delete', () => {
expect(action).toContain('Undo');
});
test('[C217130] notification on multiple items deletion - all items fail to delete', async ({ personalFiles }) => {
test('[XAT-5021] Notification on unsuccessful multiple items deletion - all items fail to delete', async ({ personalFiles }) => {
await personalFiles.dataTable.selectItems(folder4, folder5);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Delete');
@ -193,7 +193,7 @@ test.describe('Delete and undo delete', () => {
await expect(personalFiles.snackBar.actionButton).toBeHidden();
});
test('[C217132] undo delete of file', async ({ personalFiles }) => {
test('[XAT-5022] Undo delete of a single file restores the file', async ({ personalFiles }) => {
const items = await personalFiles.dataTable.getRowsCount();
await personalFiles.dataTable.selectItems(file5);
@ -206,7 +206,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.pagination.getRange()).toContain(`1-${items} of ${items}`);
});
test('[C280503] undo delete of folder with content', async ({ personalFiles }) => {
test('[XAT-5024] Undo restores the deleted folder and its content', async ({ personalFiles }) => {
await personalFiles.dataTable.selectItems(folder6);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Delete');
@ -218,7 +218,7 @@ test.describe('Delete and undo delete', () => {
expect(await personalFiles.dataTable.isItemPresent(file2InFolder)).toBeTruthy();
});
test('[C280504] undo delete of multiple files', async ({ personalFiles }) => {
test('[XAT-5023] Undo delete of multiple files restores all of the files', async ({ personalFiles }) => {
await personalFiles.dataTable.selectItems(file6, file7);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Delete');

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -79,7 +79,7 @@ test.describe('Delete and undo delete', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C217091] delete a file', async ({ trashPage }) => {
test('[XAT-5103] Permanently Delete a file', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file1);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.deleteButton.click();
@ -88,7 +88,7 @@ test.describe('Delete and undo delete', () => {
expect(await trashPage.dataTable.isItemPresent(file1)).toBeFalsy();
});
test('[C280416] delete a folder', async ({ trashPage }) => {
test('[XAT-5104] Permanently delete a folder', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(folder1);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.deleteButton.click();
@ -97,7 +97,7 @@ test.describe('Delete and undo delete', () => {
expect(await trashPage.dataTable.isItemPresent(folder1)).toBeFalsy();
});
test('[C290103] delete a library', async ({ trashPage }) => {
test('[XAT-5108] Permanently delete a library', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(site);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.deleteButton.click();
@ -106,7 +106,7 @@ test.describe('Delete and undo delete', () => {
expect(await trashPage.dataTable.isItemPresent(site)).toBeFalsy();
});
test('[C280417] delete multiple items', async ({ trashPage }) => {
test('[XAT-5105] Permanently delete multiple items', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file2, folder2);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.deleteButton.click();
@ -116,7 +116,7 @@ test.describe('Delete and undo delete', () => {
expect(await trashPage.dataTable.isItemPresent(folder2)).toBeFalsy();
});
test('[C269113] Confirmation dialog UI', async ({ trashPage }) => {
test('[XAT-5106] Permanently delete - Confirmation dialog UI', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file3);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.waitForDialog();
@ -128,7 +128,7 @@ test.describe('Delete and undo delete', () => {
expect(await trashPage.deleteDialog.isKeepEnabled()).toBeTruthy();
});
test('[C269115] Keep action cancels the deletion', async ({ trashPage }) => {
test('[XAT-5107] ""Keep"" action cancels the deletion', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file3);
await trashPage.acaHeader.permanentlyDeleteButton.click();
await trashPage.deleteDialog.waitForDialog();

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -91,25 +91,25 @@ test.describe('Restore from Trash', () => {
expect(await trashPage.dataTable.isItemPresent(nodeName)).toBeFalsy();
}
test('[C217177] restore file', async ({ trashPage, personalFiles }) => {
test('[XAT-5109] Restore file', async ({ trashPage, personalFiles }) => {
await restoreNode(trashPage, file1);
await personalFiles.navigate();
expect(await personalFiles.dataTable.isItemPresent(file1)).toBeTruthy();
});
test('[C280438] restore folder', async ({ trashPage, personalFiles }) => {
test('[XAT-5110] Restore folder', async ({ trashPage, personalFiles }) => {
await restoreNode(trashPage, folder1);
await personalFiles.navigate();
expect(await personalFiles.dataTable.isItemPresent(folder1)).toBeTruthy();
});
test('[C290104] restore library', async ({ trashPage, myLibrariesPage }) => {
test('[XAT-5117] Restore library', async ({ trashPage, myLibrariesPage }) => {
await restoreNode(trashPage, site1);
await myLibrariesPage.navigate();
expect(await myLibrariesPage.dataTable.isItemPresent(site1)).toBeTruthy();
});
test('[C217182] restore multiple items', async ({ trashPage, personalFiles }) => {
test('[XAT-5111] Restore multiple items', async ({ trashPage, personalFiles }) => {
await trashPage.dataTable.selectItems(file2, folder2);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.verifySnackBarActionText(`Restore successful`);
@ -122,7 +122,7 @@ test.describe('Restore from Trash', () => {
expect(await personalFiles.dataTable.isItemPresent(folder2)).toBeTruthy();
});
test('[C217181] View from notification', async ({ trashPage, personalFiles }) => {
test('[XAT-5112] Restore file - View from notification', async ({ trashPage, personalFiles }) => {
await trashPage.dataTable.selectItems(file3);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.clickSnackBarAction();
@ -162,13 +162,13 @@ test.describe('Restore from Trash', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C217178] Restore a file when another file with same name exists on the restore location', async ({ trashPage }) => {
test('[XAT-5113] Restore an item when another one with same name already exists on the restore location', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file1);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.verifySnackBarActionText(`Can't restore, ${file1} already exists`);
});
test('[C217179] Restore a file when original location no longer exists', async ({ trashPage }) => {
test('[XAT-5114] Restore a file when original location no longer exists', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file2);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.verifySnackBarActionText(`Can't restore ${file2}, the original location no longer exists`);
@ -222,13 +222,13 @@ test.describe('Restore from Trash', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C217183] one failure', async ({ trashPage }) => {
test('[XAT-5115] Notification on partial success - one failure', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file1, file2);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.verifySnackBarActionText(`Can't restore ${file1}, the original location no longer exists`);
});
test('[C217184] multiple failures', async ({ trashPage }) => {
test('[XAT-5116] Notification on partial success - multiple failures', async ({ trashPage }) => {
await trashPage.dataTable.selectItems(file3, file4, file5);
await trashPage.acaHeader.restoreButton.click();
await trashPage.snackBar.verifySnackBarActionText('2 items not restored because of issues with the restore location');

View File

@ -1,3 +1 @@
{
"XAT-5304": "https://hyland.atlassian.net/browse/ACS-9154"
}
{}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -73,8 +73,10 @@ test.describe('Edit offline - on Personal Files', () => {
test('[XAT-5304] File is locked and downloaded when clicking Edit offline', async ({ personalFiles }) => {
await personalFiles.dataTable.selectItems(file1);
await personalFiles.acaHeader.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Edit Offline');
const [download] = await Promise.all([personalFiles.page.waitForEvent('download', { timeout: 5000 })]);
const [download] = await Promise.all([
personalFiles.page.waitForEvent('download', { timeout: 5000 }),
personalFiles.matMenu.clickMenuItem('Edit Offline')
]);
expect(download.suggestedFilename()).toBe(file1);
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -0,0 +1,26 @@
{
"extends": "../../../.eslintrc.json",
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts"
],
"parserOptions": {
"project": [
"e2e/playwright/folder-information-actions/tsconfig.e2e.json"
],
"createDefaultProgram": true
},
"plugins": [
"rxjs",
"unicorn"
],
"rules": {
"@typescript-eslint/no-floating-promises": "off"
}
}
]
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,42 @@
/*!
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
*
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { PlaywrightTestConfig } from '@playwright/test';
import { CustomConfig, getGlobalConfig, getExcludedTestsRegExpArray } from '@alfresco/aca-playwright-shared';
import EXCLUDED_JSON from './exclude.tests.json';
const config: PlaywrightTestConfig<CustomConfig> = {
...getGlobalConfig,
grepInvert: getExcludedTestsRegExpArray(EXCLUDED_JSON, 'Folder Information Actions'),
projects: [
{
name: 'Folder Information Actions',
testDir: './src/tests',
use: {}
}
]
};
export default config;

View File

@ -0,0 +1,31 @@
{
"name": "folder-information-actions-e2e",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "e2e/playwright/folder-information-actions",
"projectType": "application",
"targets": {
"e2e": {
"executor": "nx:run-commands",
"options": {
"commands": ["npx playwright test --config=e2e/playwright/folder-information-actions/playwright.config.ts"]
},
"configurations": {
"production": {
"devServerTarget": "content-ce:serve:production"
},
"ui": {
"args": ["--ui"]
},
"debug": {
"args": ["--debug"]
},
"headed": {
"args": ["--headed"]
}
}
},
"lint": {
"executor": "@angular-eslint/builder:lint"
}
}
}

View File

@ -0,0 +1,195 @@
/*!
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
*
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { expect } from '@playwright/test';
import {
ApiClientFactory,
NodesApi,
Utils,
test,
TrashcanApi,
TEST_FILES,
FileActionsApi,
PersonalFilesPage,
MyLibrariesPage,
SitesApi,
SearchPage
} from '@alfresco/aca-playwright-shared';
test.describe('Actions - Folder Information', () => {
const username = `user-e2e-${Utils.random()}`;
const emptyFolder = `folder17722-${Utils.random()}`;
const folder1File = `folder17715-${Utils.random()}`;
const folderXFiles = `folder17752-${Utils.random()}`;
const folderXFilesAndFolders = `folder17753-1-${Utils.random()}`;
const folderInsideFolder = `folder17753-2-${Utils.random()}`;
const folderInLibrary = `folder17758-${Utils.random()}`;
const libraryForFolder = `library17758-${Utils.random()}`;
const folderForSearch = `folder17759-${Utils.random()}`;
const folderNested1 = `folder17766-1-${Utils.random()}`;
const folderNested2 = `folder17766-1-${Utils.random()}`;
const folderNested3 = `folder17766-1-${Utils.random()}`;
const file1 = `file1-${Utils.random()}.docx`;
const file2 = `file2-${Utils.random()}.docx`;
const file3 = `file3-${Utils.random()}.docx`;
const file4 = `file4-${Utils.random()}.docx`;
const file5 = `file5-${Utils.random()}.docx`;
const file6 = `file6-${Utils.random()}.docx`;
const file7 = `file7-${Utils.random()}.docx`;
const file8 = `file8-${Utils.random()}.docx`;
const file9 = `file9-${Utils.random()}.docx`;
const file10 = `file10-${Utils.random()}.docx`;
const file11 = `file10-${Utils.random()}.docx`;
const file12 = `file10-${Utils.random()}.docx`;
const file13 = `file10-${Utils.random()}.docx`;
let nodesApi: NodesApi;
let trashcanApi: TrashcanApi;
let fileActionsApi: FileActionsApi;
let sitesApi: SitesApi;
let folder1FileId: string;
let folderXFilesId: string;
let folderXFilesAndFoldersId: string;
let folderInsideFolderId: string;
let folderInLibraryId: string;
let siteId: string;
let folderForSearchId: string;
let folderNested1Id: string;
let folderNested2Id: string;
let folderNested3Id: string;
test.beforeAll(async () => {
const apiService = new ApiClientFactory();
await apiService.setUpAcaBackend('admin');
await apiService.createUser({ username: username });
nodesApi = await NodesApi.initialize(username, username);
trashcanApi = await TrashcanApi.initialize(username, username);
fileActionsApi = await FileActionsApi.initialize(username, username);
sitesApi = await SitesApi.initialize(username, username);
siteId = (await sitesApi.createSite(libraryForFolder)).entry.id;
const docLibId = await sitesApi.getDocLibId(siteId);
await nodesApi.createFolder(emptyFolder, '-my-');
folder1FileId = (await nodesApi.createFolder(folder1File, '-my-')).entry.id;
folderXFilesId = (await nodesApi.createFolder(folderXFiles, '-my-')).entry.id;
folderXFilesAndFoldersId = (await nodesApi.createFolder(folderXFilesAndFolders, '-my-')).entry.id;
folderInsideFolderId = (await nodesApi.createFolder(folderInsideFolder, folderXFilesAndFoldersId)).entry.id;
folderInLibraryId = (await nodesApi.createFolder(folderInLibrary, docLibId)).entry.id;
folderForSearchId = (await nodesApi.createFolder(folderForSearch, '-my-')).entry.id;
folderNested1Id = (await nodesApi.createFolder(folderNested1, '-my-')).entry.id;
folderNested2Id = (await nodesApi.createFolder(folderNested2, folderNested1Id)).entry.id;
folderNested3Id = (await nodesApi.createFolder(folderNested3, folderNested2Id)).entry.id;
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file1, folder1FileId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file2, folderXFilesId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file3, folderXFilesId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file4, folderXFilesId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file5, folderXFilesAndFoldersId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file6, folderXFilesAndFoldersId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file7, folderXFilesAndFoldersId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file8, folderInsideFolderId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file9, folderInsideFolderId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file10, folderInLibraryId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file11, folderForSearchId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file12, folderForSearchId);
await fileActionsApi.uploadFileWithRename(TEST_FILES.DOCX.path, file13, folderNested3Id);
});
test.beforeEach(async ({ loginPage }) => {
await Utils.tryLoginUser(loginPage, username, username, 'Main beforeEach failed');
});
test.afterAll(async () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
async function checkFolderInformation(
page: PersonalFilesPage | MyLibrariesPage | SearchPage,
folderName: string,
expectedSize: string,
location: string,
isEmptyFolder?: 'isEmpty'
) {
await page.dataTable.selectItems(folderName);
await page.acaHeader.clickMoreActions();
await page.matMenu.clickMenuItem('Folder Information');
await expect(async () => {
expect(await page.folderInformationDialog.folderSize.textContent()).toContain(expectedSize);
}).toPass({
intervals: [1_000],
timeout: 5_000
});
if (!isEmptyFolder) {
expect(await page.folderInformationDialog.getFolderSizeNumber()).toBeGreaterThan(0);
}
expect(await page.folderInformationDialog.folderLocation.textContent()).toContain(location);
expect(await page.folderInformationDialog.folderCreationDate.textContent()).toContain('ago');
expect(await page.folderInformationDialog.folderModifiedDate.textContent()).toContain('ago');
await page.folderInformationDialog.doneButton.click();
await page.folderInformationDialog.folderName.waitFor({ state: 'hidden' });
}
test('[XAT-17722] Folder information Empty folder size and number of documents as 0', async ({ personalFiles }) => {
await personalFiles.navigate();
await checkFolderInformation(personalFiles, emptyFolder, '0 bytes for 0 files', `/Company Home/User Homes/${username}`, 'isEmpty');
});
test('[XAT-17715] Folder information correct folder size and number of documents - single file', async ({ personalFiles }) => {
await personalFiles.navigate();
await checkFolderInformation(personalFiles, folder1File, 'for 1 files', `/Company Home/User Homes/${username}`);
});
test('[XAT-17752] Folder information correct folder size and number of documents - multiple files', async ({ personalFiles }) => {
await personalFiles.navigate();
await checkFolderInformation(personalFiles, folderXFiles, 'for 3 files', `/Company Home/User Homes/${username}`);
});
test('[XAT-17753] Folder information correct folder size and number of documents - folder and files', async ({ personalFiles }) => {
await personalFiles.navigate();
await checkFolderInformation(personalFiles, folderXFilesAndFolders, 'for 5 files', `/Company Home/User Homes/${username}`);
});
test('[XAT-17758] Folder information correct folder size and number of documents - from libraries', async ({ myLibrariesPage }) => {
await myLibrariesPage.navigate();
await myLibrariesPage.dataTable.getRowByName(libraryForFolder).dblclick();
await checkFolderInformation(myLibrariesPage, folderInLibrary, 'for 1 files', `/Company Home/Sites/${libraryForFolder}/documentLibrary`);
});
test('[XAT-17759] Folder information correct folder size and number of documents - from search', async ({ personalFiles, searchPage }) => {
await personalFiles.navigate();
await searchPage.searchWithin(folderForSearch, 'folders');
await checkFolderInformation(searchPage, folderForSearch, 'for 2 files', `/Company Home/User Homes/${username}`);
});
test('[XAT-17766] Folder information correct folder size and number of documents - nested folders', async ({ personalFiles }) => {
await personalFiles.navigate();
await personalFiles.dataTable.getRowByName(folderNested1).dblclick();
await personalFiles.dataTable.getRowByName(folderNested2).dblclick();
await checkFolderInformation(
personalFiles,
folderNested3,
'for 1 files',
`/Company Home/User Homes/${username}/${folderNested1}/${folderNested2}`
);
});
});

View File

@ -0,0 +1,15 @@
{
"extends": "../../../tsconfig.adf.json",
"compilerOptions": {
"outDir": "../../out-tsc/e2e",
"baseUrl": "./",
"module": "commonjs",
"target": "es2017",
"types": ["jasmine", "jasminewd2", "node"],
"skipLibCheck": true,
"paths": {
"@alfresco/aca-playwright-shared": ["dist/@alfresco/aca-playwright-shared"]
}
},
"exclude": ["node_modules"]
}

View File

@ -0,0 +1,15 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/e2e",
"baseUrl": "./",
"module": "commonjs",
"target": "es2017",
"types": ["jasmine", "jasminewd2", "node", "@playwright/test"],
"skipLibCheck": true,
"paths": {
"@alfresco/aca-playwright-shared": ["dist/@alfresco/aca-playwright-shared"]
}
},
"exclude": ["node_modules"]
}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -55,7 +55,7 @@ test.describe('Info Drawer - Comments', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C299173] from Personal Files - Comments tab default fields', async ({ personalFiles }) => {
test('[XAT-5524] from Personal Files - Comments tab default fields', async ({ personalFiles }) => {
const personalFolderName = `personalFolder-e2e-${Utils.random()}`;
await nodesApi.createFolder(personalFolderName);
await fileActionsApi.waitForNodes(personalFolderName, { expect: 1 });
@ -70,7 +70,7 @@ test.describe('Info Drawer - Comments', () => {
await expect(personalFiles.infoDrawer.addCommentButton).toBeDisabled();
});
test('[C299209] from Favorites - Add a comment on a folder', async ({ favoritePage }) => {
test('[XAT-5544] from Favorites - Add a comment on a folder', async ({ favoritePage }) => {
const favoriteFolderName = `favoriteFolder-e2e-${Utils.random()}`;
const folderFavId = (await nodesApi.createFolder(favoriteFolderName)).entry.id;
await favoritesActions.addFavoritesByIds('folder', [folderFavId]);
@ -83,11 +83,10 @@ test.describe('Info Drawer - Comments', () => {
await expect(favoritePage.infoDrawer.commentInputField).toBeVisible();
await favoritePage.infoDrawer.addCommentToNode(commentText);
await expect(favoritePage.infoDrawer.addCommentButton).toBeDisabled();
expect(await favoritePage.infoDrawer.checkCommentsHeaderCount()).toEqual(1);
expect(await favoritePage.infoDrawer.verifyCommentsCountFromList(1));
expect(await favoritePage.infoDrawer.getCommentsCountFromList()).toEqual(1);
});
test('[C299189] from Shared Files - Comments are displayed ordered by created date in descending order', async ({ sharedPage }) => {
test('[XAT-5533] from Shared Files - Comments are displayed ordered by created date in descending order', async ({ sharedPage }) => {
await sharedPage.navigate();
const sharedFileName = `sharedFile-e2e-${Utils.random()}`;
const e2eCommentFirst = `e2e-comment-${Utils.random()}`;
@ -108,7 +107,7 @@ test.describe('Info Drawer - Comments', () => {
await expect(sharedPage.infoDrawer.commentTextContent.nth(1)).toHaveText(e2eCommentFirst);
});
test('[C299195] from Recent Files - Add a comment on a file', async ({ recentFilesPage }) => {
test('[XAT-5539] from Recent Files - Add a comment on a file', async ({ recentFilesPage }) => {
const recentFile = `e2e-recentFile-${Utils.random()}`;
await nodesApi.createFile(recentFile);
await fileActionsApi.waitForNodes(recentFile, { expect: 1 });
@ -120,11 +119,10 @@ test.describe('Info Drawer - Comments', () => {
await expect(recentFilesPage.infoDrawer.commentInputField).toBeVisible();
await recentFilesPage.infoDrawer.addCommentToNode(commentText);
await expect(recentFilesPage.infoDrawer.addCommentButton).toBeDisabled();
expect(await recentFilesPage.infoDrawer.checkCommentsHeaderCount()).toEqual(1);
expect(await recentFilesPage.infoDrawer.verifyCommentsCountFromList(1));
expect(await recentFilesPage.infoDrawer.getCommentsCountFromList()).toEqual(1);
});
test('[C299196] Comment info display - File from Favorites', async ({ favoritePage }) => {
test('[XAT-5540] Comment info display - File from Favorites', async ({ favoritePage }) => {
const e2eCommentFirst = `e2e-comment-${Utils.random()}`;
const commentInfoFileName = `e2e-commentFile-${Utils.random()}`;
const commentInfoFileId = (await nodesApi.createFile(commentInfoFileName)).entry.id;

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -132,7 +132,7 @@ test.describe('Info Drawer - File Folder Properties', () => {
await personalFiles.acaHeader.viewDetails.click();
}
test('[C299162] View properties - Default tabs', async ({ personalFiles }) => {
test('[XAT-5512] View properties - Default tabs', async ({ personalFiles }) => {
await navigateAndOpenInfoDrawer(personalFiles, FolderC299162);
expect(await personalFiles.infoDrawer.getHeaderTitle()).toEqual(FolderC299162);
await expect(personalFiles.infoDrawer.propertiesTab).toBeVisible();
@ -140,7 +140,7 @@ test.describe('Info Drawer - File Folder Properties', () => {
expect(await personalFiles.infoDrawer.getTabsCount()).toEqual(2);
});
test('[C599174] View properties - Should be able to make the files/folders info drawer expandable as for Sites', async ({ personalFiles }) => {
test('[XAT-5514] View properties - Should be able to make the folders info drawer expandable as for Sites', async ({ personalFiles }) => {
await navigateAndOpenInfoDrawer(personalFiles, FolderC599174);
await personalFiles.infoDrawer.expandDetailsButton.click();
await expect(personalFiles.infoDrawer.expandedDetailsPermissionsTab).toBeVisible();
@ -179,6 +179,12 @@ test.describe('Info Drawer - File Folder Properties', () => {
test('[XAT-17240] Remove a tag from a node', async ({ personalFiles }) => {
await fileActionsApi.waitForNodes(Folder17240, { expect: 1 });
await tagsApi.assignTagToNode(Folder17240Id, tagBody);
await expect(async () => {
expect((await tagsApi.listTagsForNode(Folder17240Id)).list.entries.length).toEqual(1);
}).toPass({
intervals: [1_000],
timeout: 10_000
});
await personalFiles.navigate();
await Utils.reloadPageIfRowNotVisible(personalFiles, Folder17240);
await expect(personalFiles.dataTable.getRowByName(Folder17240)).toBeVisible();

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -22,12 +22,13 @@
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { expect, Page } from '@playwright/test';
import { expect } from '@playwright/test';
import { ApiClientFactory, test, TrashcanApi, NodesApi, FileActionsApi, TEST_FILES, Utils } from '@alfresco/aca-playwright-shared';
test.describe('File preview', () => {
const timestamp = new Date().getTime();
const username = `user1-${timestamp}`;
const fileName = `file1-${timestamp}.pdf`;
let nodesApi: NodesApi;
let trashcanApi: TrashcanApi;
let fileActionsApi: FileActionsApi;
@ -40,6 +41,8 @@ test.describe('File preview', () => {
nodesApi = await NodesApi.initialize(username, username);
trashcanApi = await TrashcanApi.initialize(username, username);
fileActionsApi = await FileActionsApi.initialize(username, username);
await fileActionsApi.uploadFileWithRename(TEST_FILES.PDF.path, fileName, '-my-');
await fileActionsApi.waitForNodes(fileName, { expect: 1 });
} catch (error) {
console.error(`beforeAll failed : ${error}`);
}
@ -53,26 +56,12 @@ test.describe('File preview', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
async function checkFileContent(page: Page, pageNumber: number, text: string): Promise<void> {
const allPages = page.locator('.canvasWrapper > canvas').first();
const pageLoaded = page.locator(`div[data-page-number="${pageNumber}"][data-loaded="true"]`);
const textLayerLoaded = page.locator(`div[data-page-number="${pageNumber}"] .textLayer`);
const specificText = textLayerLoaded.textContent();
await expect(allPages).toBeVisible();
await expect(pageLoaded).toBeVisible();
await expect(textLayerLoaded).toBeVisible();
expect(await specificText).toContain(text);
}
test('[C595967] Should preview document from the info drawer', async ({ personalFiles }) => {
const fileName = `file1-${timestamp}.pdf`;
await fileActionsApi.uploadFileWithRename(TEST_FILES.PDF.path, fileName, '-my-');
await fileActionsApi.waitForNodes(fileName, { expect: 1 });
test('[XAT-17780] Can open viewer while the info drawer is opened', async ({ personalFiles }) => {
await personalFiles.navigate();
await Utils.reloadPageIfRowNotVisible(personalFiles, fileName);
await personalFiles.dataTable.getRowByName(fileName).click();
await personalFiles.acaHeader.viewButton.click();
await checkFileContent(personalFiles.page, 1, 'This is a small demonstration');
await expect(personalFiles.viewer.pdfViewerContentPages.first()).toBeVisible();
expect(await personalFiles.viewer.viewerDocument.textContent()).toContain('PDF');
});
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -53,7 +53,7 @@ test.describe('Info Drawer - General', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
});
test('[C268999] Info drawer closes on page refresh', async ({ personalFiles }) => {
test('[XAT-5511] Info drawer closes on page refresh', async ({ personalFiles }) => {
const parentFolder = `parent-general-${Utils.random()}`;
const file1 = `file1-${Utils.random()}.txt`;
const folder1 = `folder1-${Utils.random()}`;

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -25,22 +25,35 @@
import { expect } from '@playwright/test';
import { ApiClientFactory, Utils, test, SitesApi, QueriesApi, SITE_VISIBILITY, SITE_ROLES } from '@alfresco/aca-playwright-shared';
async function expectSiteToBeDefined(siteName: string, queriesApi: QueriesApi) {
await expect(async () => {
expect(await queriesApi.waitForSites(siteName, { expect: 1 })).toEqual(1);
}).toPass({
intervals: [1_000],
timeout: 10_000
});
}
test.describe('Library properties', () => {
let sitesApi: SitesApi;
let queriesApi: QueriesApi;
const username = `user1-${Utils.random()}`;
const site = {
name: `site1-${Utils.random()}`,
id: `site-id-${Utils.random()}`,
visibility: SITE_VISIBILITY.MODERATED,
description: 'my site description'
};
const siteForUpdate = {
name: `site2-${Utils.random()}`,
id: `site-id-${Utils.random()}`,
visibility: SITE_VISIBILITY.MODERATED,
description: 'my initial description'
};
const siteDup = `site3-${Utils.random()}`;
test.beforeAll(async () => {
@ -50,6 +63,7 @@ test.describe('Library properties', () => {
await apiClientFactory.createUser({ username });
sitesApi = await SitesApi.initialize(username, username);
queriesApi = await QueriesApi.initialize(username, username);
await sitesApi.createSite(site.name, site.visibility, site.description, site.id);
await sitesApi.createSite(siteForUpdate.name, siteForUpdate.visibility, siteForUpdate.description, siteForUpdate.id);
await sitesApi.createSite(siteDup);
@ -67,7 +81,8 @@ test.describe('Library properties', () => {
await Utils.deleteNodesSitesEmptyTrashcan(undefined, undefined, 'afterAll failed', sitesApi, [site.id, siteForUpdate.id, siteDup]);
});
test('[C289336] Info drawer opens for a library', async ({ myLibrariesPage }) => {
test('[XAT-5545] Info drawer opens for a library', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(site.name, queriesApi);
await expect(myLibrariesPage.dataTable.getRowByName(site.name)).toBeVisible();
await myLibrariesPage.dataTable.getRowByName(site.name).click();
await myLibrariesPage.acaHeader.viewDetails.click();
@ -87,7 +102,8 @@ test.describe('Library properties', () => {
await expect(myLibrariesPage.libraryDetails.editButton).toBeVisible();
});
test('[C289338] Editable properties', async ({ myLibrariesPage }) => {
test('[XAT-5547] Editable properties', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(site.name, queriesApi);
await myLibrariesPage.dataTable.getRowByName(site.name).click();
await myLibrariesPage.acaHeader.viewDetails.click();
await expect(myLibrariesPage.libraryDetails.infoDrawerPanel).toBeVisible();
@ -104,12 +120,13 @@ test.describe('Library properties', () => {
await expect(myLibrariesPage.libraryDetails.updateButton).toBeDisabled();
});
test('[C289339] Edit site details', async ({ myLibrariesPage }) => {
test('[XAT-5548] Edit site details', async ({ myLibrariesPage }) => {
const siteUpdated = {
name: `site-for-rename-${Utils.random()}`,
visibility: SITE_VISIBILITY.PRIVATE,
description: 'new description'
};
await expectSiteToBeDefined(siteForUpdate.name, queriesApi);
await myLibrariesPage.dataTable.getRowByName(siteForUpdate.name).click();
await myLibrariesPage.acaHeader.viewDetails.click();
@ -132,7 +149,8 @@ test.describe('Library properties', () => {
expect((await sitesApi.getSite(siteForUpdate.id)).entry.visibility).toEqual(siteUpdated.visibility);
});
test('[C289340] Cancel editing a site', async ({ myLibrariesPage }) => {
test('[XAT-5549] Cancel editing a site', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(site.name, queriesApi);
const newName = `new-name-${Utils.random}`;
const newDesc = `new desc ${Utils.random}`;
@ -154,10 +172,9 @@ test.describe('Library properties', () => {
await expect(myLibrariesPage.libraryDetails.infoDrawerPanel).toBeVisible();
});
test('[C289341] Warning appears when editing the name of the library by entering an existing name', async ({ myLibrariesPage }) => {
const queriesApi = await QueriesApi.initialize(username, username);
test('[XAT-5550] Warning appears when editing the name of the library by entering an existing name', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(siteDup, queriesApi);
await queriesApi.waitForSites(site.name, { expect: 1 });
await myLibrariesPage.dataTable.getRowByName(siteDup).click();
await myLibrariesPage.acaHeader.viewDetails.click();
await expect(myLibrariesPage.libraryDetails.infoDrawerPanel).toBeVisible();
@ -169,7 +186,9 @@ test.describe('Library properties', () => {
await expect(myLibrariesPage.libraryDetails.hintMessage).toHaveText('Library name already in use');
});
test('[C289342] Site name too long', async ({ myLibrariesPage }) => {
test('[XAT-5551] Site name too long', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(site.name, queriesApi);
await myLibrariesPage.dataTable.getRowByName(site.name).click();
await myLibrariesPage.acaHeader.viewDetails.click();
await expect(myLibrariesPage.libraryDetails.infoDrawerPanel).toBeVisible();
@ -181,7 +200,9 @@ test.describe('Library properties', () => {
await expect(myLibrariesPage.libraryDetails.updateButton).toBeDisabled();
});
test('[C289343] Site description too long', async ({ myLibrariesPage }) => {
test('[XAT-5552] Site description too long', async ({ myLibrariesPage }) => {
await expectSiteToBeDefined(site.name, queriesApi);
await Utils.reloadPageIfRowNotVisible(myLibrariesPage, site.name);
await myLibrariesPage.dataTable.getRowByName(site.name).click();
await myLibrariesPage.acaHeader.viewDetails.click();
@ -229,7 +250,7 @@ test.describe('Non manager', () => {
await Utils.deleteNodesSitesEmptyTrashcan(undefined, undefined, 'afterAll failed', sitesApi, [site.id]);
});
test('[C289337] Info drawer button is not displayed when user is not the library manager', async ({ loginPage, myLibrariesPage }) => {
test('[XAT-5546] View Details button is not displayed when user is not the library manager', async ({ loginPage, myLibrariesPage }) => {
await loginPage.loginUser({ username: user2, password: user2 }, { withNavigation: true, waitForLoading: true });
await myLibrariesPage.navigate();
@ -237,7 +258,7 @@ test.describe('Non manager', () => {
await expect(myLibrariesPage.acaHeader.viewDetails).toBeHidden();
});
test('[C289344] Error notification when editing with no rights', async ({ loginPage, myLibrariesPage }) => {
test('[XAT-5553] Error notification when editing with no rights', async ({ loginPage, myLibrariesPage }) => {
await loginPage.loginUser({ username: user3, password: user3 }, { withNavigation: true, waitForLoading: true });
await myLibrariesPage.navigate();

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -175,7 +175,7 @@ test.describe('Library actions ', () => {
}
});
test('[C290106] Leave a library from My Libraries', async () => {
test('[XAT-5132] Leave a library - from My Libraries', async () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library1, managerRole)).toBeVisible();
await libraryTable.performActionFromExpandableMenu(user1Library1, leaveLibraryButton);
await expect.soft(confirmDialog.getDialogTitle('Leave this library?')).toBeVisible();
@ -187,14 +187,14 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getRowByName(user1Library1)).toBeHidden();
});
test('[C290111] Cancel Leave Library', async () => {
test('[XAT-5136] Cancel Leave Library', async () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library5, managerRole)).toBeVisible();
await libraryTable.performActionFromExpandableMenu(user1Library5, leaveLibraryButton);
await confirmDialog.cancelButton.click();
await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library5, managerRole)).toBeVisible();
});
test('[C290107] Leave a library - failure notification', async () => {
test('[XAT-5137] Leave a library - failure notification', async () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user2Library1, managerRole)).toBeVisible();
await libraryTable.performActionFromExpandableMenu(user2Library1, leaveLibraryButton);
await confirmDialog.okButton.click();
@ -202,7 +202,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user2Library1, managerRole)).toBeVisible();
});
test('[C289974] Mark library as favorite from My Libraries', async () => {
test('[XAT-5140] Mark a library as favorite - from My Libraries', async () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary3, contributorRole)).toBeVisible();
await libraryTable.getCellByColumnNameAndRowItem(adminLibrary3, contributorRole).click();
await myLibrariesHeader.clickMoreActions();
@ -211,7 +211,7 @@ test.describe('Library actions ', () => {
expect(await libraryMenu.isMenuItemVisible(removeFavoriteButton)).toBe(true);
});
test('[C289975] Remove library from favorites from My Libraries', async ({ myLibrariesPage }) => {
test('[XAT-5142] Remove a library from favorites - from My Libraries', async ({ myLibrariesPage }) => {
await expect(libraryTable.getRowByName(user2Library2)).toBeVisible();
await libraryTable.getRowByName(user2Library2).click();
await myLibrariesPage.page.waitForTimeout(1000);
@ -222,7 +222,7 @@ test.describe('Library actions ', () => {
expect(await libraryMenu.isMenuItemVisible(favoriteButton)).toBe(true);
});
test('[C289988] Delete a library from My Libraries', async ({ trashPage }) => {
test('[XAT-5145] Delete a library - from My Libraries', async ({ trashPage }) => {
const trashTable = trashPage.dataTable;
await expect(libraryTable.getRowByName(user2Library5Delete)).toBeVisible();
await libraryTable.getRowByName(user2Library5Delete).click();
@ -250,7 +250,7 @@ test.describe('Library actions ', () => {
}
});
test('[C290105] Join a public library from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
test('[XAT-5128] Join a public library - from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
await favoritesApi.addFavoriteById(siteString, adminLibrary1);
await favoriteLibrariesPage.navigate();
await libraryTable.performActionFromExpandableMenu(adminLibrary1, joinButton);
@ -258,7 +258,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary1, consumerRole)).toBeVisible();
});
test('[C290109] Join a moderated library from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
test('[XAT-5130] Join a moderated library - from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
await favoritesApi.addFavoriteById(siteString, adminModerateLibrary1);
await favoriteLibrariesPage.navigate();
await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary1, notMemberString)).toBeVisible();
@ -270,7 +270,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary1, consumerRole)).toBeVisible();
});
test('[C290110] Leave a library from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
test('[XAT-5133] Leave a library - from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
const confirmDialog = favoriteLibrariesPage.confirmDialogComponent;
await favoritesApi.addFavoriteById(siteString, user1Library2);
await favoriteLibrariesPage.navigate();
@ -281,7 +281,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library2, notMemberString)).toBeVisible();
});
test('[C290108] Cancel join from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
test('[XAT-5138] Cancel join - from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
await user2SitesApi.createSiteMembershipRequestForPerson(username2, adminModerateLibrary3);
await favoritesApi.addFavoriteById(siteString, adminModerateLibrary3);
await favoriteLibrariesPage.navigate();
@ -293,7 +293,7 @@ test.describe('Library actions ', () => {
expect(hasJoinRequest).toBe(false);
});
test('[C289976] Remove library from favorites from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
test('[XAT-5143] Remove a library from favorites - from Favorite Libraries', async ({ favoriteLibrariesPage }) => {
const myLibrariesHeader = favoriteLibrariesPage.acaHeader;
const libraryMenu = favoriteLibrariesPage.matMenu;
@ -305,7 +305,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getRowByName(user2Library3)).toBeHidden();
});
test('[C289991] Delete a library from Favorite Libraries', async ({ favoriteLibrariesPage, trashPage }) => {
test('[XAT-5146] Delete a library - from Favorite Libraries', async ({ favoriteLibrariesPage, trashPage }) => {
const myLibrariesHeader = favoriteLibrariesPage.acaHeader;
const libraryMenu = favoriteLibrariesPage.matMenu;
const trashTable = trashPage.dataTable;
@ -335,7 +335,7 @@ test.describe('Library actions ', () => {
}
});
test('[C306959] Join a public library from Search Results', async ({ searchPage }) => {
test('[XAT-5129] Join a public library - from Search Results', async ({ searchPage }) => {
await searchPage.searchWithin(adminLibrary2, 'libraries');
await searchPage.reload({ waitUntil: loadString });
await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary2, notMemberString)).toBeVisible();
@ -344,7 +344,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary2, consumerRole)).toBeVisible();
});
test('[C306960] Join a moderated library from Search Results', async ({ myLibrariesPage, searchPage }) => {
test('[XAT-5131] Join a moderated library - from Search Results', async ({ myLibrariesPage, searchPage }) => {
await searchPage.searchWithin(adminModerateLibrary2, 'libraries');
await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary2, notMemberString)).toBeVisible();
await libraryTable.performActionFromExpandableMenu(adminModerateLibrary2, joinButton);
@ -355,7 +355,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary2, consumerRole)).toBeVisible();
});
test('[C306961] Leave a library from Search Results', async ({ searchPage }) => {
test('[XAT-5134] Leave a library - from Search Results', async ({ searchPage }) => {
const confirmDialog = searchPage.confirmDialogComponent;
await searchPage.searchWithin(user1Library3, 'libraries');
@ -366,7 +366,7 @@ test.describe('Library actions ', () => {
await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library3, notMemberString)).toBeVisible();
});
test('[C306962] Cancel join from Search Results', async ({ searchPage }) => {
test('[XAT-5139] Cancel join - from Search Results', async ({ searchPage }) => {
await user2SitesApi.createSiteMembershipRequestForPerson(username2, adminModerateLibrary4);
await searchPage.searchWithin(adminModerateLibrary4, 'libraries');
await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary4, notMemberString)).toBeVisible();
@ -376,7 +376,7 @@ test.describe('Library actions ', () => {
expect(hasJoinRequest).toBe(false);
});
test('[C306963] Mark library as favorite from Search Results', async ({ myLibrariesPage, searchPage }) => {
test('[XAT-5141] Mark a library as favorite - from Search Results', async ({ myLibrariesPage, searchPage }) => {
const myLibrariesHeader = myLibrariesPage.acaHeader;
const libraryMenu = myLibrariesPage.matMenu;
@ -393,7 +393,7 @@ test.describe('Library actions ', () => {
expect(await libraryMenu.isMenuItemVisible(removeFavoriteButton)).toBe(true);
});
test('[C306964] Remove library from favorites from Search Results', async ({ searchPage }) => {
test('[XAT-5144] Remove a library from favorites - from Search Results', async ({ searchPage }) => {
const searchHeader = searchPage.acaHeader;
const libraryMenu = searchPage.matMenu;
@ -411,7 +411,7 @@ test.describe('Library actions ', () => {
expect(await libraryMenu.isMenuItemVisible(favoriteButton)).toBe(true);
});
test('[C306965] Delete a library from Search Results', async ({ searchPage, trashPage }) => {
test('[XAT-5147] Delete a library - from Search Results', async ({ searchPage, trashPage }) => {
const searchHeader = searchPage.acaHeader;
const libraryMenu = searchPage.matMenu;
const trashTable = trashPage.dataTable;

View File

@ -1,4 +1,3 @@
{
"C261153": "https://alfresco.atlassian.net/browse/AAE-7517",
"C589205": "https://hyland.atlassian.net/browse/ACS-9154"
"XAT-4525": "https://alfresco.atlassian.net/browse/AAE-7517"
}

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -38,46 +38,6 @@ test.describe('Empty list views', () => {
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
});
test('[C217099] empty My Libraries', async ({ myLibrariesPage }) => {
await myLibrariesPage.navigate();
expect(await myLibrariesPage.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await myLibrariesPage.dataTable.getEmptyStateTitle()).toContain(`You aren't a member of any File Libraries yet`);
expect(await myLibrariesPage.dataTable.getEmptyStateSubtitle()).toContain('Join libraries to upload, view, and share files.');
});
test('[C280134] [C280120] Empty Trash - pagination controls not displayed', async ({ trashPage }) => {
await trashPage.navigate();
expect(await trashPage.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await trashPage.dataTable.getEmptyStateTitle()).toContain('Trash is empty');
expect(await trashPage.dataTable.getEmptyListText()).toContain('Items you delete are moved to the Trash.');
expect(await trashPage.dataTable.getEmptyListText()).toContain('Empty Trash to permanently delete items.');
expect(await trashPage.pagination.isRangePresent(), 'Range is present').toBe(false);
expect(await trashPage.pagination.isMaxItemsPresent(), 'Max items is present').toBe(false);
});
test('[C290123] [C290031] Empty Search results - pagination controls not displayed', async ({ personalFiles, searchPage }) => {
await personalFiles.acaHeader.searchButton.click();
await searchPage.clickSearchButton();
await searchPage.searchOverlay.checkFilesAndFolders();
await searchPage.searchOverlay.searchFor('InvalidText');
await searchPage.reload({ waitUntil: 'domcontentloaded' });
await searchPage.dataTable.spinnerWaitForReload();
expect(await personalFiles.pagination.isRangePresent(), 'Range is present').toBe(false);
expect(await personalFiles.pagination.isMaxItemsPresent(), 'Max items is present').toBe(false);
expect(await personalFiles.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await personalFiles.dataTable.emptySearchText.innerText()).toContain('Your search returned 0 results');
});
test('[C290020] Empty Search results - Libraries', async ({ searchPage }) => {
await searchPage.sidenav.openPanel(SIDEBAR_LABELS.MY_LIBRARIES);
/* cspell:disable-next-line */
await searchPage.searchWithin('qwertyuiop', 'files');
expect(await searchPage.dataTable.isEmpty()).toBeTruthy();
expect(await searchPage.dataTable.emptySearchText.textContent()).toContain('Your search returned 0 results');
});
async function openEmptyTab(searchPage: SearchPage, tab: string, emptyStateTitle: string, emptyStateSubtitle: string) {
await searchPage.sidenav.openPanel(tab);
await searchPage.dataTable.spinnerWaitForReload();
@ -99,7 +59,14 @@ test.describe('Empty list views', () => {
expect(await personalFiles.pagination.isNextButtonPresent()).toBeFalsy();
}
test(`[C289911] empty ${SIDEBAR_LABELS.FAVORITE_LIBRARIES}`, async ({ searchPage }) => {
test('[XAT-4402] Empty My Libraries', async ({ myLibrariesPage }) => {
await myLibrariesPage.navigate();
expect(await myLibrariesPage.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await myLibrariesPage.dataTable.getEmptyStateTitle()).toContain(`You aren't a member of any File Libraries yet`);
expect(await myLibrariesPage.dataTable.getEmptyStateSubtitle()).toContain('Join libraries to upload, view, and share files.');
});
test(`[XAT-4403] Empty Favorite Libraries`, async ({ searchPage }) => {
await openEmptyTab(
searchPage,
SIDEBAR_LABELS.FAVORITE_LIBRARIES,
@ -108,7 +75,7 @@ test.describe('Empty list views', () => {
);
});
test(`[C213169] empty ${SIDEBAR_LABELS.RECENT_FILES}`, async ({ searchPage }) => {
test(`[XAT-4405] Empty Recent Files`, async ({ searchPage }) => {
await openEmptyTab(
searchPage,
SIDEBAR_LABELS.RECENT_FILES,
@ -117,31 +84,51 @@ test.describe('Empty list views', () => {
);
});
test(`[C280133] empty ${SIDEBAR_LABELS.FAVORITES}`, async ({ searchPage }) => {
test(`[XAT-4406] Empty Favorites`, async ({ searchPage }) => {
await openEmptyTab(searchPage, SIDEBAR_LABELS.FAVORITES, 'No favorite files or folders', 'Favorite items that you want to easily find later.');
});
test(`[C280111] ${SIDEBAR_LABELS.FAVORITES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
test('[XAT-4581] Trash - Pagination control is not displayed on empty page load', async ({ trashPage }) => {
await trashPage.navigate();
expect(await trashPage.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await trashPage.dataTable.getEmptyStateTitle()).toContain('Trash is empty');
expect(await trashPage.dataTable.getEmptyListText()).toContain('Items you delete are moved to the Trash.');
expect(await trashPage.dataTable.getEmptyListText()).toContain('Empty Trash to permanently delete items.');
expect(await trashPage.pagination.isRangePresent(), 'Range is present').toBe(false);
expect(await trashPage.pagination.isMaxItemsPresent(), 'Max items is present').toBe(false);
});
test('[XAT-4590] Search Page - Pagination control is not displayed on empty page load', async ({ personalFiles, searchPage }) => {
await personalFiles.acaHeader.searchButton.click();
await searchPage.clickSearchButton();
await searchPage.searchOverlay.checkFilesAndFolders();
await searchPage.searchOverlay.searchFor('InvalidText');
await searchPage.reload({ waitUntil: 'domcontentloaded' });
await searchPage.dataTable.spinnerWaitForReload();
expect(await personalFiles.pagination.isRangePresent(), 'Range is present').toBe(false);
expect(await personalFiles.pagination.isMaxItemsPresent(), 'Max items is present').toBe(false);
expect(await personalFiles.dataTable.isEmpty(), 'list is not empty').toBe(true);
expect(await personalFiles.dataTable.emptySearchText.innerText()).toContain('Your search returned 0 results');
});
test(`[XAT-4573] Favorites - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.FAVORITES, personalFiles);
});
test(`[C280084] ${SIDEBAR_LABELS.MY_LIBRARIES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
test(`[XAT-4537] My Libraries - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.MY_LIBRARIES, personalFiles);
});
test(`[C291873] ${SIDEBAR_LABELS.FAVORITE_LIBRARIES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
test(`[XAT-4546] Favorite Libraries - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.FAVORITE_LIBRARIES, personalFiles);
});
test(`[C280075] ${SIDEBAR_LABELS.PERSONAL_FILES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
test(`[XAT-4528] Personal Files - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.PERSONAL_FILES, personalFiles);
});
test(`[C280102] ${SIDEBAR_LABELS.RECENT_FILES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
test(`[XAT-4564] Recent Files - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.RECENT_FILES, personalFiles);
});
test(`[C280120] ${SIDEBAR_LABELS.TRASH} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.TRASH, personalFiles);
});
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -90,21 +90,21 @@ test.describe('Favorites Files', () => {
await favoritePage.navigate();
});
test('[C280482] has the correct columns', async ({ favoritePage }) => {
test('[XAT-4454] Favorites list has the correct columns', async ({ favoritePage }) => {
const expectedColumns = ['Name', 'Location', 'Size', 'Modified', 'Modified by', 'Tags'];
const actualColumns = Utils.trimArrayElements(await favoritePage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test(`[C213228] deleted favorite file does not appear`, async ({ favoritePage }) => {
test(`[XAT-4456] Deleted favorite files and folders do not appear in the list`, async ({ favoritePage }) => {
expect(await favoritePage.dataTable.isItemPresent(fileName3), `${fileName3} is displayed`).not.toBe(true);
});
test(`[C213229] file is displayed after it is restored from Trashcan`, async ({ favoritePage }) => {
test(`[XAT-4457] Favorite files and folders restored from trashcan are displayed in the list`, async ({ favoritePage }) => {
expect(await favoritePage.dataTable.isItemPresent(fileName4), `${fileName4} not displayed`).toBe(true);
});
test('[C213231] Location column displays the parent folder of the files', async ({ favoritePage }) => {
test('[XAT-4459] Location column displays the parent folder of the file as link', async ({ favoritePage }) => {
expect(await favoritePage.dataTable.getItemLocationText(fileName2)).toEqual(parentFolder);
expect(await favoritePage.dataTable.getItemLocationText(favFolderName)).toEqual('Personal Files');
expect(await favoritePage.dataTable.getItemLocationTooltip(fileName2)).toEqual(`Personal Files/${parentFolder}`);
@ -114,25 +114,25 @@ test.describe('Favorites Files', () => {
expect(await favoritePage.dataTable.getItemLocationTooltip(fileName1)).toContain(`${siteName}`);
});
test('[C213650] Location column redirect - item in user Home', async ({ favoritePage }) => {
test(`[XAT-4460] Clicking on the location link redirects to parent folder - item in User's Home`, async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(favFolderName);
await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files']);
});
test('[C280484] Location column redirect - file in folder', async ({ favoritePage }) => {
test('[XAT-4461] Clicking on the location link redirects to parent folder - item in a folder', async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(fileName2);
await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files', parentFolder]);
});
test('[C280485] Location column redirect - file in site', async ({ favoritePage }) => {
test('[XAT-4462] Clicking on the location link redirects to parent folder - item in a site', async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(fileName1);
await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['My Libraries', siteName]);
});
test('[C213230] Navigate into folder from Favorites', async ({ favoritePage }) => {
test('[XAT-4458] Navigate into a folder from Favorites', async ({ favoritePage }) => {
await favoritePage.dataTable.performClickFolderOrFileToOpen(favFolderName);
await favoritePage.dataTable.spinnerWaitForReload();
await expect(favoritePage.breadcrumb.currentItem).toHaveText(favFolderName);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -93,13 +93,13 @@ test.describe('File Libraries', () => {
await myLibrariesPage.navigate();
});
test('[C217095] has the correct columns', async ({ myLibrariesPage }) => {
test('[XAT-4416] My Libraries list has the correct columns', async ({ myLibrariesPage }) => {
const expectedColumns = ['Name', 'Description', 'My Role', 'Visibility'];
const actualColumns = Utils.trimArrayElements(await myLibrariesPage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test('[C289905] Library visibility is correctly displayed', async ({ myLibrariesPage }) => {
test('[XAT-4418] My Libraries - Library visibility is correctly displayed', async ({ myLibrariesPage }) => {
const expectedSitesVisibility = {
[userSitePrivate]: Site.VisibilityEnum.PRIVATE,
[userSiteModerated]: Site.VisibilityEnum.MODERATED,
@ -111,7 +111,7 @@ test.describe('File Libraries', () => {
}
});
test('[C289903] User role is correctly displayed', async ({ myLibrariesPage }) => {
test('[XAT-4419] My Libraries - User role is correctly displayed', async ({ myLibrariesPage }) => {
const expectedSitesRoles = {
[adminSite1]: Site.RoleEnum.SiteConsumer,
[adminSite2]: Site.RoleEnum.SiteContributor,
@ -125,7 +125,7 @@ test.describe('File Libraries', () => {
}
});
test('[C217098] Site ID is displayed when two sites have the same name', async ({ myLibrariesPage }) => {
test('[XAT-4420] My Libraries - Site ID is displayed when two sites have the same name', async ({ myLibrariesPage }) => {
const expectedSites = [`${siteName} (${siteId1})`, `${siteName} (${siteId2})`];
const actualSite1 = await myLibrariesPage.dataTable.getRowAllInnerTexts(siteId1);
expect(actualSite1).toContain(expectedSites[0]);
@ -140,14 +140,14 @@ test.describe('File Libraries', () => {
await favoritesLibrariesPage.navigate();
});
test('[C289893] has the correct columns', async ({ favoritesLibrariesPage }) => {
test('[XAT-4423] Favorite Libraries list has the correct columns', async ({ favoritesLibrariesPage }) => {
const expectedColumns = ['Name', 'Description', 'My Role', 'Visibility'];
const actualColumns = Utils.trimArrayElements(await favoritesLibrariesPage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test('[C289897] User can see only his favorite sites', async ({ favoritesLibrariesPage }) => {
test('[XAT-4424] User can see only his favorite sites', async ({ favoritesLibrariesPage }) => {
expect(await favoritesLibrariesPage.dataTable.isItemPresent(adminSite5), `${adminSite5} should not appear`).toBe(false);
});
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -63,7 +63,7 @@ test.describe('Generic errors', () => {
await trashcanApi.emptyTrashcan();
});
test('[C217313] File / folder not found', async ({ personalFiles }) => {
test('[XAT-4516] File / folder not found', async ({ personalFiles }) => {
await actionUser.deleteNodeById(file1Id, false);
await personalFiles.navigate({ remoteUrl: `#/personal-files/${file1Id}` });
@ -73,7 +73,7 @@ test.describe('Generic errors', () => {
);
});
test('[C217314] Permission denied', async ({ personalFiles, loginPage }) => {
test('[XAT-4517] Permission denied', async ({ personalFiles, loginPage }) => {
await loginPage.logoutUser();
await loginPage.loginUser(
{ username: username2, password: username2 },

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -93,7 +93,9 @@ test.describe('Special permissions', () => {
await siteApiAdmin.deleteSites([sitePrivate]);
});
test('[C213173] on Recent Files', async ({ recentFilesPage }) => {
test('[XAT-4445] Recent Files - File recently edited that the user no longer has permission to view is not displayed in the list', async ({
recentFilesPage
}) => {
await recentFilesPage.navigate();
expect(await recentFilesPage.dataTable.getRowsCount(), 'Incorrect number of items').toBeGreaterThanOrEqual(1);
await siteApiAdmin.deleteSiteMember(sitePrivate, username);
@ -101,7 +103,7 @@ test.describe('Special permissions', () => {
expect(await recentFilesPage.dataTable.isItemPresent(fileName), 'Items are still displayed').toBe(false);
});
test('[C213227] on Favorites', async ({ favoritePage }) => {
test('[XAT-4455] Favorites - File is not displayed if the user no longer has permissions on it', async ({ favoritePage }) => {
await favoritePage.navigate();
expect(await favoritePage.dataTable.getRowsCount(), 'Incorrect number of items').toBe(1);
await siteApiAdmin.deleteSiteMember(sitePrivate, username);
@ -109,7 +111,7 @@ test.describe('Special permissions', () => {
expect(await favoritePage.dataTable.isEmpty(), 'Items are still displayed').toBe(true);
});
test('[C213116] on Shared Files', async ({ sharedPage }) => {
test(`[XAT-4433] Shared file that the user doesn't have permission to view is not displayed in the list`, async ({ sharedPage }) => {
await sharedPage.navigate();
await expect(sharedPage.dataTable.getRowByName(sitePrivate)).toBeVisible();
await siteApiAdmin.deleteSiteMember(sitePrivate, username);
@ -117,7 +119,7 @@ test.describe('Special permissions', () => {
await expect(sharedPage.dataTable.getRowByName(sitePrivate)).toHaveCount(0);
});
test('[C290122] on Search Results', async ({ personalFiles, searchPage }) => {
test('[XAT-17775] Search - File is not displayed if the user no longer has permissions on it', async ({ personalFiles, searchPage }) => {
await personalFiles.acaHeader.searchButton.click();
await searchPage.clickSearchButton();
await searchPage.searchOverlay.checkFilesAndFolders();
@ -173,24 +175,33 @@ test.describe('Special permissions', () => {
await adminSiteApiActions.deleteSites([sitePrivate]);
});
test('[C213178] on Recent Files', async ({ recentFilesPage }) => {
test(`[XAT-4452] Recent Files - Location column is empty if the user doesn't have permissions on the file's parent folder`, async ({
recentFilesPage
}) => {
await recentFilesPage.navigate();
expect(await recentFilesPage.dataTable.isItemPresent(fileName)).toBe(true);
expect(await recentFilesPage.dataTable.getItemLocationText(fileName)).toEqual('Unknown');
});
test('[C213672] on Favorites', async ({ favoritePage }) => {
test(`[XAT-4464] Favorites - Location column is empty if the user doesn't have permissions on the file's parent folder`, async ({
favoritePage
}) => {
await favoritePage.navigate();
expect(await favoritePage.dataTable.getRowsCount(), 'Incorrect number of items').toBe(1);
expect(await favoritePage.dataTable.getItemLocationText(fileName)).toEqual('Unknown');
});
test(`[C213668] on Shared Files`, async ({ sharedPage }) => {
test(`[XAT-4441] Shared Files - Location column is empty if the user doesn't have permissions on the file's parent folder`, async ({
sharedPage
}) => {
await sharedPage.navigate();
expect(await sharedPage.dataTable.getItemLocationText(fileName)).toEqual('Unknown');
});
test('[C306868] on Search results', async ({ personalFiles, searchPage }) => {
test(`[XAT-5612] Search Page - Location column is empty if the user doesn't have permissions on the file's parent folder`, async ({
personalFiles,
searchPage
}) => {
await personalFiles.acaHeader.searchButton.click();
await searchPage.clickSearchButton();
await searchPage.searchOverlay.checkFilesAndFolders();

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -53,18 +53,18 @@ test.describe('Personal Files', () => {
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
});
test('[C217142] has the correct columns', async ({ personalFiles }) => {
test('[XAT-4414] Personal Files list displays correct columns', async ({ personalFiles }) => {
const expectedColumns = ['Name', 'Size', 'Modified', 'Modified by', 'Tags'];
const actualColumns = Utils.trimArrayElements(await personalFiles.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test('[C217143] has default sorted column', async ({ personalFiles }) => {
test('[XAT-4415] Personal Files - Default sort order', async ({ personalFiles }) => {
await Utils.reloadPageIfDatatableEmpty(personalFiles);
expect(await personalFiles.dataTable.getSortedColumnHeaderText()).toBe('Name');
});
test('[C213245] redirects to Personal Files on clicking the link from sidebar', async ({ personalFiles }) => {
test('[XAT-4411] User is redirected to Home page on selecting <Personal Files> from any folder location', async ({ personalFiles }) => {
await personalFiles.dataTable.performClickFolderOrFileToOpen(userFolder);
await personalFiles.sidenav.openPanel(SIDEBAR_LABELS.PERSONAL_FILES);
await personalFiles.dataTable.spinnerWaitForReload();
@ -72,7 +72,7 @@ test.describe('Personal Files', () => {
expect(await personalFiles.sidenav.isActive(SIDEBAR_LABELS.PERSONAL_FILES), 'My Libraries link not active').toBe(true);
});
test('[C213246] page loads correctly after browser refresh', async ({ personalFiles }) => {
test('[XAT-4412] Personal Files - List reloads on browser Refresh', async ({ personalFiles }) => {
await personalFiles.reload();
expect(personalFiles.page.url()).toContain(APP_ROUTES.PERSONAL_FILES);
});

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -82,35 +82,35 @@ test.describe('Recent Files', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodeActionsUser, trashcanApi, 'afterAll failed', siteActionsUser, [siteName]);
});
test('[C213168] has the correct columns', async ({ recentFilesPage }) => {
test('[XAT-4442] Recent Files list has the correct columns', async ({ recentFilesPage }) => {
const expectedColumns = ['Name', 'Location', 'Size', 'Modified', 'Tags'];
const actualColumns = Utils.trimArrayElements(await recentFilesPage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test('[C213171] default sorting column', async ({ recentFilesPage }) => {
test('[XAT-4444] Default sort order is by Modified, showing most recently edited files first', async ({ recentFilesPage }) => {
expect(await recentFilesPage.dataTable.getSortedColumnHeaderText()).toBe('Modified');
expect(await recentFilesPage.dataTable.getSortingOrder()).toBe('desc');
});
test(`[C213174] file not displayed if it's been deleted`, async ({ recentFilesPage }) => {
test(`[XAT-4446] File recently edited that is deleted afterwards is not displayed in the list`, async ({ recentFilesPage }) => {
expect(await recentFilesPage.dataTable.isItemPresent(fileName3), `${fileName3} is displayed`).not.toBe(true);
});
test('[C213176] Location column redirect - file in user Home', async ({ recentFilesPage }) => {
test(`[XAT-4448] Clicking on the location link redirects to parent folder - item in User's Home`, async ({ recentFilesPage }) => {
await recentFilesPage.dataTable.clickItemLocation(fileName2);
await recentFilesPage.dataTable.spinnerWaitForReload();
expect(await recentFilesPage.breadcrumb.getAllItems()).toEqual(['Personal Files']);
});
test('[C280486] Location column redirect - file in folder', async ({ recentFilesPage }) => {
test('[XAT-4449] Clicking on the location link redirects to parent folder - item in a folder', async ({ recentFilesPage }) => {
await recentFilesPage.dataTable.clickItemLocation(fileName1);
await recentFilesPage.dataTable.spinnerWaitForReload();
expect(await recentFilesPage.breadcrumb.getAllItems()).toEqual(['Personal Files', folderName]);
});
test('[C280487] Location column redirect - file in site', async ({ recentFilesPage }) => {
test('[XAT-4450] Clicking on the location link redirects to parent folder - item in a site', async ({ recentFilesPage }) => {
await recentFilesPage.dataTable.clickItemLocation(fileSite);
await recentFilesPage.dataTable.spinnerWaitForReload();
expect(await recentFilesPage.breadcrumb.getAllItems()).toEqual(['My Libraries', siteName, folderSite]);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -92,38 +92,38 @@ test.describe('Shared Files', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', siteActionsAdmin, [siteName]);
});
test('[C213113] has the correct columns', async ({ sharedPage }) => {
test('[XAT-4430] Shared files list view has the correct columns', async ({ sharedPage }) => {
const expectedColumns = ['Name', 'Location', 'Size', 'Modified', 'Modified by', 'Shared by', 'Tags'];
const actualColumns = Utils.trimArrayElements(await sharedPage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns);
});
test('[C213115] default sorting column', async ({ sharedPage }) => {
test('[XAT-4432] Default sort order is by Modified date, showing most recently edited files first', async ({ sharedPage }) => {
expect(await sharedPage.dataTable.getSortedColumnHeaderText()).toBe('Modified');
expect(await sharedPage.dataTable.getSortingOrder()).toBe('desc');
});
test(`[C213117] file not displayed if it's been deleted`, async ({ sharedPage }) => {
test(`[XAT-4434] File that was quick shared and deleted afterwards is not displayed in the list`, async ({ sharedPage }) => {
expect(await sharedPage.dataTable.isItemPresent(file2User), `${file2User} is displayed`).toBe(false);
});
test('[C213118] unshared file is not displayed', async ({ sharedPage }) => {
test('[XAT-4435] File that was quick shared and then unshared is not displayed in the list', async ({ sharedPage }) => {
expect(await sharedPage.dataTable.isItemPresent(file3User), `${file3User} is displayed`).toBe(false);
});
test('[C213666] Location column redirect - file in user Home', async ({ sharedPage }) => {
test(`[XAT-4437] Clicking on the location link redirects to parent folder - item in User's Home`, async ({ sharedPage }) => {
await sharedPage.dataTable.clickItemLocation(file4User);
await sharedPage.dataTable.spinnerWaitForReload();
expect(await sharedPage.breadcrumb.getAllItems()).toEqual(['Personal Files']);
});
test('[C280490] Location column redirect - file in folder', async ({ sharedPage }) => {
test('[XAT-4438] Clicking on the location link redirects to parent folder - item in a folder', async ({ sharedPage }) => {
await sharedPage.dataTable.clickItemLocation(file1User);
await sharedPage.dataTable.spinnerWaitForReload();
expect(await sharedPage.breadcrumb.getAllItems()).toEqual(['Personal Files', folderUser]);
});
test('[C280491] Location column redirect - file in site', async ({ sharedPage }) => {
test('[XAT-4439] Clicking on the location link redirects to parent folder - item in a site', async ({ sharedPage }) => {
await sharedPage.dataTable.clickItemLocation(fileAdmin);
await sharedPage.dataTable.spinnerWaitForReload();
expect(await sharedPage.breadcrumb.getAllItems()).toEqual(['My Libraries', siteName]);

View File

@ -1,5 +1,5 @@
/*!
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Alfresco Example Content Application
*
@ -112,6 +112,7 @@ test.describe('Remember sorting', () => {
);
await personalFiles.dataTable.sortBy('Name', 'asc');
await personalFiles.dataTable.spinnerWaitForReload();
await personalFiles.page.waitForTimeout(1000);
initialSortState = await getSortState(personalFiles);
});
@ -122,7 +123,7 @@ test.describe('Remember sorting', () => {
await nodeActionUser2.deleteCurrentUserNodes();
});
test('[C261136] Sort order is retained when navigating to another part of the app', async ({ personalFiles, favoritePage }) => {
test('[XAT-4519] Sort order is retained when navigating to another part of the app', async ({ personalFiles, favoritePage }) => {
await personalFiles.dataTable.sortBy('Name', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
@ -136,20 +137,25 @@ test.describe('Remember sorting', () => {
expect(actualSortData).toEqual(expectedSortData);
});
test('[C589205] Size sort order is retained after viewing a file and closing the viewer', async ({ personalFiles }) => {
await personalFiles.dataTable.sortBy('Size', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
const expectedSortData = await getSortState(personalFiles);
await personalFiles.dataTable.performClickFolderOrFileToOpen(expectedSortData.firstElement);
test('[XAT-4526] Size sort order is retained after viewing a file and closing the viewer', async ({ personalFiles }) => {
await personalFiles.dataTable.performClickFolderOrFileToOpen(initialSortState.firstElement);
await personalFiles.viewer.closeButtonLocator.click();
await personalFiles.waitForPageLoad();
const firstExpectedSortState = await getSortState(personalFiles);
expect(firstExpectedSortState).toEqual(initialSortState);
await personalFiles.dataTable.sortBy('Size', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
await personalFiles.page.waitForTimeout(1000);
const secondExpectedSortData = await getSortState(personalFiles);
await personalFiles.dataTable.performClickFolderOrFileToOpen(secondExpectedSortData.firstElement);
await personalFiles.viewer.closeButtonLocator.click();
await personalFiles.waitForPageLoad();
const actualSortData = await getSortState(personalFiles);
expect(actualSortData).toEqual(expectedSortData);
expect(actualSortData).toEqual(secondExpectedSortData);
});
test('[C261153] Sort order should be remembered separately on each list view', async ({ personalFiles, favoritePage }) => {
test('[XAT-4525] Sort order should be remembered separately on each list view', async ({ personalFiles, favoritePage }) => {
await personalFiles.dataTable.sortBy('Size', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
const personalFilesSortData = await getSortState(personalFiles);
@ -166,8 +172,8 @@ test.describe('Remember sorting', () => {
expect(personalFilesSortDataAfterFavSort).toEqual(personalFilesSortData);
});
test('[C261147] Sort order is retained when user changes the page from pagination', async ({ personalFiles }) => {
const lastFileInArray = testData.user1.files.jpg.slice(-2)[0];
test('[XAT-4523] Sort order is retained when user changes the page from pagination', async ({ personalFiles }) => {
const lastFileInArray = testData.user1.files.jpg.slice(-2).pop();
const firstFileInArray = testData.user1.files.pdf[0];
await personalFiles.pagination.clickOnNextPage();
@ -201,7 +207,7 @@ test.describe('Remember sorting', () => {
folderIds[folderToMove] = (await nodeActionUser1.createFolder(folderToMove)).entry.id;
});
test('[C261138] Sort order is retained when creating a new folder', async ({ personalFiles }) => {
test('[XAT-4521] Sort order is retained when creating a new folder', async ({ personalFiles }) => {
await personalFiles.dataTable.sortBy('Name', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
@ -219,7 +225,7 @@ test.describe('Remember sorting', () => {
expect(actualSortData).toEqual(expectedSortData);
});
test('[C261139] Sort order is retained when moving a file', async ({ personalFiles }) => {
test('[XAT-4522] Sort order is retained when moving a file', async ({ personalFiles }) => {
const expectedSortData = {
sortingColumn: await personalFiles.dataTable.getSortedColumnHeaderText(),
sortingOrder: await personalFiles.dataTable.getSortingOrder(),
@ -234,7 +240,7 @@ test.describe('Remember sorting', () => {
test.describe('User Tests', () => {
test.describe.configure({ mode: 'serial' });
test('[C261137] Size sort order is retained when user logs out and logs back in', async ({ personalFiles, loginPage }) => {
test('[XAT-4520] Size sort order is retained when user logs out and logs back in', async ({ personalFiles, loginPage }) => {
await personalFiles.dataTable.sortBy('Name', 'desc');
await personalFiles.dataTable.spinnerWaitForReload();
const expectedSortData = await getSortState(personalFiles);
@ -249,7 +255,7 @@ test.describe('Remember sorting', () => {
expect(actualSortData).toEqual(expectedSortData);
});
test('[C261150] Sort order is not retained between different users', async ({ personalFiles, loginPage }) => {
test('[XAT-4524] Sort order is retained per user', async ({ personalFiles, loginPage }) => {
await personalFiles.dataTable.sortBy('Size', 'asc');
await personalFiles.dataTable.spinnerWaitForReload();
const expectedSortData = await getSortState(personalFiles);

Some files were not shown because too many files have changed in this diff Show More