From f60c71061c4dda7be47e7ebdfec3d5dcbc852e4f Mon Sep 17 00:00:00 2001 From: jbavari Date: Mon, 2 Nov 2015 16:12:30 -0700 Subject: [PATCH] Fix(generate): Improve specs for page generation. Fix test for generator look up. Update generate.js to throw better errors --- tooling/generate.js | 8 +-- tooling/spec/generate.spec.js | 94 +++++++++++------------------------ 2 files changed, 34 insertions(+), 68 deletions(-) diff --git a/tooling/generate.js b/tooling/generate.js index 49c84bc59f..d0586affe2 100644 --- a/tooling/generate.js +++ b/tooling/generate.js @@ -32,12 +32,12 @@ Generate.generate = function generate(options) { Generate.log = options.log; } - if (!options.generatorName) { - options.generatorName = 'page'; + if (options.generatorName && !Generate.generators[options.generatorName]) { + throw new Error('There is no generator available with that name: ' + options.generatorName + '.'); } - if (!Generate.generators[options.generatorName]) { - throw new Error('There is no generator available with that name: ' + options.generatorName + '.'); + if (!options.generatorName) { + options.generatorName = 'page'; } var generateOptions = { diff --git a/tooling/spec/generate.spec.js b/tooling/spec/generate.spec.js index e376abd617..78d8b89a22 100644 --- a/tooling/spec/generate.spec.js +++ b/tooling/spec/generate.spec.js @@ -13,10 +13,17 @@ var fs = require('fs'), describe('#Generate', function() { it('should have generate exported', function() { expect(Generate).toBeDefined(); - expect(Generate.page).toBeDefined(); + expect(Generate.generate).toBeDefined(); + expect(Generate.generate).toBeDefined(); + expect(Generate.defaultTemplates).toBeDefined(); + expect(Generate.loadGeneratorTemplates).toBeDefined(); + expect(Generate.loadGeneratorTemplates).toBeDefined(); + expect(Generate.loadGenerator).toBeDefined(); + expect(Generate.loadGenerators).toBeDefined(); + }); - ddescribe('#generators', function() { + describe('#generators', function() { it('should have a list of generators', function() { expect(Generate.generators).toBeDefined(); expect(Object.keys(Generate.generators).length).toBeGreaterThan(0); @@ -87,8 +94,7 @@ describe('#Generate', function() { }); }); - xdescribe('#page', function() { - + describe('#page', function() { it('should generate a page at a directory', function() { //ionic g page about //what should happen: @@ -98,70 +104,37 @@ describe('#Generate', function() { var appDir = '/ionic/app'; spyOn(Generate, 'createScaffoldDirectories'); spyOn(fs, 'writeFileSync'); - spyOn(Generate, 'generateHtmlTemplate'); - spyOn(Generate, 'generateScssTemplate'); - spyOn(Generate, 'generateJsTemplate'); - Generate.page(appDir, 'about'); + var options = { + appDirectory: appDir, + generatorName: 'page', + name: 'MyPage', + } - expect(Generate.createScaffoldDirectories).toHaveBeenCalledWith(appDir, 'about'); - expect(Generate.generateJsTemplate).toHaveBeenCalledWith('about'); - expect(Generate.generateHtmlTemplate).toHaveBeenCalledWith('about'); - expect(Generate.generateScssTemplate).toHaveBeenCalledWith('about'); + Generate.generate(options); + // console.log(fs.writeFileSync.calls); + expect(fs.writeFileSync.calls.length).toBe(3); + var htmlSaveCall = fs.writeFileSync.calls[0]; + expect(fs.writeFileSync.calls[0].args[0]).toBe('/ionic/app/www/app/my-page/my-page.html'); + expect(fs.writeFileSync.calls[0].args[1]).toContain('MyPage'); + expect(fs.writeFileSync.calls[0].args[1]).toContain(''); - expect(fs.writeFileSync).toHaveBeenCalled(); + expect(fs.writeFileSync.calls[1].args[0]).toBe('/ionic/app/www/app/my-page/my-page.js'); + expect(fs.writeFileSync.calls[1].args[1]).toContain('templateUrl: \'app/my-page/my-page.html\''); + expect(fs.writeFileSync.calls[1].args[1]).toContain('export class MyPage {'); - }); - - it('should generate a page code template', function() { - var scaffold = 'about'; - var compiledTemplate = Generate.generateJsTemplate(scaffold); - expect(compiledTemplate).toContain('templateUrl: \'app/about/about.html\''); - expect(compiledTemplate).toContain('export class About'); - }); - - it('should generate a properly cased page template', function() { - var scaffold = 'scheduleDetail'; - var compiledTemplate = Generate.generateJsTemplate(scaffold); - expect(compiledTemplate).toContain('templateUrl: \'app/schedule-detail/schedule-detail.html\''); - expect(compiledTemplate).not.toContain('export class scheduleDetail'); - expect(compiledTemplate).toContain('export class ScheduleDetail'); - }); - - it('should generate a page html template', function() { - var scaffold = 'sessions'; - var compiledTemplate = Generate.generateHtmlTemplate(scaffold); - expect(compiledTemplate).toContain(''); - expect(compiledTemplate).toContain('Sessions'); - - }); - - it('should generate a page sass template', function() { - var scaffold = 'sessions'; - var compiledTemplate = Generate.generateScssTemplate(scaffold); - expect(compiledTemplate).toContain('.sessions {'); - }); - - it('should render html template from file', function() { - spyOn(fs, 'readFileSync').andReturn('faketemplate'); - var templateSpy = createSpy(); - - spyOn(_, 'template').andReturn(templateSpy); - var options = { name: 'test', capitalizedName: 'Test', templatePath: '/path/to/template.tmpl.html'}; - var generatedContents = Generate.renderTemplateFromFile(options); - expect(fs.readFileSync).toHaveBeenCalledWith(options.templatePath, 'utf8'); - expect(_.template).toHaveBeenCalledWith('faketemplate'); - expect(templateSpy).toHaveBeenCalledWith(options); + expect(fs.writeFileSync.calls[2].args[0]).toBe('/ionic/app/www/app/my-page/my-page.scss'); + expect(fs.writeFileSync.calls[2].args[1]).toContain('.my-page {'); }); }); //#page - xdescribe('#directories', function() { + describe('#directories', function() { it('should create directories for scaffolding', function() { // pwd = /ionic/app // ionic g page about // create folders in /ionic/app/www/app/about spyOn(shell, 'mkdir'); - Generate.createScaffoldDirectories('/ionic/app', 'about'); + Generate.createScaffoldDirectories({appDirectory: '/ionic/app', fileName: 'about'}); expect(shell.mkdir).toHaveBeenCalledWith('-p', '/ionic/app/www/app/about'); }); }); //#directories @@ -275,17 +248,10 @@ describe('#Generate', function() { expect(tabsJs).toContain('export class TabsPage {'); expect(tabsJs).toContain('this.About = About;'); expect(tabsJs).toContain('this.Map = Map;'); - - - }); });//#tabs - xdescribe('#naming', function() { - it('should capitalize names', function() { - expect(Generate.capitalizeName('session')).toBe('Session'); - }); - + describe('#naming', function() { it('should generate the correct file and css class name', function() { expect(Generate.fileName('session')).toBe('session'); expect(Generate.fileName('Session')).toBe('session');