Skip to content

Commit 20c28df

Browse files
committed
Add CLI tests
1 parent b44e409 commit 20c28df

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

packages/playground/cli/tests/run-cli.spec.ts

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { exec } from 'node:child_process';
1111
import {
1212
mkdirSync,
1313
readdirSync,
14+
readFileSync,
1415
writeFileSync,
1516
symlinkSync,
1617
unlinkSync,
@@ -131,6 +132,129 @@ describe.each(blueprintVersions)(
131132
expect(response.text).toContain(oldestSupportedVersion);
132133
});
133134

135+
test('should add missing constants to wp-config.php', async () => {
136+
const tmpDir = await mkdtemp(
137+
path.join(tmpdir(), 'playground-test-')
138+
);
139+
140+
const args: RunCLIArgs = {
141+
...suiteCliArgs,
142+
command: 'server',
143+
'mount-before-install': [
144+
{
145+
hostPath: tmpDir,
146+
vfsPath: '/wordpress',
147+
},
148+
],
149+
mode: 'create-new-site',
150+
};
151+
152+
const newSiteArgs: RunCLIArgs =
153+
version === 2
154+
? {
155+
...args,
156+
'experimental-blueprints-v2-runner': true,
157+
mode: 'create-new-site',
158+
}
159+
: args;
160+
161+
const existingSiteArgs: RunCLIArgs =
162+
version === 2
163+
? {
164+
...args,
165+
'experimental-blueprints-v2-runner': true,
166+
mode: 'apply-to-existing-site',
167+
}
168+
: {
169+
...args,
170+
skipWordPressSetup: true,
171+
};
172+
173+
// Create a new site so we can load it as an existing site later.
174+
cliServer = await runCLI(newSiteArgs);
175+
const wpConfigPath = path.join(tmpDir, 'wp-config.php');
176+
let wpConfig = readFileSync(wpConfigPath, 'utf8');
177+
expect(wpConfig).toContain(
178+
"define( 'DB_NAME', 'database_name_here' );"
179+
);
180+
expect(wpConfig).not.toContain(
181+
'BEGIN: Added by WordPress Playground.'
182+
);
183+
expect(wpConfig).not.toContain(
184+
'END: Added by WordPress Playground.'
185+
);
186+
187+
// Remove the "DB_NAME" constant.
188+
writeFileSync(
189+
wpConfigPath,
190+
wpConfig.replace("'DB_NAME'", "'UNKNOWN_CONSTANT'")
191+
);
192+
wpConfig = readFileSync(wpConfigPath, 'utf8');
193+
expect(wpConfig).not.toContain(
194+
"define( 'DB_NAME', 'database_name_here' );"
195+
);
196+
197+
// Use the existing site and confirm the missing constant is added.
198+
cliServer = await runCLI(existingSiteArgs);
199+
wpConfig = readFileSync(wpConfigPath, 'utf8');
200+
expect(wpConfig).toContain(
201+
"define( 'DB_NAME', 'database_name_here' );"
202+
);
203+
expect(wpConfig).toContain('BEGIN: Added by WordPress Playground.');
204+
expect(wpConfig).toContain('END: Added by WordPress Playground.');
205+
206+
// Ensure the "--wp-config-default-constants" argument works as well.
207+
try {
208+
cliServer = await runCLI({
209+
...existingSiteArgs,
210+
wpConfigDefaultConstants: {
211+
DB_NAME: 'test_database_name',
212+
CUSTOM_CONSTANT: 'test_custom_constant',
213+
},
214+
});
215+
} catch (_) {
216+
// eslint-disable-line @typescript-eslint/no-unused-vars
217+
// The boot will fail due to incorrect database name,
218+
// but the wp-config.php file should be updated.
219+
}
220+
221+
wpConfig = readFileSync(wpConfigPath, 'utf8');
222+
expect(wpConfig).not.toContain(
223+
"define( 'DB_NAME', 'database_name_here' );"
224+
);
225+
expect(wpConfig).toContain(
226+
"define( 'DB_NAME', 'test_database_name' );"
227+
);
228+
expect(wpConfig).toContain(
229+
"define( 'CUSTOM_CONSTANT', 'test_custom_constant' );"
230+
);
231+
expect(wpConfig).toContain('BEGIN: Added by WordPress Playground.');
232+
expect(wpConfig).toContain('END: Added by WordPress Playground.');
233+
234+
// Ensure the injected constants are removed when no longer needed.
235+
writeFileSync(
236+
wpConfigPath,
237+
wpConfig.replace("'UNKNOWN_CONSTANT'", "'DB_NAME'")
238+
);
239+
await runCLI(existingSiteArgs);
240+
wpConfig = readFileSync(wpConfigPath, 'utf8');
241+
expect(wpConfig).toContain(
242+
"define( 'DB_NAME', 'database_name_here' );"
243+
);
244+
expect(wpConfig).not.toContain(
245+
"define( 'DB_NAME', 'test_database_name' );"
246+
);
247+
expect(wpConfig).not.toContain(
248+
"define( 'CUSTOM_CONSTANT', 'test_custom_constant' );"
249+
);
250+
expect(wpConfig).not.toContain(
251+
'BEGIN: Added by WordPress Playground.'
252+
);
253+
expect(wpConfig).not.toContain(
254+
'END: Added by WordPress Playground.'
255+
);
256+
});
257+
134258
test('should run blueprint', async () => {
135259
cliServer = await runCLI({
136260
...suiteCliArgs,

0 commit comments

Comments
 (0)