@@ -44,10 +44,27 @@ health_checks() {
4444 run ddev pnpm --version
4545 assert_success
4646
47- run ddev exec pnpm config get store-dir --global
47+ run ddev pnpm store path
4848 assert_success
4949 assert_output --partial " /mnt/ddev-global-cache/pnpm"
5050
51+ # Verify $PNPM_HOME is prepended to $PATH. The exact directory depends on the
52+ # pnpm major version (see web-build/Dockerfile.pnpm): pnpm v11+ uses
53+ # $PNPM_HOME/bin, older versions use $PNPM_HOME directly.
54+ run ddev pnpm -v
55+ assert_success
56+
57+ pnpm_version=" ${output# v} "
58+ if [[ " ${pnpm_version%% .* } " -ge 11 ]]; then
59+ expected_path=" /mnt/ddev-global-cache/pnpm/bin"
60+ else
61+ expected_path=" /mnt/ddev-global-cache/pnpm"
62+ fi
63+
64+ run ddev exec ' echo ":$PATH:"'
65+ assert_success
66+ assert_output --partial " :${expected_path} :"
67+
5168 if [[ " ${HAS_PNPM_DIRECTORY} " == " true" ]]; then
5269 run ddev pnpm test
5370 assert_success
@@ -97,9 +114,12 @@ teardown() {
97114
98115@test " use ENV to set working directory" {
99116 set -eu -o pipefail
117+
100118 export HAS_PNPM_DIRECTORY=true
119+
101120 # Create a frontend project
102121 cp -r " ${DIR} /tests/testdata/frontend" " ${TESTDIR} /frontend"
122+
103123 # Set the PNPM_DIRECTORY to match our frontend project
104124 run ddev dotenv set .ddev/.env.web --pnpm-directory=frontend
105125 assert_success
@@ -113,38 +133,34 @@ teardown() {
113133 health_checks
114134}
115135
116- @test " global cache is populated after install " {
136+ @test " latest Node.js " {
117137 set -eu -o pipefail
118- cp " ${DIR} /tests/testdata/frontend/package.json" " ${TESTDIR} /package.json"
138+
139+ ddev config --nodejs-version=latest
140+ assert_success
119141
120142 echo " # ddev add-on get ${DIR} with project ${PROJNAME} in $( pwd) " >&3
121143 run ddev add-on get " ${DIR} "
122144 assert_success
123145 run ddev restart -y
124146 assert_success
147+ health_checks
148+ }
125149
126- # Verify is-odd@3.0.1 is stored in the global cache after installing
127- run ddev pnpm install
128- assert_success
129- run ddev exec bash -c " grep -R 'is-odd' /mnt/ddev-global-cache/pnpm 2>/dev/null | grep '3.0.1'"
130- assert_success
150+ @test " v20 Node.js" {
151+ set -eu -o pipefail
131152
132- # Install the same package version from a second directory and verify it is reused from cache
133- mkdir " ${TESTDIR} /second"
134- cp " ${TESTDIR} /package.json" " ${TESTDIR} /second/package.json"
135- run ddev exec bash -c " cd /var/www/html/second && pnpm install 2>&1 | grep 'Progress:.*done' | grep 'reused [1-9]'"
136- assert_success
153+ if [[ " $( ddev --version) " == " ddev version v1.25.2" ]]; then
154+ skip " Node.js v20 requires ddev v1.25.3+"
155+ fi
137156
138- # Install a different version of the same package and verify the correct version is installed
139- mkdir " ${TESTDIR} /third"
140- printf ' {"name":"third","version":"1.0.0","dependencies":{"is-odd":"2.0.0"}}' > " ${TESTDIR} /third/package.json"
141- run ddev exec bash -c " cd /var/www/html/third && pnpm install"
157+ ddev config --nodejs-version=20
142158 assert_success
143159
144- run ddev exec bash -c " grep -R 'is-odd' /mnt/ddev-global-cache/pnpm 2>/dev/null | grep '2.0.0'"
160+ echo " # ddev add-on get ${DIR} with project ${PROJNAME} in $( pwd) " >&3
161+ run ddev add-on get " ${DIR} "
145162 assert_success
146-
147- run ddev exec bash -c " node -e \" console.log(require('/var/www/html/third/node_modules/is-odd/package.json').version)\" "
163+ run ddev restart -y
148164 assert_success
149- assert_output " 2.0.0 "
165+ health_checks
150166}
0 commit comments