Skip to content

Commit 1d1b6fe

Browse files
authored
test: tighten initializer dependency pinning and coverage
1 parent 0d400a9 commit 1d1b6fe

4 files changed

Lines changed: 33 additions & 10 deletions

File tree

‎playwright-ct-angular/create-playwright-sand4rt/index.js‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
const path = require('path');
44
const { spawnSync } = require('child_process');
55
const {
6-
CT_PACKAGE_NAME,
76
hasCtFlag,
87
targetDirFromArgs,
98
detectPackageManager,
109
patchPackageJson,
10+
installArgsForPackageManager,
1111
} = require('./lib');
1212

1313
const args = process.argv.slice(2);
@@ -19,7 +19,7 @@ const createPlaywrightResult = spawnSync(
1919
);
2020

2121
if (createPlaywrightResult.status !== 0)
22-
process.exit(createPlaywrightResult.status || 1);
22+
process.exit(createPlaywrightResult.status ?? 1);
2323

2424
if (!hasCtFlag(args))
2525
process.exit(0);
@@ -29,16 +29,12 @@ if (!patchPackageJson(targetDir))
2929
process.exit(0);
3030

3131
const packageManager = detectPackageManager(targetDir);
32-
const installArgs = packageManager === 'pnpm'
33-
? ['add', '--save-dev', CT_PACKAGE_NAME]
34-
: packageManager === 'yarn'
35-
? ['add', '--dev', CT_PACKAGE_NAME]
36-
: ['install', '--save-dev', CT_PACKAGE_NAME];
32+
const installArgs = installArgsForPackageManager(packageManager);
3733

3834
const installResult = spawnSync(packageManager, installArgs, {
3935
cwd: targetDir,
4036
stdio: 'inherit',
4137
});
4238

4339
if (installResult.status !== 0)
44-
process.exit(installResult.status || 1);
40+
process.exit(installResult.status ?? 1);

‎playwright-ct-angular/create-playwright-sand4rt/lib.js‎

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
const fs = require('fs');
22
const path = require('path');
3+
const packageJson = require('./package.json');
34

45
const CT_PACKAGE_NAME = '@sand4rt/experimental-ct-angular';
6+
const CT_PACKAGE_VERSION = packageJson.config.ctPackageVersion;
7+
const CT_PACKAGE_SPEC = `${CT_PACKAGE_NAME}@${CT_PACKAGE_VERSION}`;
58

69
function hasCtFlag(args) {
710
return args.includes('--ct');
@@ -46,16 +49,27 @@ function patchPackageJson(projectDir) {
4649
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
4750
packageJson.devDependencies ??= {};
4851
delete packageJson.devDependencies.undefined;
49-
packageJson.devDependencies[CT_PACKAGE_NAME] = 'latest';
52+
packageJson.devDependencies[CT_PACKAGE_NAME] = CT_PACKAGE_VERSION;
5053

5154
fs.writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`);
5255
return true;
5356
}
5457

58+
function installArgsForPackageManager(packageManager) {
59+
if (packageManager === 'pnpm')
60+
return ['add', '--save-dev', '--save-exact', CT_PACKAGE_SPEC];
61+
if (packageManager === 'yarn')
62+
return ['add', '--dev', '--exact', CT_PACKAGE_SPEC];
63+
return ['install', '--save-dev', '--save-exact', CT_PACKAGE_SPEC];
64+
}
65+
5566
module.exports = {
5667
CT_PACKAGE_NAME,
68+
CT_PACKAGE_VERSION,
69+
CT_PACKAGE_SPEC,
5770
hasCtFlag,
5871
targetDirFromArgs,
5972
detectPackageManager,
6073
patchPackageJson,
74+
installArgsForPackageManager,
6175
};

‎playwright-ct-angular/create-playwright-sand4rt/package.json‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@
88
"scripts": {
99
"test": "node --test"
1010
},
11+
"config": {
12+
"ctPackageVersion": "1.58.2"
13+
},
1114
"license": "MIT"
1215
}

‎playwright-ct-angular/create-playwright-sand4rt/test/lib.test.js‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ const os = require('os');
55
const path = require('path');
66

77
const {
8+
CT_PACKAGE_NAME,
9+
CT_PACKAGE_VERSION,
10+
CT_PACKAGE_SPEC,
811
hasCtFlag,
912
targetDirFromArgs,
1013
detectPackageManager,
1114
patchPackageJson,
15+
installArgsForPackageManager,
1216
} = require('../lib');
1317

1418
test('hasCtFlag detects ct mode', () => {
@@ -53,7 +57,13 @@ test('patchPackageJson replaces undefined dependency with ct angular package', (
5357
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
5458
assert.equal(packageJson.devDependencies.undefined, undefined);
5559
assert.equal(packageJson.devDependencies['@types/node'], '^20.0.0');
56-
assert.equal(packageJson.devDependencies['@sand4rt/experimental-ct-angular'], 'latest');
60+
assert.equal(packageJson.devDependencies[CT_PACKAGE_NAME], CT_PACKAGE_VERSION);
5761

5862
fs.rmSync(tempDir, { recursive: true, force: true });
5963
});
64+
65+
test('installArgsForPackageManager enforces exact dependency installs', () => {
66+
assert.deepEqual(installArgsForPackageManager('npm'), ['install', '--save-dev', '--save-exact', CT_PACKAGE_SPEC]);
67+
assert.deepEqual(installArgsForPackageManager('pnpm'), ['add', '--save-dev', '--save-exact', CT_PACKAGE_SPEC]);
68+
assert.deepEqual(installArgsForPackageManager('yarn'), ['add', '--dev', '--exact', CT_PACKAGE_SPEC]);
69+
});

0 commit comments

Comments
 (0)