diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..5e4fa3e5
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,16 @@
+version: 2
+updates:
+ - package-ecosystem: npm
+ directory: "/tests/UI"
+ schedule:
+ interval: weekly
+ day: monday
+ time: "04:00"
+ open-pull-requests-limit: 10
+ target-branch: dev
+ reviewers:
+ - "PrestaShop/qa-automation"
+ labels:
+ - "dependencies"
+ - "E2E Tests"
+ - "TE"
diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml
index 4f9f24e4..7cd88851 100644
--- a/.github/workflows/build-release.yml
+++ b/.github/workflows/build-release.yml
@@ -23,7 +23,7 @@ jobs:
with:
node-version: 14.x
- - run: npm install
+ - run: npm ci
- name: Build PrestaShop assets
run: |
@@ -61,7 +61,7 @@ jobs:
if: github.event_name == 'push' && github.event.ref == 'refs/heads/master'
steps:
- name: Download artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4.1.7
with:
name: ${{ github.event.repository.name }}
diff --git a/.github/workflows/ui-test.yml b/.github/workflows/ui-test.yml
new file mode 100644
index 00000000..6492ee86
--- /dev/null
+++ b/.github/workflows/ui-test.yml
@@ -0,0 +1,160 @@
+name: UI Tests
+on:
+ ## Check each PR
+ push:
+ pull_request:
+ ## Manual execution on branch
+ workflow_dispatch:
+ ## Nightly
+ ### Needs secrets
+ #### GC_PROJECT_ID
+ #### GC_SERVICE_KEY
+ #### NIGHTLY_TOKEN
+ schedule:
+ - cron: '0 0 * * *'
+
+env:
+ CAMPAIGN: 'blockwishlist'
+
+jobs:
+ ui_test:
+ name: UI Tests
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - PS_VERSION: '8.0.5'
+ PHP_VERSION: '8.1'
+ - PS_VERSION: '8.1.7'
+ PHP_VERSION: '8.1'
+ - PS_VERSION: 'nightly'
+ PHP_VERSION: '8.2'
+
+ env:
+ PS_VERSION: ${{ matrix.PS_VERSION }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+
+ - name: Build
+ run: npm install && npm run build
+
+ - name: Build ZIP
+ run: |
+ cd ..
+ zip -r ${{ github.event.repository.name }}.zip ${{ github.event.repository.name }}
+ cd ${{ github.event.repository.name }}
+
+ - name: Start containers
+ working-directory: tests/UI/
+ env:
+ PS_VERSION: ${{ matrix.PS_VERSION }}
+ PHP_VERSION: ${{ matrix.PHP_VERSION }}
+ run: |
+ docker compose -f "docker-compose.yml" up -d --build
+ bash -c 'while [[ "$(curl -L -s -o /dev/null -w %{http_code} http://localhost/en/)" != "200" ]]; do sleep 5; done'
+
+ - name: Install dependencies
+ working-directory: tests/UI/
+ run: npm ci
+
+ - name: Install Playwright Browsers
+ working-directory: tests/UI/
+ run: npx playwright install chromium --with-deps
+
+ - name: Run Playwright tests
+ working-directory: tests/UI/
+ run: npx playwright test
+
+ - name: Upload artifact report
+ uses: actions/upload-artifact@v4
+ with:
+ name: playwright-report-${{ matrix.PS_VERSION }}
+ path: tests/UI/report.json
+
+ - name: Export Docker errors
+ working-directory: tests/UI/
+ if: always()
+ run: docker compose logs --no-color >& docker-compose.log
+
+ - name: Upload artifact logs
+ uses: actions/upload-artifact@v4
+ if: always()
+ with:
+ name: playwright-logs-${{ matrix.PS_VERSION }}
+ path: |
+ tests/UI/reports/
+ tests/UI/docker-compose.log
+
+ nightly:
+ name: Nightly Report
+ if: ${{ github.event_name == 'schedule' }}
+ needs:
+ - ui_test
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - PS_VERSION: '8.0.5'
+ PHP_VERSION: '8.1'
+ - PS_VERSION: '8.1.7'
+ PHP_VERSION: '8.1'
+ - PS_VERSION: 'nightly'
+ PHP_VERSION: '8.2'
+
+ env:
+ PS_VERSION: ${{ matrix.PS_VERSION }}
+ PHP_VERSION: ${{ matrix.PHP_VERSION }}
+
+ permissions:
+ contents: 'read'
+ id-token: 'write'
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Download report
+ uses: actions/download-artifact@v4.1.7
+ with:
+ name: playwright-report-${{ matrix.PS_VERSION }}
+ path: tests/UI/
+
+ - name: "Nightly : Rename file"
+ working-directory: tests/UI/
+ run: |
+ mkdir -p nightly
+ REPORT_NAME="${{ env.CAMPAIGN }}_$(date +%Y-%m-%d)-${{ matrix.PS_VERSION }}"
+ mv report.json nightly/${REPORT_NAME}.json
+
+ - name: "Nightly : Auth GCP"
+ uses: google-github-actions/auth@v1
+ with:
+ credentials_json: ${{ secrets.GC_SERVICE_KEY }}
+ project_id: ${{ secrets.GC_PROJECT_ID }}
+
+ - name: "Nightly : Setup GCP"
+ uses: google-github-actions/setup-gcloud@v1
+
+ - name: "Nightly : Upload to Google Cloud Storage (GCS)"
+ working-directory: tests/UI/
+ run: gsutil cp -r "nightly/**" gs://prestashop-core-nightly/reports
+
+ - name: "Nightly : Push Report"
+ run: |
+ REPORT_NAME="${{ env.CAMPAIGN }}_$(date +%Y-%m-%d)-${{ matrix.PS_VERSION }}"
+ curl -v "https://api-nightly.prestashop-project.org/import/report/playwright?token=${{ secrets.NIGHTLY_TOKEN }}&filename=${REPORT_NAME}.json&campaign=${{ env.CAMPAIGN }}&platform=chromium"
diff --git a/.gitignore b/.gitignore
index 83006710..ce688301 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,9 @@ node_modules
# mac
.DS_Store
+
+## UI Tests
+/tests/UI/.env
+/tests/UI/node_modules/
+/tests/UI/report.json
+/tests/UI/reports/
diff --git a/Makefile b/Makefile
index 47719c9e..2b547d8d 100644
--- a/Makefile
+++ b/Makefile
@@ -6,11 +6,11 @@ db: docker-build
docker-build: build-back build-front
build-back:
- docker-compose run --rm php sh -c "composer install"
+ docker compose run --rm php sh -c "composer install"
build-back-prod:
- docker-compose run --rm php sh -c "composer install --no-dev -o"
+ docker compose run --rm php sh -c "composer install --no-dev -o"
build-front:
- docker-compose run --rm node sh -c "npm install"
- docker-compose run --rm node sh -c "npm run build"
+ docker compose run --rm node sh -c "npm install"
+ docker compose run --rm node sh -c "npm run build"
diff --git a/_dev/front/js/components/Button/Button.vue b/_dev/front/js/components/Button/Button.vue
index f59f4f19..c7f91cb8 100644
--- a/_dev/front/js/components/Button/Button.vue
+++ b/_dev/front/js/components/Button/Button.vue
@@ -102,7 +102,7 @@
EventBus.$emit('showAddToWishList', {
detail: {
productId: this.productId,
- productAttributeId: parseInt(this.productAttributeId, 10),
+ productAttributeId: parseInt(this.idProductAttribute, 10),
forceOpen: true,
quantity: quantity ? parseInt(quantity.value, 10) : 0,
},
@@ -113,7 +113,7 @@
variables: {
productId: this.productId,
url: this.url,
- productAttributeId: this.productAttributeId,
+ productAttributeId: this.idProductAttribute,
listId: this.idList ? this.idList : this.listId,
},
});
@@ -140,7 +140,7 @@
EventBus.$on('addedToWishlist', (event) => {
if (
event.detail.productId === this.productId
- && parseInt(event.detail.productAttributeId, 10) === this.productAttributeId
+ && parseInt(event.detail.productAttributeId, 10) === this.idProductAttribute
) {
this.isChecked = true;
this.idList = event.detail.listId;
@@ -150,7 +150,7 @@
// eslint-disable-next-line
const items = productsAlreadyTagged.filter(
(e) => parseInt(e.id_product, 10) === this.productId
- && parseInt(e.id_product_attribute, 10) === this.productAttributeId,
+ && parseInt(e.id_product_attribute, 10) === this.idProductAttribute,
);
if (items.length > 0) {
@@ -176,7 +176,7 @@
const itemsFiltered = productsAlreadyTagged.filter(
(e) => parseInt(e.id_product, 10) === this.productId
&& e.quantity.toString() === quantity.value
- && parseInt(e.id_product_attribute, 10) === this.productAttributeId,
+ && parseInt(e.id_product_attribute, 10) === this.idProductAttribute,
);
if (itemsFiltered.length > 0) {
diff --git a/_dev/front/js/components/Create/Create.vue b/_dev/front/js/components/Create/Create.vue
index 1656d96b..03a75784 100644
--- a/_dev/front/js/components/Create/Create.vue
+++ b/_dev/front/js/components/Create/Create.vue
@@ -139,21 +139,3 @@
},
};
-
-
diff --git a/_dev/front/js/components/Delete/Delete.vue b/_dev/front/js/components/Delete/Delete.vue
index 3ccaf7c6..ecf28ebd 100644
--- a/_dev/front/js/components/Delete/Delete.vue
+++ b/_dev/front/js/components/Delete/Delete.vue
@@ -156,22 +156,3 @@
},
};
-
-
diff --git a/_dev/front/js/components/Login/Login.vue b/_dev/front/js/components/Login/Login.vue
index a5e9fb89..56647585 100644
--- a/_dev/front/js/components/Login/Login.vue
+++ b/_dev/front/js/components/Login/Login.vue
@@ -65,17 +65,3 @@
},
};
-
-
diff --git a/_dev/front/js/components/Product/Product.vue b/_dev/front/js/components/Product/Product.vue
index 764faeeb..f757b29d 100644
--- a/_dev/front/js/components/Product/Product.vue
+++ b/_dev/front/js/components/Product/Product.vue
@@ -116,23 +116,23 @@