This commit includes the following changes: * CLI version information is read from the CLI package from which we read the help files. * CLI API pages now contain GH links * line numbers are not shown in GH links, if the doc does not have a truthy `startingLine` value. This allows us to remove hard coded checks for `guide` pages * content pages and CLI api docs no longer have a `startingLine` * the hard-coded `packages` path segment has been removed from the templates; instead we now only use the `realProjectRelativePath`. * the `realProjectRelativePath` has been updated accordingly for API and CLI API docs. PR Close #26515
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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"
 | 
						|
}
 | 
						|
`;
 | 
						|
 | 
						|
const fileInfo = {content, baseName: 'add'};
 | 
						|
 | 
						|
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([
 | 
						|
        { text: 'CLI', path: 'cli' },
 | 
						|
        { text: 'add', path: 'cli/add' },
 | 
						|
      ]);
 | 
						|
    });
 | 
						|
 | 
						|
    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);
 | 
						|
      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');
 | 
						|
    });
 | 
						|
 | 
						|
    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([
 | 
						|
        jasmine.objectContaining({ name: 'collection' }),
 | 
						|
        jasmine.objectContaining({ name: 'help' }),
 | 
						|
        jasmine.objectContaining({ name: 'helpJson' }),
 | 
						|
      ]);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |