2018-09-14 10:05:57 +01:00
const cliCommandReaderFactory = require ( './cli-command' );
const reader = cliCommandReaderFactory ();
const content = `
{
"name": "add",
"description": "Add support for a library to your project.",
"longDescription": "Add support for a library in your project, for example adding \`@angular/pwa\` which would configure\\nyour project for PWA support.\\n",
"hidden": false,
"type": "custom",
"options": [
{
"name": "collection",
"description": "The package to be added.",
"type": "string",
"required": false,
"aliases": [],
"hidden": false,
"positional": 0
},
{
"name": "help",
"description": "Shows a help message.",
"type": "boolean",
"required": false,
"aliases": [],
"hidden": false
},
{
"name": "helpJson",
"description": "Shows the metadata associated with each flags, in JSON format.",
"type": "boolean",
"required": false,
"aliases": [],
"hidden": false
}
],
"aliases": ['a'],
"scope": "in"
}
` ;
2019-06-06 09:45:07 +01:00
const fileInfo = {
content ,
baseName : 'add' ,
relativePath : 'add.json' ,
basePath : __dirname + '/mocks/help' ,
};
2018-09-14 10:05:57 +01:00
describe ( 'cli-command reader' , () => {
describe ( 'getDocs' , () => {
it ( 'should return an array containing a single doc' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs . length ). toEqual ( 1 );
});
it ( 'should return a cli-command doc' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]). toEqual ( jasmine . objectContaining ({
id : 'cli-add' ,
docType : 'cli-command' ,
}));
});
it ( 'should extract the name from the fileInfo' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. name ). toEqual ( 'add' );
});
it ( 'should compute the id and aliases' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. id ). toEqual ( 'cli-add' );
expect ( docs [ 0 ]. aliases ). toEqual ([ 'cli-add' , 'cli-a' ]);
});
it ( 'should compute the path and outputPath' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. path ). toEqual ( 'cli/add' );
expect ( docs [ 0 ]. outputPath ). toEqual ( 'cli/add.json' );
});
it ( 'should compute the bread crumbs' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. breadCrumbs ). toEqual ([
2019-06-06 09:45:07 +01:00
{ text : 'CLI' , path : 'cli' },
{ text : 'add' , path : 'cli/add' },
2018-09-14 10:05:57 +01:00
]);
});
it ( 'should extract the short description into the content' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. content ). toEqual ( 'Add support for a library to your project.' );
});
it ( 'should extract the long description' , () => {
const docs = reader . getDocs ( fileInfo );
2019-06-06 09:45:07 +01:00
expect ( docs [ 0 ]. longDescription )
. toEqual (
'Add support for a library in your project, for example adding `@angular/pwa` which would configure\nyour project for PWA support.\n' );
2018-09-14 10:05:57 +01:00
});
it ( 'should extract the command type' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. type ). toEqual ( 'custom' );
});
it ( 'should extract the command scope' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. scope ). toEqual ( 'in' );
});
it ( 'should extract the command aliases' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. commandAliases ). toEqual ([ 'a' ]);
});
it ( 'should extract the options' , () => {
const docs = reader . getDocs ( fileInfo );
expect ( docs [ 0 ]. options ). toEqual ([
2019-06-06 09:45:07 +01:00
jasmine . objectContaining ({ name : 'collection' }),
jasmine . objectContaining ({ name : 'help' }),
jasmine . objectContaining ({ name : 'helpJson' }),
2018-09-14 10:05:57 +01:00
]);
});
2019-06-06 09:45:07 +01:00
it ( 'should extract file info for the long description' , () => {
const [ doc ] = reader . getDocs ( fileInfo );
expect ( doc . longDescriptionDoc ). toEqual ({
docType : 'content' ,
startingLine : 0 ,
fileInfo : { realProjectRelativePath : 'packages/angular/cli/commands/add-long.md' }
});
});
2018-09-14 10:05:57 +01:00
});
});