Compare commits

..

No commits in common. "develop" and "5.3.0" have entirely different histories.

723 changed files with 9651 additions and 16340 deletions

View File

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

View File

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

View File

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

View File

@ -18,27 +18,28 @@ inputs:
runs: runs:
using: "composite" using: "composite"
steps: steps:
- uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 - uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814
with: with:
version: "3.14.3" version: "3.14.3"
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with: with:
username: ${{ inputs.docker_username }} username: ${{ inputs.docker_username }}
password: ${{ inputs.docker_password }} password: ${{ inputs.docker_password }}
- name: Login to Quay.io - name: Login to Quay.io
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with: with:
registry: quay.io registry: quay.io
username: ${{ inputs.quay_username }} username: ${{ inputs.quay_username }}
password: ${{ inputs.quay_password }} password: ${{ inputs.quay_password }}
- name: Setup cluster - name: Setup cluster
uses: Alfresco/alfresco-build-tools/.github/actions/setup-kind@v8.19.1 uses: Alfresco/alfresco-build-tools/.github/actions/setup-kind@v8.4.0
with: with:
ingress-nginx-ref: controller-v1.8.2 ingress-nginx-ref: controller-v1.8.2
metrics: "true"
- name: Set nginx ingress config - name: Set nginx ingress config
shell: bash shell: bash
@ -63,7 +64,7 @@ runs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
repository: Alfresco/acs-deployment repository: Alfresco/acs-deployment
ref: v9.0.0 ref: v8.6.1
path: acs-deployment path: acs-deployment
- name: Helm install - name: Helm install
@ -72,8 +73,25 @@ runs:
helm dep build acs-deployment/helm/alfresco-content-services && helm dep build acs-deployment/helm/alfresco-content-services &&
helm install acs 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.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 acs-deployment/test/enterprise-integration-test-values.yaml
--values .github/acs-deployment-values-override.yaml --values .github/acs-deployment-values-override.yaml
- name: Wait for pods to be ready - name: Watch Helm deployment
uses: Alfresco/alfresco-build-tools/.github/actions/kubectl-wait@v8.19.1 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

View File

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

View File

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

View File

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

View File

@ -61,12 +61,3 @@ updates:
github-actions: github-actions:
patterns: 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 - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Pull translations from Crowdin - name: Pull translations from Crowdin
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 uses: crowdin/github-action@8dfaf9c206381653e3767e3cb5ea5f08b45f02bf # v2.5.0
with: with:
upload_sources: false upload_sources: false
download_translations: true download_translations: true

View File

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

87
.github/workflows/release-branch.yml vendored Normal file
View File

@ -0,0 +1,87 @@
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,36 +1,10 @@
name: Release workflow name: "Release"
run-name: Release workflow triggered from ${{ github.ref_name }} branch
on: on:
workflow_dispatch: workflow_dispatch:
inputs: 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: dry-run-release:
description: 'Enable dry-run' description: 'enable dry-run'
required: false required: false
type: boolean type: boolean
default: true default: true
@ -38,7 +12,6 @@ on:
branches: branches:
- master - master
- develop - develop
- release/**
env: env:
BASE_URL: ${{ secrets.PIPELINE_ENV_URL }} BASE_URL: ${{ secrets.PIPELINE_ENV_URL }}
@ -47,61 +20,10 @@ env:
PLAYWRIGHT_E2E_HOST: ${{ secrets.PLAYWRIGHT_E2E_HOST }} PLAYWRIGHT_E2E_HOST: ${{ secrets.PLAYWRIGHT_E2E_HOST }}
jobs: 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: publish-docker-registry:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish to Quay" name: "Publish to Quay"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: 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 - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@ -112,8 +34,6 @@ jobs:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
cache: 'npm' cache: 'npm'
- uses: ./.github/actions/setup - uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: Get Tag - name: Get Tag
uses: ./.github/actions/get-image-tag uses: ./.github/actions/get-image-tag
@ -130,15 +50,9 @@ jobs:
dry-run: ${{ inputs.dry-run-release }} dry-run: ${{ inputs.dry-run-release }}
publish-to-dockerhub: publish-to-dockerhub:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish to Dockerhub" name: "Publish to Dockerhub"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: 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 - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@ -149,8 +63,6 @@ jobs:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
cache: 'npm' cache: 'npm'
- uses: ./.github/actions/setup - uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: Get Tag - name: Get Tag
uses: ./.github/actions/get-image-tag uses: ./.github/actions/get-image-tag
@ -167,15 +79,9 @@ jobs:
dry-run: ${{ inputs.dry-run-release }} dry-run: ${{ inputs.dry-run-release }}
publish-git-tag: publish-git-tag:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish Git Tag" name: "Publish Git Tag"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: 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 - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@ -186,9 +92,7 @@ jobs:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
cache: 'npm' cache: 'npm'
- uses: ./.github/actions/setup - uses: ./.github/actions/setup
with: - uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.8.0
npm_tag: ${{ inputs.npm-tag }}
- uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.19.1
with: with:
username: ${{ vars.BOT_GITHUB_USERNAME }} username: ${{ vars.BOT_GITHUB_USERNAME }}
email: ${{ vars.BOT_GITHUB_EMAIL }} email: ${{ vars.BOT_GITHUB_EMAIL }}
@ -201,17 +105,11 @@ jobs:
dry-run: ${{ inputs.dry-run-release }} dry-run: ${{ inputs.dry-run-release }}
publish-libs: publish-libs:
if: ${{ always() }}
needs: [lint, unit-tests]
name: "Publish libs to NPM and GitHub registry" name: "Publish libs to NPM and GitHub registry"
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
packages: write packages: write
steps: 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 - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@ -224,8 +122,6 @@ jobs:
cache: 'npm' cache: 'npm'
- uses: ./.github/actions/setup - uses: ./.github/actions/setup
with:
npm_tag: ${{ inputs.npm-tag }}
- name: publish - name: publish
uses: ./.github/actions/publish-libs uses: ./.github/actions/publish-libs
@ -249,7 +145,7 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Push Source Files to Crowdin - name: Push Source Files to Crowdin
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 uses: crowdin/github-action@8dfaf9c206381653e3767e3cb5ea5f08b45f02bf # v2.5.0
with: with:
upload_sources: true upload_sources: true
upload_sources_args: --delete-obsolete upload_sources_args: --delete-obsolete

2
.nvmrc
View File

@ -1 +1 @@
20.18.1 18

View File

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

View File

@ -12,8 +12,7 @@ Please refer to the public [documentation](https://alfresco-content-app.netlify.
## Compatibility ## Compatibility
| ACA | ADF | ACS | Node | Angular | | 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.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.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.1.x | 7.0.0-alpha.3 | 23.3 | 18.x | 15.x |

View File

@ -41,7 +41,7 @@
"output": "/assets" "output": "/assets"
}, },
{ {
"glob": "pdf.worker.min.mjs", "glob": "pdf.worker.min.js",
"input": "node_modules/pdfjs-dist/build", "input": "node_modules/pdfjs-dist/build",
"output": "/" "output": "/"
}, },
@ -89,19 +89,10 @@
"styles": [ "styles": [
"node_modules/cropperjs/dist/cropper.min.css", "node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.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", "projects/aca-content/src/lib/ui/application.scss",
"app/src/styles.scss" "app/src/styles.scss"
], ],
"scripts": [ "scripts": ["node_modules/pdfjs-dist/build/pdf.js", "node_modules/pdfjs-dist/web/pdf_viewer.js"],
"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, "vendorChunk": true,
"extractLicenses": false, "extractLicenses": false,
"buildOptimizer": false, "buildOptimizer": false,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,7 +40,6 @@ The documentation is divided into the following sections:
| ACA | ADF | ACS | Node | Angular | | 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.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.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.1.x | 7.0.0-alpha.3 | 23.3 | 18.x | 15.x |

View File

@ -1,25 +0,0 @@
---
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

@ -1,40 +0,0 @@
---
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

@ -198,7 +198,7 @@ The button will be visible only when the linked rule evaluates to `true`.
## Application Evaluators ## Application Evaluators
| Ver. | Key | Description | | Ver. | Key | Description |
|--------|-------------------------------------|---------------------------------------------------------------------------------------------------| | ----- | ----------------------------------- | ------------------------------------------------------------------------ |
| 1.7.0 | app.selection.canDelete | User has permission to delete selected node(s). | | 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.canDownload | User can download selected node(s). |
| 1.7.0 | app.selection.notEmpty | At least one node is selected. | | 1.7.0 | app.selection.notEmpty | At least one node is selected. |
@ -236,7 +236,6 @@ The button will be visible only when the linked rule evaluates to `true`.
| 1.8.0 | user.isAdmin | Checks if user is admin. | | 1.8.0 | user.isAdmin | Checks if user is admin. |
| 1.9.0 | app.canShowLogout | Whether logout action should be present or not. | | 1.9.0 | app.canShowLogout | Whether logout action should be present or not. |
| 1.12.0 | app.isLibraryManager | Checks if user is library manager. | | 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 ## Navigation Evaluators
@ -249,7 +248,7 @@ for example mixing `core.every` and `core.not`.
`!app.navigation.isTrashcan` is the opposite of the `app.navigation.isTrashcan`. `!app.navigation.isTrashcan` is the opposite of the `app.navigation.isTrashcan`.
| Version | Key | Description | | 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.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.folder.canUpload | User can upload content to the currently opened folder. |
| 1.7.0 | app.navigation.isTrashcan | User is using the **Trashcan** page. | | 1.7.0 | app.navigation.isTrashcan | User is using the **Trashcan** page. |
@ -270,7 +269,6 @@ for example mixing `core.every` and `core.not`.
| 1.7.0 | app.navigation.isPreview | Current page is **Preview**. | | 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.isPersonalFiles | Current page is **Personal Files**. |
| 1.7.0 | app.navigation.isLibraryFiles | Current page is **Library 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 **Tip:** See the [Registration](./registration) section for more details
on how to register your own entries to be re-used at runtime. 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 : 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 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://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference) -The search Query configuration possibilities refer to the [Full text search reference documentation](https://docs.alfresco.com/search-services/latest/using/)

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 ## Alfresco Full Text Search
The following table describes current support of the The following table describes current support of the
[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 [Alfresco Full Text Search](http://docs.alfresco.com/6.1/concepts/rm-searchsyntax-intro.html) (FTS) syntax
in the Content Application when using **Search Input** component. in the Content Application when using **Search Input** component.
| Feature | Full | Partial | N/A | Details | | Feature | Full | Partial | N/A | Details |
| ---------------------------------------------------------------- | ---- | ------- | --- | ---------------------------------------------------------------------------------- | | ---------------------------------------------------------------- | ---- | ------- | --- | ---------------------------------------------------------------------------------- |
| 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 single term | 1.6 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-single.html) |
| 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 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://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 an exact term | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-exact.html) |
| 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 term expansion | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-term.html) |
| 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 conjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-conjunct.html) |
| 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 disjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-disjunct.html) |
| 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 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://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 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://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference/Search-in-fields) | | Search in fields | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fields.html) |
| 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 wildcards | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-wildcards.html) |
| 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 ranges | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ranges.html) |
| 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 fuzzy matching | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fuzzy.html) |
| 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 proximity | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-proximity.html) |
| 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 boosts | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-boosts.html) |
| 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 grouping | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-grouping.html) |
| 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) | | Search for spans and positions | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-spans.html) |
| 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) | | Escaping characters | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-escaping.html) |
| 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) | | Mixed FTS ID behavior | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ftsid.html) |
| 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 for operator precedence | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-precedence.html) |
| 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 templates | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-querytemplates.html) |
| 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 query literals | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-literals.html) |
| 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) | | Search using date math | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-datemaths.html) |
> **Partial** support means the feature supports basic scenarios > **Partial** support means the feature supports basic scenarios
> and there are edge cases that are not yet fully tested and might not work. > 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: Besides Basic Authentication, you can use Content Application with:
- [Keycloak](https://www.keycloak.org/) - [Keycloak](https://www.keycloak.org/)
- [Identity Service](https://support.hyland.com/r/Alfresco/Alfresco-Process-Services/24.3/Alfresco-Process-Services/Configure/Authentication/Identity-Service) - [Identity Service](https://docs.alfresco.com/identity1.0/concepts/identity-overview.html)
- Kerberos - Kerberos
The application contains reasonable defaults for Single Sign-On (aka SSO) setup. The application contains reasonable defaults for Single Sign-On (aka SSO) setup.

View File

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

View File

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

View File

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

View File

@ -1,43 +0,0 @@
---
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 : 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 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://support.hyland.com/r/Alfresco/Alfresco-Search-Services/2.0/Alfresco-Search-Services/Using/Full-text-search-reference) -The search Query configuration possibilities refer to the [Full text search reference documentation](https://docs.alfresco.com/search-services/latest/using/)
### Add a new search form ### Add a new search form

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1 +1,48 @@
{} {
"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-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *

View File

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

View File

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

View File

@ -1,5 +1,5 @@
/*! /*!
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *
@ -48,7 +48,6 @@ test.describe('Create folders', () => {
const createNewFolderString = 'Create new folder'; const createNewFolderString = 'Create new folder';
const spacesString = ' '; const spacesString = ' ';
const commonFolderName = `create-folder-${Utils.random()}`; const commonFolderName = `create-folder-${Utils.random()}`;
const newFolderName = `new-folder-${Utils.random()}`;
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
test.beforeAll(async () => { test.beforeAll(async () => {
@ -78,7 +77,7 @@ test.describe('Create folders', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed'); await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
}); });
test('[XAT-5078] Create new folder dialog UI check', async () => { test('[C216345] Create new folder dialog check', async () => {
await expect(folderDialog.getLabelText('Name')).toBeVisible(); await expect(folderDialog.getLabelText('Name')).toBeVisible();
await expect(folderDialog.getRequiredMarker('Name')).toBeVisible(); await expect(folderDialog.getRequiredMarker('Name')).toBeVisible();
await expect(folderDialog.folderNameInputLocator).toBeVisible(); await expect(folderDialog.folderNameInputLocator).toBeVisible();
@ -90,7 +89,7 @@ test.describe('Create folders', () => {
await expect(folderDialog.createButton).toBeDisabled(); await expect(folderDialog.createButton).toBeDisabled();
}); });
test('[XAT-5079] Create a folder without a name - Disabled Create button', async () => { test('[C216346] Create a folder without a name', async () => {
await folderDialog.folderNameInputLocator.fill(randomFolderName); await folderDialog.folderNameInputLocator.fill(randomFolderName);
await expect(folderDialog.folderNameInputLocator).toHaveValue(randomFolderName); await expect(folderDialog.folderNameInputLocator).toHaveValue(randomFolderName);
await expect(folderDialog.createButton).toBeEnabled(); await expect(folderDialog.createButton).toBeEnabled();
@ -102,14 +101,14 @@ test.describe('Create folders', () => {
await expect(folderDialog.createButton).toBeDisabled(); await expect(folderDialog.createButton).toBeDisabled();
}); });
test('[XAT-5081] Create folder when a name that ends with a dot "."', async () => { test('[C216348] Create folder when a name that ends with a dot "."', async () => {
await folderDialog.folderNameInputLocator.fill(randomFolderName + '.'); await folderDialog.folderNameInputLocator.fill(randomFolderName + '.');
await expect(folderDialog.createButton).toBeDisabled(); await expect(folderDialog.createButton).toBeDisabled();
await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantEndWithAPeriod); await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantEndWithAPeriod);
}); });
test('[XAT-5080] Create folder with a name containing special characters', async () => { test('[C216347] 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']; 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) { for (const folderName of namesWithSpecialChars) {
await folderDialog.folderNameInputLocator.fill(folderName); await folderDialog.folderNameInputLocator.fill(folderName);
@ -119,21 +118,21 @@ test.describe('Create folders', () => {
} }
}); });
test('[XAT-5082] Create a folder with a name containing only spaces', async () => { test('[C280406] Create a folder with a name containing only spaces', async () => {
await folderDialog.folderNameInputLocator.fill(spacesString); await folderDialog.folderNameInputLocator.fill(spacesString);
await expect(folderDialog.createButton).toBeDisabled(); await expect(folderDialog.createButton).toBeDisabled();
await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantContainOnlySpaces); await expect(folderDialog.folderNameInputHint).toContainText(errorStrings.folderNameCantContainOnlySpaces);
}); });
test('[XAT-5083] Cancel folder creation', async ({ personalFiles }) => { test('[C216349] Cancel folder creation', async ({ personalFiles }) => {
await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeVisible(); await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeVisible();
await folderDialog.folderNameInputLocator.fill(randomFolderName); await folderDialog.folderNameInputLocator.fill(randomFolderName);
await folderDialog.cancelButton.click(); await folderDialog.cancelButton.click();
await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeHidden(); await expect(personalFiles.page.getByRole(dialogString, { name: createNewFolderString })).toBeHidden();
}); });
test('[XAT-5084] Duplicate folder name error', async ({ personalFiles }) => { test('[C216350] Duplicate folder name error', async ({ personalFiles }) => {
const folderSnackBar = personalFiles.snackBar; const folderSnackBar = personalFiles.snackBar;
await folderDialog.createNewFolderDialog(commonFolderName); await folderDialog.createNewFolderDialog(commonFolderName);
@ -146,30 +145,22 @@ test.describe('Create folders', () => {
folderTable = personalFiles.dataTable; folderTable = personalFiles.dataTable;
}); });
test('[XAT-5077] Create folder when pressing OK - with name and no description', async () => { test('[C216341] Create a folder with name only', async () => {
await folderDialog.createNewFolderDialog(randomFolderName); await folderDialog.createNewFolderDialog(randomFolderName);
await expect(folderTable.getRowByName(randomFolderName)).toBeVisible(); await expect(folderTable.getRowByName(randomFolderName)).toBeVisible();
}); });
test('[XAT-5076] Create folder when pressing OK - with name, title and description', async () => { test('[C216340] Create a folder with name, title and description', async () => {
await folderDialog.createNewFolderDialog(randomFolderName, randomFolderTitle, randomFolderDescription); await folderDialog.createNewFolderDialog(randomFolderName, randomFolderTitle, randomFolderDescription);
await expect(folderTable.getCellLinkByName(randomFolderName)).toHaveAttribute('title', randomFolderTitle + `\n` + randomFolderDescription); await expect(folderTable.getCellLinkByName(randomFolderName)).toHaveAttribute('title', randomFolderTitle + `\n` + randomFolderDescription);
}); });
test('[XAT-5085] Folder created after trimmed ending spaces from a folder name', async () => { test('[C216351] Folder created after trimmed ending spaces from a folder name', async () => {
await folderDialog.createNewFolderDialog(randomFolderName + spacesString); await folderDialog.createNewFolderDialog(randomFolderName + spacesString);
await expect(folderTable.getRowByName(randomFolderName)).toBeVisible(); 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-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *
@ -94,7 +94,7 @@ test.describe('Create Libraries ', () => {
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', sitesApi, createdLibrariesIds); await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', sitesApi, createdLibrariesIds);
}); });
test('[XAT-5118] Create Library dialog UI check', async () => { test('[C280024] Create Library dialog UI', async () => {
await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible(); await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible();
await expect(libraryDialog.getLabelText(libraryNameLabel)).toBeVisible(); await expect(libraryDialog.getLabelText(libraryNameLabel)).toBeVisible();
await expect(libraryDialog.getRequiredMarker(libraryNameLabel)).toBeVisible(); await expect(libraryDialog.getRequiredMarker(libraryNameLabel)).toBeVisible();
@ -115,7 +115,7 @@ test.describe('Create Libraries ', () => {
libraryBreadcrumb = myLibrariesPage.breadcrumb; libraryBreadcrumb = myLibrariesPage.breadcrumb;
}); });
test('[XAT-5119] Create a public library', async ({ myLibrariesPage }) => { test('[C280025] Create a public library', async ({ myLibrariesPage }) => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName); await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await expect(libraryDialog.getLabelText(libraryNameLabel)).toHaveValue(randomLibraryName); await expect(libraryDialog.getLabelText(libraryNameLabel)).toHaveValue(randomLibraryName);
await expect(libraryDialog.getLabelText(libraryIdLabel)).toHaveValue(randomLibraryName); await expect(libraryDialog.getLabelText(libraryIdLabel)).toHaveValue(randomLibraryName);
@ -128,7 +128,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryName); createdLibrariesIds.push(randomLibraryName);
}); });
test('[XAT-5120] Create a moderated library', async ({ myLibrariesPage }) => { test('[C289880] Create a moderated library', async ({ myLibrariesPage }) => {
await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, moderatedVisibility); await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, moderatedVisibility);
await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible(); await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible();
@ -139,7 +139,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId); createdLibrariesIds.push(randomLibraryId);
}); });
test('[XAT-5121] Create a private library', async ({ myLibrariesPage }) => { test('[C289881] Create a private library', async ({ myLibrariesPage }) => {
await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, privateVisibility); await libraryDialog.createLibraryWithNameAndId(randomLibraryName, randomLibraryId, null, privateVisibility);
await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible(); await expect(libraryBreadcrumb.getItemByTitle(randomLibraryName)).toBeVisible();
@ -149,7 +149,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId); createdLibrariesIds.push(randomLibraryId);
}); });
test('[XAT-5122] Create a library with a given ID and description', async ({ myLibrariesPage }) => { test('[C289882] Create a library with a given ID and description', async ({ myLibrariesPage }) => {
const libraryViewDetails = myLibrariesPage.acaHeader.viewDetails; const libraryViewDetails = myLibrariesPage.acaHeader.viewDetails;
const libraryDetails = myLibrariesPage.libraryDetails; const libraryDetails = myLibrariesPage.libraryDetails;
@ -169,7 +169,7 @@ test.describe('Create Libraries ', () => {
createdLibrariesIds.push(randomLibraryId); createdLibrariesIds.push(randomLibraryId);
}); });
test('[XAT-5126] Create Library - Cancel button', async () => { test('[C280029] Cancel button', async () => {
await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible(); await expect(libraryDialog.getDialogTitle(libraryDialogTitle)).toBeVisible();
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName); await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.cancelButton.click(); await libraryDialog.cancelButton.click();
@ -178,7 +178,7 @@ test.describe('Create Libraries ', () => {
await expect(libraryTable.getRowByName(randomLibraryName)).toHaveCount(0); await expect(libraryTable.getRowByName(randomLibraryName)).toHaveCount(0);
}); });
test('[XAT-5127] Create multiple sites with same name but different IDs', async ({ myLibrariesPage }) => { test('[C280030] Create 2 libraries with same name but different IDs', async ({ myLibrariesPage }) => {
const libraryName = commonLibraryName + ' (' + commonLibraryName + ')'; const libraryName = commonLibraryName + ' (' + commonLibraryName + ')';
const libraryName2 = commonLibraryName + ' (' + randomLibraryId + ')'; const libraryName2 = commonLibraryName + ' (' + randomLibraryId + ')';
@ -193,7 +193,7 @@ test.describe('Create Libraries ', () => {
}); });
}); });
test('[XAT-5123] Library ID cannot contain special characters', async () => { test('[C280026] Library ID cannot contain special characters', async () => {
const idsWithSpecialChars = [ const idsWithSpecialChars = [
'a!a', 'a!a',
'a@a', 'a@a',
@ -226,7 +226,7 @@ test.describe('Create Libraries ', () => {
} }
}); });
test('[XAT-5124] Duplicate library ID', async () => { test('[C280027] Duplicate library ID', async () => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName); await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.getLabelText(libraryIdLabel).clear(); await libraryDialog.getLabelText(libraryIdLabel).clear();
await libraryDialog.getLabelText(libraryIdLabel).fill(commonLibraryName); await libraryDialog.getLabelText(libraryIdLabel).fill(commonLibraryName);
@ -237,7 +237,7 @@ test.describe('Create Libraries ', () => {
expect(await libraryDialog.isErrorMessageDisplayed(libraryErrors.libraryIdIsNotAvailable), errorMessageNotPresent).toBe(true); expect(await libraryDialog.isErrorMessageDisplayed(libraryErrors.libraryIdIsNotAvailable), errorMessageNotPresent).toBe(true);
}); });
test('[XAT-5125] Create library using the ID of a library from the Trashcan', async () => { test('[C280028] Create library using the ID of a library from the Trashcan', async () => {
await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName); await libraryDialog.getLabelText(libraryNameLabel).fill(randomLibraryName);
await libraryDialog.getLabelText(libraryIdLabel).clear(); await libraryDialog.getLabelText(libraryIdLabel).clear();
await libraryDialog.getLabelText(libraryIdLabel).fill(commonTrashLibraryName); await libraryDialog.getLabelText(libraryIdLabel).fill(commonTrashLibraryName);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,26 +0,0 @@
{
"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

@ -1,42 +0,0 @@
/*!
* 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

@ -1,31 +0,0 @@
{
"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

@ -1,195 +0,0 @@
/*!
* 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

@ -1,15 +0,0 @@
{
"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

@ -1,15 +0,0 @@
{
"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-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
/*! /*!
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *
@ -38,6 +38,46 @@ test.describe('Empty list views', () => {
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); 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) { async function openEmptyTab(searchPage: SearchPage, tab: string, emptyStateTitle: string, emptyStateSubtitle: string) {
await searchPage.sidenav.openPanel(tab); await searchPage.sidenav.openPanel(tab);
await searchPage.dataTable.spinnerWaitForReload(); await searchPage.dataTable.spinnerWaitForReload();
@ -59,14 +99,7 @@ test.describe('Empty list views', () => {
expect(await personalFiles.pagination.isNextButtonPresent()).toBeFalsy(); expect(await personalFiles.pagination.isNextButtonPresent()).toBeFalsy();
} }
test('[XAT-4402] Empty My Libraries', async ({ myLibrariesPage }) => { test(`[C289911] empty ${SIDEBAR_LABELS.FAVORITE_LIBRARIES}`, async ({ searchPage }) => {
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( await openEmptyTab(
searchPage, searchPage,
SIDEBAR_LABELS.FAVORITE_LIBRARIES, SIDEBAR_LABELS.FAVORITE_LIBRARIES,
@ -75,7 +108,7 @@ test.describe('Empty list views', () => {
); );
}); });
test(`[XAT-4405] Empty Recent Files`, async ({ searchPage }) => { test(`[C213169] empty ${SIDEBAR_LABELS.RECENT_FILES}`, async ({ searchPage }) => {
await openEmptyTab( await openEmptyTab(
searchPage, searchPage,
SIDEBAR_LABELS.RECENT_FILES, SIDEBAR_LABELS.RECENT_FILES,
@ -84,51 +117,31 @@ test.describe('Empty list views', () => {
); );
}); });
test(`[XAT-4406] Empty Favorites`, async ({ searchPage }) => { test(`[C280133] empty ${SIDEBAR_LABELS.FAVORITES}`, async ({ searchPage }) => {
await openEmptyTab(searchPage, SIDEBAR_LABELS.FAVORITES, 'No favorite files or folders', 'Favorite items that you want to easily find later.'); await openEmptyTab(searchPage, SIDEBAR_LABELS.FAVORITES, 'No favorite files or folders', 'Favorite items that you want to easily find later.');
}); });
test('[XAT-4581] Trash - Pagination control is not displayed on empty page load', async ({ trashPage }) => { test(`[C280111] ${SIDEBAR_LABELS.FAVORITES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
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); await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.FAVORITES, personalFiles);
}); });
test(`[XAT-4537] My Libraries - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => { test(`[C280084] ${SIDEBAR_LABELS.MY_LIBRARIES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.MY_LIBRARIES, personalFiles); await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.MY_LIBRARIES, personalFiles);
}); });
test(`[XAT-4546] Favorite Libraries - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => { test(`[C291873] ${SIDEBAR_LABELS.FAVORITE_LIBRARIES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.FAVORITE_LIBRARIES, personalFiles); await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.FAVORITE_LIBRARIES, personalFiles);
}); });
test(`[XAT-4528] Personal Files - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => { test(`[C280075] ${SIDEBAR_LABELS.PERSONAL_FILES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.PERSONAL_FILES, personalFiles); await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.PERSONAL_FILES, personalFiles);
}); });
test(`[XAT-4564] Recent Files - Pagination control is not displayed on empty page load`, async ({ searchPage, personalFiles }) => { test(`[C280102] ${SIDEBAR_LABELS.RECENT_FILES} - pagination controls not displayed`, async ({ searchPage, personalFiles }) => {
await checkPaginationForTabs(searchPage, SIDEBAR_LABELS.RECENT_FILES, 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-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
* *
* Alfresco Example Content Application * Alfresco Example Content Application
* *
@ -90,21 +90,21 @@ test.describe('Favorites Files', () => {
await favoritePage.navigate(); await favoritePage.navigate();
}); });
test('[XAT-4454] Favorites list has the correct columns', async ({ favoritePage }) => { test('[C280482] has the correct columns', async ({ favoritePage }) => {
const expectedColumns = ['Name', 'Location', 'Size', 'Modified', 'Modified by', 'Tags']; const expectedColumns = ['Name', 'Location', 'Size', 'Modified', 'Modified by', 'Tags'];
const actualColumns = Utils.trimArrayElements(await favoritePage.dataTable.getColumnHeaders()); const actualColumns = Utils.trimArrayElements(await favoritePage.dataTable.getColumnHeaders());
expect(actualColumns).toEqual(expectedColumns); expect(actualColumns).toEqual(expectedColumns);
}); });
test(`[XAT-4456] Deleted favorite files and folders do not appear in the list`, async ({ favoritePage }) => { test(`[C213228] deleted favorite file does not appear`, async ({ favoritePage }) => {
expect(await favoritePage.dataTable.isItemPresent(fileName3), `${fileName3} is displayed`).not.toBe(true); expect(await favoritePage.dataTable.isItemPresent(fileName3), `${fileName3} is displayed`).not.toBe(true);
}); });
test(`[XAT-4457] Favorite files and folders restored from trashcan are displayed in the list`, async ({ favoritePage }) => { test(`[C213229] file is displayed after it is restored from Trashcan`, async ({ favoritePage }) => {
expect(await favoritePage.dataTable.isItemPresent(fileName4), `${fileName4} not displayed`).toBe(true); expect(await favoritePage.dataTable.isItemPresent(fileName4), `${fileName4} not displayed`).toBe(true);
}); });
test('[XAT-4459] Location column displays the parent folder of the file as link', async ({ favoritePage }) => { test('[C213231] Location column displays the parent folder of the files', async ({ favoritePage }) => {
expect(await favoritePage.dataTable.getItemLocationText(fileName2)).toEqual(parentFolder); expect(await favoritePage.dataTable.getItemLocationText(fileName2)).toEqual(parentFolder);
expect(await favoritePage.dataTable.getItemLocationText(favFolderName)).toEqual('Personal Files'); expect(await favoritePage.dataTable.getItemLocationText(favFolderName)).toEqual('Personal Files');
expect(await favoritePage.dataTable.getItemLocationTooltip(fileName2)).toEqual(`Personal Files/${parentFolder}`); 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}`); expect(await favoritePage.dataTable.getItemLocationTooltip(fileName1)).toContain(`${siteName}`);
}); });
test(`[XAT-4460] Clicking on the location link redirects to parent folder - item in User's Home`, async ({ favoritePage }) => { test('[C213650] Location column redirect - item in user Home', async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(favFolderName); await favoritePage.dataTable.clickItemLocation(favFolderName);
await favoritePage.dataTable.spinnerWaitForReload(); await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files']); expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files']);
}); });
test('[XAT-4461] Clicking on the location link redirects to parent folder - item in a folder', async ({ favoritePage }) => { test('[C280484] Location column redirect - file in folder', async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(fileName2); await favoritePage.dataTable.clickItemLocation(fileName2);
await favoritePage.dataTable.spinnerWaitForReload(); await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files', parentFolder]); expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['Personal Files', parentFolder]);
}); });
test('[XAT-4462] Clicking on the location link redirects to parent folder - item in a site', async ({ favoritePage }) => { test('[C280485] Location column redirect - file in site', async ({ favoritePage }) => {
await favoritePage.dataTable.clickItemLocation(fileName1); await favoritePage.dataTable.clickItemLocation(fileName1);
await favoritePage.dataTable.spinnerWaitForReload(); await favoritePage.dataTable.spinnerWaitForReload();
expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['My Libraries', siteName]); expect(await favoritePage.breadcrumb.getAllItems()).toEqual(['My Libraries', siteName]);
}); });
test('[XAT-4458] Navigate into a folder from Favorites', async ({ favoritePage }) => { test('[C213230] Navigate into folder from Favorites', async ({ favoritePage }) => {
await favoritePage.dataTable.performClickFolderOrFileToOpen(favFolderName); await favoritePage.dataTable.performClickFolderOrFileToOpen(favFolderName);
await favoritePage.dataTable.spinnerWaitForReload(); await favoritePage.dataTable.spinnerWaitForReload();
await expect(favoritePage.breadcrumb.currentItem).toHaveText(favFolderName); await expect(favoritePage.breadcrumb.currentItem).toHaveText(favFolderName);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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