Commit a5f80da7da1408da9f2f2ef58feeff9aaf08d42b
1 parent
29d769ad
Exists in
master
and in
26 other branches
Add tests for article editor
Showing
3 changed files
with
38 additions
and
9 deletions
Show diff stats
src/app/article/cms/article-editor/article-editor.component.spec.ts
0 → 100644
... | ... | @@ -0,0 +1,28 @@ |
1 | +import {ArticleEditorComponent} from './article-editor.component'; | |
2 | +import {BasicEditorComponent} from "../basic-editor/basic-editor.component"; | |
3 | +import {ComponentTestHelper, createClass} from '../../../../spec/component-test-helper'; | |
4 | +import * as helpers from "../../../../spec/helpers"; | |
5 | + | |
6 | +const htmlTemplate: string = '<article-editor [article]="ctrl.article"></article-editor>'; | |
7 | + | |
8 | +describe("Components", () => { | |
9 | + describe("Article Editor Component", () => { | |
10 | + | |
11 | + let helper: ComponentTestHelper<ArticleEditorComponent>; | |
12 | + beforeEach(angular.mock.module("templates")); | |
13 | + | |
14 | + beforeEach((done) => { | |
15 | + let properties = { article: { type: "TextArticle" } }; | |
16 | + let cls = createClass({ | |
17 | + template: htmlTemplate, | |
18 | + directives: [ArticleEditorComponent, BasicEditorComponent], | |
19 | + properties: properties | |
20 | + }); | |
21 | + helper = new ComponentTestHelper<ArticleEditorComponent>(cls, done); | |
22 | + }); | |
23 | + | |
24 | + it("replace element with article basic editor when type is TextArticle", () => { | |
25 | + expect(helper.find("article-basic-editor").length).toEqual(1); | |
26 | + }); | |
27 | + }); | |
28 | +}); | ... | ... |
src/app/article/cms/article-editor/article-editor.component.ts
... | ... | @@ -16,10 +16,10 @@ export class ArticleEditorComponent { |
16 | 16 | private $compile: ng.ICompileService) { } |
17 | 17 | |
18 | 18 | ngOnInit() { |
19 | - let articleType = this.article.type.replace(/::/, ''); | |
19 | + let articleType = this.article && this.article.type ? this.article.type.replace(/::/, '') : "TextArticle"; | |
20 | 20 | let specificDirective = `${articleType.charAt(0).toLowerCase()}${articleType.substring(1)}Editor`; |
21 | 21 | let directiveName = "article-basic-editor"; |
22 | - if (this.$injector.has(specificDirective + 'Directive')) { | |
22 | + if (specificDirective !== "articleEditor" && this.$injector.has(specificDirective + 'Directive')) { | |
23 | 23 | directiveName = specificDirective.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); |
24 | 24 | } |
25 | 25 | this.$element.replaceWith(this.$compile('<' + directiveName + ' [article]="ctrl.article"></' + directiveName + '>')(this.$scope)); | ... | ... |
src/spec/component-test-helper.ts
... | ... | @@ -88,10 +88,11 @@ export class ComponentTestHelper<T extends any> { |
88 | 88 | this.debugElement = fixture.debugElement; |
89 | 89 | this.component = <T>this.debugElement.componentViewChildren[0].componentInstance; |
90 | 90 | let mockObj = new this.mockComponent(); |
91 | - Object.keys(mockObj).forEach((key: any) => { | |
92 | - (<any>this.component)[key] = <any>mockObj[key]; | |
93 | - }); | |
94 | - | |
91 | + if (this.component) { | |
92 | + Object.keys(mockObj).forEach((key: any) => { | |
93 | + (<any>this.component)[key] = <any>mockObj[key]; | |
94 | + }); | |
95 | + } | |
95 | 96 | }).then(() => { |
96 | 97 | // Force the resolution of components and sync |
97 | 98 | done(); |
... | ... | @@ -99,9 +100,9 @@ export class ComponentTestHelper<T extends any> { |
99 | 100 | } |
100 | 101 | |
101 | 102 | changeProperties(properties: any) { |
102 | - Object.keys(properties).forEach((key: any) => { | |
103 | - this.component[key] = properties[key]; | |
104 | - }); | |
103 | + Object.keys(properties).forEach((key: any) => { | |
104 | + this.component[key] = properties[key]; | |
105 | + }); | |
105 | 106 | } |
106 | 107 | |
107 | 108 | /** | ... | ... |