Skip to content

test(core): add unit tests for contains-products promotion condition #6998

test(core): add unit tests for contains-products promotion condition

test(core): add unit tests for contains-products promotion condition #6998

Workflow file for this run

name: Build & Test
on:
workflow_dispatch:
push:
branches:
- master
- minor
- major
paths:
- 'packages/**'
- 'package.json'
- 'bun.lock'
- 'bunfig.toml'
pull_request:
branches:
- master
- major
- minor
env:
CI: true
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
# NOTE: The Redis service definition is duplicated across the e2e-* jobs
# because GitHub Actions does not support YAML anchors or service definition reuse.
# When updating the service (version bumps, env changes, health checks), update ALL four copies:
# e2e-sqljs, e2e-mariadb, e2e-mysql, e2e-postgres.
jobs:
detect-changes:
name: detect changes
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
packages: ${{ steps.check.outputs.packages }}
dashboard: ${{ steps.check.outputs.dashboard }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
with:
fetch-depth: 0
- name: Detect changed paths
id: check
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "packages=true" >> "$GITHUB_OUTPUT"
echo "dashboard=true" >> "$GITHUB_OUTPUT"
exit 0
fi
base="${{ github.event.pull_request.base.sha }}"
if [ -z "$base" ]; then base="${{ github.event.before }}"; fi
if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ]; then
base="HEAD~1"
fi
changed=$(git diff --name-only "$(git merge-base "$base" HEAD)" HEAD)
if echo "$changed" | grep -qE '^(packages/|package\.json|bun\.lock|bunfig\.toml)'; then
echo "packages=true" >> "$GITHUB_OUTPUT"
else
echo "packages=false" >> "$GITHUB_OUTPUT"
fi
if echo "$changed" | grep -q '^packages/dashboard/'; then
echo "dashboard=true" >> "$GITHUB_OUTPUT"
else
echo "dashboard=false" >> "$GITHUB_OUTPUT"
fi
codegen:
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
uses: ./.github/workflows/codegen.yml
build:
name: build
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
- name: Build
run: bun run build
unit-tests:
name: unit tests
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
node: [20.x, 22.x, 24.x]
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node }}
- name: Build
run: bunx lerna run ci
- name: Unit tests
run: bun run test
dashboard-i18n:
name: dashboard i18n sync
needs: detect-changes
if: needs.detect-changes.outputs.dashboard == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
- name: Check i18n catalogs are in sync
working-directory: packages/dashboard
run: bash scripts/check-i18n-sync.sh
dashboard-e2e:
name: dashboard e2e (${{ matrix.shard }})
needs: detect-changes
if: needs.detect-changes.outputs.dashboard == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
- name: Build
run: bunx lerna run ci --scope @vendure/testing --include-dependencies
- name: Cache Playwright browsers
id: playwright-cache
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/.cache/ms-playwright
# The key version prefix (v2) lets us evict caches poisoned by an
# earlier incomplete browser install. No restore-keys: a prefix
# fallback would drag stale browser binaries forward on a Playwright
# version bump, and an exact hit on that poisoned cache then skips
# the install step indefinitely.
key: playwright-v2-${{ runner.os }}-${{ hashFiles('**/bun.lock') }}
- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
# chromium-headless-shell is a separate download since Playwright 1.49
# and is what headless CI runs actually launch.
run: bunx playwright install chromium chromium-headless-shell
working-directory: packages/dashboard
- name: Install Playwright system deps
run: bunx playwright install-deps chromium
working-directory: packages/dashboard
- name: Dashboard e2e tests
run: bun run e2e:pw -- --shard=${{ matrix.shard }}/4
working-directory: packages/dashboard
sonarqube:
name: SonarQube
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true' && (github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
with:
fetch-depth: 0
- name: SonarQube Scan
uses: SonarSource/sonarqube-scan-action@fd88b7d7ccbaefd23d8f36f73b59db7a3d246602 # v6
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
e2e-sqljs:
name: e2e (sqljs)
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
services:
redis:
image: redis:7.4.1
ports:
- 6379
strategy:
fail-fast: false
matrix:
node: ${{ github.event_name == 'pull_request' && fromJSON('["22.x"]') || fromJSON('["20.x", "22.x", "24.x"]') }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node }}
- name: Build
run: bunx lerna run ci
- name: e2e tests
env:
E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
DB: sqljs
run: bun run e2e
e2e-mariadb:
name: e2e (mariadb)
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
services:
mariadb:
# With v11.6.2+, a default was changed, (https://mariadb.com/kb/en/innodb-system-variables/#innodb_snapshot_isolation)
# which causes e2e test failures currently
image: mariadb:11.5
env:
MARIADB_ROOT_PASSWORD: password
ports:
- 3306
options: --health-cmd="mariadb-admin ping -h localhost -u vendure -ppassword" --health-interval=10s --health-timeout=5s --health-retries=3
redis:
image: redis:7.4.1
ports:
- 6379
strategy:
fail-fast: false
matrix:
node: ${{ github.event_name == 'pull_request' && fromJSON('["22.x"]') || fromJSON('["20.x", "22.x", "24.x"]') }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node }}
- name: Build
run: bunx lerna run ci
- name: e2e tests
env:
E2E_MARIADB_PORT: ${{ job.services.mariadb.ports['3306'] }}
E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
DB: mariadb
run: bun run e2e
e2e-mysql:
name: e2e (mysql)
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
services:
mysql:
image: vendure/mysql-8-native-auth:latest
env:
MYSQL_ROOT_PASSWORD: password
ports:
- 3306
options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=20s --health-retries=10
redis:
image: redis:7.4.1
ports:
- 6379
strategy:
fail-fast: false
matrix:
node: ${{ github.event_name == 'pull_request' && fromJSON('["22.x"]') || fromJSON('["20.x", "22.x", "24.x"]') }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node }}
- name: Build
run: bunx lerna run ci
- name: e2e tests
env:
E2E_MYSQL_PORT: ${{ job.services.mysql.ports['3306'] }}
E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
DB: mysql
run: bun run e2e
e2e-postgres:
name: e2e (postgres)
needs: detect-changes
if: needs.detect-changes.outputs.packages == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: vendure
POSTGRES_PASSWORD: password
ports:
- 5432
options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3
redis:
image: redis:7.4.1
ports:
- 6379
strategy:
fail-fast: false
matrix:
node: ${{ github.event_name == 'pull_request' && fromJSON('["22.x"]') || fromJSON('["20.x", "22.x", "24.x"]') }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node }}
- name: Build
run: bunx lerna run ci
- name: e2e tests
env:
E2E_POSTGRES_PORT: ${{ job.services.postgres.ports['5432'] }}
E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
DB: postgres
run: bun run e2e
all-passed:
name: all-passed
runs-on: ubuntu-latest
permissions: {}
if: always()
needs:
- detect-changes
- codegen
- build
- unit-tests
- dashboard-i18n
- dashboard-e2e
- sonarqube
- e2e-sqljs
- e2e-mariadb
- e2e-mysql
- e2e-postgres
steps:
- run: exit ${{ (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) && 1 || 0 }}