Skip to content

Commit

Permalink
add test to ensure a missing publishConfig.access does not fail a rel…
Browse files Browse the repository at this point in the history
…ease again + some refactorings
  • Loading branch information
slorber committed Nov 19, 2020
1 parent a4e0992 commit 3dcae7b
Showing 1 changed file with 52 additions and 10 deletions.
62 changes: 52 additions & 10 deletions __tests__/validate-package-json.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,63 @@ import fsCb from 'fs';
const glob = util.promisify(globCb);
const readFile = util.promisify(fsCb.readFile);

type PackageJsonFile = {
file: string;
content: any;
};

async function getPackagesJsonFiles(): Promise<PackageJsonFile[]> {
const files = await glob('packages/*/package.json');
return Promise.all(
files.map(async (file) => {
return {
file,
content: JSON.parse(await readFile(file, 'utf8')),
};
}),
);
}

describe('packages', () => {
test('should be found', async () => {
const packageJsonFiles = await getPackagesJsonFiles();
expect(packageJsonFiles.length).toBeGreaterThan(0);
});

test('should contain repository and directory for every package', async () => {
const allPackageJson = await glob('packages/*/package.json');
expect(allPackageJson.length).toBeGreaterThan(0);

/* eslint-disable no-await-in-loop,no-restricted-syntax */
for (const packageJson of allPackageJson) {
const content = JSON.parse(await readFile(packageJson, 'utf8'));
if (content.private !== true) {
expect(content.repository).toEqual({
const packageJsonFiles = await getPackagesJsonFiles();

packageJsonFiles.forEach((packageJsonFile) => {
if (packageJsonFile.content.private !== true) {
expect(packageJsonFile.content.repository).toEqual({
type: 'git',
url: 'https://github.com/facebook/docusaurus.git',
directory: packageJson.replace(/\/package\.json$/, ''),
directory: packageJsonFile.file.replace(/\/package\.json$/, ''),
});
}
}
});
});

/*
If a package starts with @, if won't be published to public npm registry
without an additional publishConfig.acces: "public" config
This will make you publish an incomplete list of Docusaurus packages
when trying to release with lerna-publish
*/
test('should have publishConfig.access: "public" when name starts with @', async () => {
const packageJsonFiles = await getPackagesJsonFiles();

packageJsonFiles.forEach((packageJsonFile) => {
if (packageJsonFile.content.name.startsWith('@')) {
// Unfortunately jest custom message do not exist in loops, so using an exception instead to show failing package file
// (see https://github.com/facebook/jest/issues/3293)
// expect(packageJsonFile.content.publishConfig?.access).toEqual('public');
if (packageJsonFile.content.publishConfig?.access !== 'public') {
throw new Error(
`Package ${packageJsonFile.file} does not have publishConfig.access: 'public'`,
);
}
}
});
});
});

0 comments on commit 3dcae7b

Please sign in to comment.