|
1 | 1 | const t = require('tap') |
2 | 2 | const { load: loadMockNpm } = require('../../fixtures/mock-npm') |
3 | 3 | const { cleanZlib } = require('../../fixtures/clean-snapshot') |
| 4 | +const MockRegistry = require('@npmcli/mock-registry') |
4 | 5 | const path = require('node:path') |
5 | 6 | const fs = require('node:fs') |
6 | 7 |
|
@@ -167,6 +168,61 @@ t.test('foreground-scripts can still be set to false', async t => { |
167 | 168 | t.throws(() => fs.statSync(path.resolve(npm.prefix, filename))) |
168 | 169 | }) |
169 | 170 |
|
| 171 | +t.test('min-release-age-exclude applies to registry packages', async t => { |
| 172 | + const name = '@myscope/some-package' |
| 173 | + const version = '1.2.3' |
| 174 | + const { npm, outputs } = await loadMockNpm(t, { |
| 175 | + prefixDir: { |
| 176 | + package: { |
| 177 | + 'package.json': JSON.stringify({ name, version }), |
| 178 | + }, |
| 179 | + }, |
| 180 | + config: { |
| 181 | + 'min-release-age': 7, |
| 182 | + 'min-release-age-exclude': ['@myscope/*'], |
| 183 | + }, |
| 184 | + }) |
| 185 | + const registry = new MockRegistry({ |
| 186 | + tap: t, |
| 187 | + registry: npm.config.get('registry'), |
| 188 | + }) |
| 189 | + const manifest = registry.manifest({ name, versions: [version] }) |
| 190 | + await registry.package({ |
| 191 | + manifest, |
| 192 | + times: 2, |
| 193 | + tarballs: { [version]: path.join(npm.prefix, 'package') }, |
| 194 | + }) |
| 195 | + |
| 196 | + await npm.exec('pack', [`${name}@${version}`]) |
| 197 | + |
| 198 | + const filename = 'myscope-some-package-1.2.3.tgz' |
| 199 | + t.strictSame(outputs, [filename]) |
| 200 | + t.ok(fs.statSync(path.resolve(npm.prefix, filename))) |
| 201 | +}) |
| 202 | + |
| 203 | +t.test('excluded alias name does not bypass min-release-age for its target', async t => { |
| 204 | + const target = 'other-package' |
| 205 | + const version = '1.2.3' |
| 206 | + const { npm } = await loadMockNpm(t, { |
| 207 | + config: { |
| 208 | + 'min-release-age': 7, |
| 209 | + 'min-release-age-exclude': ['@myscope/*'], |
| 210 | + }, |
| 211 | + }) |
| 212 | + const registry = new MockRegistry({ |
| 213 | + tap: t, |
| 214 | + registry: npm.config.get('registry'), |
| 215 | + }) |
| 216 | + await registry.package({ |
| 217 | + manifest: registry.manifest({ name: target, versions: [version] }), |
| 218 | + }) |
| 219 | + |
| 220 | + await t.rejects( |
| 221 | + npm.exec('pack', [`@myscope/alias@npm:${target}@${version}`]), |
| 222 | + { code: 'ETARGET' } |
| 223 | + ) |
| 224 | +}) |
| 225 | + |
170 | 226 | t.test('invalid packument', async t => { |
171 | 227 | const { npm, outputs } = await loadMockNpm(t, { |
172 | 228 | prefixDir: { |
|
0 commit comments