angular-cli/packages/angular/cli/utilities/json-schema_spec.ts
2018-11-01 10:07:48 -07:00

76 lines
2.4 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*
*/
import { schema } from '@angular-devkit/core';
import { readFileSync } from 'fs';
import { join } from 'path';
import { CommandJsonPathException, parseJsonSchemaToCommandDescription } from './json-schema';
describe('parseJsonSchemaToCommandDescription', () => {
let registry: schema.CoreSchemaRegistry;
const baseSchemaJson = {
'$schema': 'http://json-schema.org/schema',
'$id': 'ng-cli://commands/version.json',
'description': 'Outputs Angular CLI version.',
'$longDescription': 'not a file ref',
'$aliases': ['v'],
'$scope': 'all',
'$impl': './version-impl#VersionCommand',
'type': 'object',
'allOf': [
{ '$ref': './definitions.json#/definitions/base' },
],
};
beforeEach(() => {
registry = new schema.CoreSchemaRegistry([]);
registry.registerUriHandler((uri: string) => {
if (uri.startsWith('ng-cli://')) {
const content = readFileSync(
join(__dirname, '..', uri.substr('ng-cli://'.length)), 'utf-8');
return Promise.resolve(JSON.parse(content));
} else {
return null;
}
});
});
it(`should throw on invalid $longDescription path`, async () => {
const name = 'version';
const schemaPath = join(__dirname, './bad-sample.json');
const schemaJson = { ...baseSchemaJson, $longDescription: 'not a file ref' };
try {
await parseJsonSchemaToCommandDescription(name, schemaPath, registry, schemaJson);
} catch (error) {
const refPath = join(__dirname, schemaJson.$longDescription);
expect(error).toEqual(new CommandJsonPathException(refPath, name));
return;
}
expect(true).toBe(false, 'function should have thrown');
});
it(`should throw on invalid $usageNotes path`, async () => {
const name = 'version';
const schemaPath = join(__dirname, './bad-sample.json');
const schemaJson = { ...baseSchemaJson, $usageNotes: 'not a file ref' };
try {
await parseJsonSchemaToCommandDescription(name, schemaPath, registry, schemaJson);
} catch (error) {
const refPath = join(__dirname, schemaJson.$usageNotes);
expect(error).toEqual(new CommandJsonPathException(refPath, name));
return;
}
expect(true).toBe(false, 'function should have thrown');
});
});