var mockPackage = require('../mocks/mockPackage');
var Dgeni = require('dgeni');

describe('addJadeDataDocsProcessor', function() {
  var dgeni, injector, processor;

  beforeEach(function() {
    dgeni = new Dgeni([mockPackage()]);
    injector = dgeni.configureInjector();
    processor = injector.get('addJadeDataDocsProcessor');
  });

  it('should add a doc for each module', function() {
    var exportDoc;
    var docs = [
      {
        docType: 'module',
        id: 'someModule',
        exports: [
          exportDoc = { name: 'someObj', docType: 'var', symbolTypeName: 'MyClass', originalModule: 'some/private/module' }
        ],
        fileInfo: { baseName: 'x_y' },
        description: 'some description\nsecond line'
      }
    ];
    docs = processor.$process(docs);

    expect(docs.filter(function(doc) { return doc.docType === 'jade-data'; })[0]).toEqual({
      id : 'someModule-data',
      aliases : [ 'someModule-data' ],
      docType : 'jade-data',
      originalDoc : docs[0],
      data : [
        { name : 'index', title : 'X Y', intro : 'some description second line', docType : 'module' },
        {
          name : 'someObj-var',
          title : 'someObj',
          varType : 'MyClass',
          docType: 'var',
          originalModule: 'some/private/module',
          exportDoc: exportDoc,
          stability : '',
          howToUse : '',
          whatItDoes : '',
          security : false
        }
      ] });
  });

  it('should sort the exports into alphabetical order', function() {
    var alpha, beta, gamma, nu, mu;
    var docs = [
      {
        docType: 'module',
        id: 'someModule',
        exports: [
          beta = { name: 'Beta', docType: 'class'},
          alpha = { name: 'Alpha', docType: 'class'},
          gamma = { name: 'Gamma', docType: 'class'},
          nu = { name: 'Nu', docType: 'class'},
          mu = { name: 'Mu', docType: 'class'}
        ],
        fileInfo: { baseName: 'x_y' },
        description: 'some description\nsecond line'
      }
    ];
    docs = processor.$process(docs);

    expect(docs[2].data).toEqual({ someModule : [
      { name: 'Alpha-class', title: 'Alpha', docType: 'class', exportDoc: alpha, stability : '', howToUse : '', whatItDoes : '', security : false },
      { name: 'Beta-class', title: 'Beta', docType: 'class', exportDoc: beta, stability : '', howToUse : '', whatItDoes : '', security : false },
      { name: 'Gamma-class', title: 'Gamma', docType: 'class', exportDoc: gamma, stability : '', howToUse : '', whatItDoes : '', security : false },
      { name: 'Mu-class', title: 'Mu', docType: 'class', exportDoc: mu, stability : '', howToUse : '', whatItDoes : '', security : false },
      { name: 'Nu-class', title: 'Nu', docType: 'class', exportDoc: nu, stability : '', howToUse : '', whatItDoes : '', security : false }
    ]});

  });
});