Skip to content

Commit

Permalink
Updated front end to fit new Meta model.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeremy Sik committed Nov 19, 2015
1 parent f4ade8a commit 4bd0b5e
Show file tree
Hide file tree
Showing 13 changed files with 94 additions and 82 deletions.
15 changes: 10 additions & 5 deletions app/src/app/admin/articles/article/article.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,9 @@ namespace app.admin.articles.article {

describe('Article (Admin)', () => {

let article:common.models.Article = common.models.ArticleMock.entity({
_articleMetas:[common.models.ArticleMetaMock.entity()]
}),
let article:common.models.Article = common.models.ArticleMock.entity(),
newArticle:common.models.Article = common.models.ArticleMock.entity({
title:'new article',
_articleMetas:[common.models.ArticleMetaMock.entity()]
title:'new article'
}),
notificationService:common.services.notification.NotificationService,
$q:ng.IQService,
Expand All @@ -23,6 +20,14 @@ namespace app.admin.articles.article {
userService:common.services.user.UserService,
groupTags:common.models.Tag[] = common.models.TagMock.collection(2);

article._metas = [common.models.MetaMock.entity({
metaableId: article.articleId
})];

newArticle._metas = [common.models.MetaMock.entity({
metaableId: newArticle.articleId
})];

beforeEach(() => {

module('app');
Expand Down
2 changes: 1 addition & 1 deletion app/src/app/admin/articles/article/article.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ namespace app.admin.articles.article {
}

return articleService.getModel($stateParams.id, [
'articlePermalinks', 'articleMetas', 'tags', 'author', 'sections.localizations', 'localizations', 'thumbnailImage'
'articlePermalinks', 'metas', 'tags', 'author', 'sections.localizations', 'localizations', 'thumbnailImage'
]);
},
usersPaginator: (userService:common.services.user.UserService) => {
Expand Down
39 changes: 24 additions & 15 deletions app/src/app/admin/articles/article/meta/meta.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,7 @@ namespace app.admin.articles.article.meta {
article:common.models.Article = new common.models.Article({
title: 'foo',
body: seededChance.paragraph(),
permalink: 'foo',
_articleMetas: [
new common.models.ArticleMeta({
metaName: 'name',
metaContent: 'foo'}),
new common.models.ArticleMeta({
metaName: 'description',
metaContent: 'bar'}),
new common.models.ArticleMeta({
metaName: 'keyword',
metaContent: 'foo, bar'}),
new common.models.ArticleMeta({
metaName: 'canonical',
metaContent: 'https://foo.bar.com'})
]
permalink: 'foo'
}),
$q:ng.IQService,
$rootScope:global.IRootScope,
Expand All @@ -31,6 +17,29 @@ namespace app.admin.articles.article.meta {
query: sinon.stub()
};

article._metas = [
new common.models.Meta({
metaName: 'name',
metaContent: 'foo',
metaableId: article.articleId
}),
new common.models.Meta({
metaName: 'description',
metaContent: 'bar',
metaableId: article.articleId
}),
new common.models.Meta({
metaName: 'keyword',
metaContent: 'foo, bar',
metaableId: article.articleId
}),
new common.models.Meta({
metaName: 'canonical',
metaContent: 'https://foo.bar.com',
metaableId: article.articleId
})
];

beforeEach(() => {

module('app');
Expand Down
2 changes: 1 addition & 1 deletion app/src/app/admin/articles/article/meta/meta.tpl.html
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ <h2>Author</h2>

<h2>Search Engines</h2>
<md-whiteframe class="md-whiteframe-z1" layout="column" layout-padding>
<md-input-container ng-repeat="metaTag in MetaController.article._articleMetas">
<md-input-container ng-repeat="metaTag in MetaController.article._metas">
<label for="metaTagMetaContent">{{ metaTag.metaName }}</label>
<input id="metaTagMetaContent" ng-model="metaTag.metaContent" name="metaContent" type="text" ng-required="false">
</md-input-container>
Expand Down
2 changes: 1 addition & 1 deletion app/src/app/guest/articles/article/article.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ namespace app.guest.articles.article {

let article = (<any>ArticleConfig.state.resolve).article(articleService, $stateParams);

expect(articleService.getModel).to.have.been.calledWith('foobar', ['articlePermalinks', 'articleMetas', 'tags', 'author', 'comments', 'sections']);
expect(articleService.getModel).to.have.been.calledWith('foobar', ['articlePermalinks', 'metas', 'tags', 'author', 'comments', 'sections']);

expect(article).to.deep.equal(article);

Expand Down
4 changes: 2 additions & 2 deletions app/src/app/guest/articles/article/article.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace app.guest.articles.article {
},
resolve: /*@ngInject*/{
article: (articleService:common.services.article.ArticleService, $stateParams:IArticleStateParams):common.models.Article | ng.IPromise<common.models.Article> => {
return articleService.getModel($stateParams.permalink, ['articlePermalinks', 'articleMetas', 'tags', 'author', 'comments', 'sections']);
return articleService.getModel($stateParams.permalink, ['articlePermalinks', 'metas', 'tags', 'author', 'comments', 'sections']);
},
user: (ngJwtAuthService:NgJwtAuth.NgJwtAuthService):common.models.User => {
return <common.models.User>ngJwtAuthService.getUser()
Expand All @@ -65,7 +65,7 @@ namespace app.guest.articles.article {
public article:common.models.Article,
public $state:ng.ui.IStateService
) {
$state.current.data.meta = article._articleMetas;
$state.current.data.meta = article._metas;
}

}
Expand Down
2 changes: 1 addition & 1 deletion app/src/common/models/article/articleModel.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace common.models {
thumbnailImageId: seededChance.guid(),
authorDisplay: seededChance.bool(),
showAuthorPromo: seededChance.bool(),
_articleMetas: [],
_metas: [],
_tags: [],
_comments: [],
_sections: [],
Expand Down
64 changes: 31 additions & 33 deletions app/src/common/models/article/articleModel.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,31 @@ namespace common.models {
let title = seededChance.sentence(),
articleId = seededChance.guid(),
articleData = {
articleId: articleId,
title: title,
permalink: title.toLowerCase().replace(' ', '-'),
content:seededChance.paragraph({sentences: 10}),
_articleMetas: [
{
metaName: 'keyword',
metaContent: 'foo',
metaId: seededChance.guid(),
articleId: articleId
},
{
metaName: 'description',
metaContent: 'bar',
metaId: seededChance.guid(),
articleId: articleId
},
{
metaName: 'foobar',
metaContent: 'foobar',
metaId: seededChance.guid(),
articleId: articleId
}
]
};
articleId: articleId,
title: title,
permalink: title.toLowerCase().replace(' ', '-'),
content:seededChance.paragraph({sentences: 10}),
_metas: [
{
metaName: 'keyword',
metaContent: 'foo',
metaId: seededChance.guid(),
metaableId: articleId
},
{
metaName: 'description',
metaContent: 'bar',
metaId: seededChance.guid(),
metaableId: articleId
},
{
metaName: 'foobar',
metaContent: 'foobar',
metaId: seededChance.guid(),
metaableId: articleId
}
]
};

it('should instantiate a new article', () => {

Expand Down Expand Up @@ -66,23 +66,21 @@ namespace common.models {

let article = new common.models.Article(articleData);

expect(_.size(article._articleMetas)).to.equal(5);

// The first article meta is 'name' which is added via template
expect(article._articleMetas[0].articleId).to.equal(article.articleId);

expect(_.isEmpty(article._articleMetas[0].metaId)).to.be.false;
expect(article._metas[0].metaableId).to.equal(article.articleId);
expect(_.isEmpty(article._metas[0].metaId)).to.be.false;

let testableMetaTags = _.cloneDeep(article._articleMetas);
let testableMetaTags = _.cloneDeep(article._metas);
_.forEach(testableMetaTags, (tag) => {
delete(tag.metaId);
delete(tag.articleId);
delete(tag.metaableId);
delete(tag.metaableType);
});

expect(testableMetaTags).to.deep.equal([
{
metaName: 'name',
metaContent: ''
metaContent: '',
},
{
metaName: 'description',
Expand Down
12 changes: 6 additions & 6 deletions app/src/common/models/article/articleModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace common.models {

protected __nestedEntityMap:INestedEntityMap = {
_sections: this.hydrateSections,
_articleMetas: this.hydrateMetaCollectionFromTemplate,
_metas: this.hydrateMetaCollectionFromTemplate,
_author: User,
_tags: Tag,
_comments: ArticleComment,
Expand Down Expand Up @@ -34,7 +34,7 @@ namespace common.models {
public sectionsDisplay:mixins.ISectionsDisplay = undefined;

public _sections:Section<any>[] = [];
public _articleMetas:ArticleMeta[] = [];
public _metas:Meta[] = [];
public _author:User = undefined;
public _tags:LinkingTag[] = [];
public _comments:ArticleComment[] = [];
Expand Down Expand Up @@ -88,19 +88,19 @@ namespace common.models {
return (<any>_).chain(common.models.Article.articleMetaTemplate)
.map((metaTagName) => {

let existingTag = _.find((<common.models.Article>data)._articleMetas, {metaName:metaTagName});
let existingTag = _.find((<common.models.Article>data)._metas, {metaName:metaTagName});
if(_.isEmpty(existingTag)) {
return new common.models.ArticleMeta({
return new common.models.Meta({
metaName:metaTagName,
metaContent:'',
articleId:(<common.models.Article>data).articleId,
metaableId:(<common.models.Article>data).articleId,
metaId:common.models.Article.generateUUID()
});
}
return existingTag;
})
.thru((templateMeta) => {
let leftovers = _.filter((<common.models.Article>data)._articleMetas, (metaTag) => {
let leftovers = _.filter((<common.models.Article>data)._metas, (metaTag) => {
return !_.contains(templateMeta, metaTag);
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
namespace common.models {

export class ArticleMetaMock extends AbstractMock implements IMock {
export class MetaMock extends AbstractMock implements IMock {

public getModelClass():IModelClass {
return common.models.ArticleMeta;
return common.models.Meta;
}

public getMockData():Object {
Expand All @@ -12,19 +12,18 @@ namespace common.models {

return {
metaId: seededChance.guid(),
articleId: seededChance.guid(),
metaName: seededChance.pick(['name', 'description', 'keyword', 'canonical', 'other']),
metaContent: seededChance.string()
};

}

public static entity(overrides:Object = {}, exists:boolean = true):ArticleMeta {
return <ArticleMeta> new this().buildEntity(overrides, exists);
public static entity(overrides:Object = {}, exists:boolean = true):Meta {
return <Meta> new this().buildEntity(overrides, exists);
}

public static collection(count:number = 10, overrides:Object = {}, exists:boolean = true):ArticleMeta[] {
return <ArticleMeta[]>new this().buildCollection(count, overrides, exists);
public static collection(count:number = 10, overrides:Object = {}, exists:boolean = true):Meta[] {
return <Meta[]>new this().buildCollection(count, overrides, exists);
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
namespace common.models {

@common.decorators.changeAware
export class ArticleMeta extends AbstractModel {
export class Meta extends AbstractModel {

public metaId:string = undefined;
public articleId:string = undefined;
public metaableId:string = undefined;
public metaableType:string = undefined;
public metaName:string = undefined;
public metaContent:string = undefined;

Expand Down
8 changes: 4 additions & 4 deletions app/src/common/services/article/articleService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ namespace common.services.article {
it('should be able to retrieve an article by permalink', () => {

$httpBackend.expectGET('/api/articles/'+mockArticle.permalink, (headers) => {
return headers['With-Nested'] == 'articlePermalinks, articleMetas, tags, author'
return headers['With-Nested'] == 'articlePermalinks, metas, tags, author'
}).respond(mockArticle);

let article = articleService.getModel(mockArticle.permalink, ['articlePermalinks', 'articleMetas', 'tags', 'author']);
let article = articleService.getModel(mockArticle.permalink, ['articlePermalinks', 'metas', 'tags', 'author']);

expect(article).eventually.to.be.fulfilled;
expect(article).eventually.to.deep.equal(mockArticle);
Expand Down Expand Up @@ -157,9 +157,9 @@ namespace common.services.article {

let article = common.models.ArticleMock.entity();
article.setExists(true);
article._articleMetas = article._articleMetas.concat(common.models.ArticleMetaMock.collection(2, {articleId:article.articleId}, false));
article._metas = article._metas.concat(common.models.MetaMock.collection(2, {metaableId:article.articleId}, false));

$httpBackend.expectPUT('/api/articles/'+article.articleId+'/meta', _.filter(_.clone(article._articleMetas, true), (item) => {
$httpBackend.expectPUT('/api/articles/'+article.articleId+'/meta', _.filter(_.clone(article._metas, true), (item) => {
return !_.isEmpty(item.metaContent)
})).respond(201);

Expand Down
8 changes: 4 additions & 4 deletions app/src/common/services/article/articleService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ namespace common.services.article {
* @param article
* @returns {any}
*/
private saveArticleMetas(article:common.models.Article):ng.IPromise<common.models.ArticleMeta[]|boolean> {
private saveArticleMetas(article:common.models.Article):ng.IPromise<common.models.Meta[]|boolean> {

let requestObject = this.getNestedCollectionRequestObject(article, '_articleMetas', false);
let requestObject = this.getNestedCollectionRequestObject(article, '_metas', false);

requestObject = _.filter(<Array<any>>requestObject, (metaTag) => {
return !_.isEmpty(metaTag.metaContent);
Expand All @@ -143,8 +143,8 @@ namespace common.services.article {

return this.ngRestAdapter.put(`/articles/${article.articleId}/meta`, requestObject)
.then(() => {
_.invoke(article._articleMetas, 'setExists', true);
return article._articleMetas;
_.invoke(article._metas, 'setExists', true);
return article._metas;
});
}

Expand Down

0 comments on commit 4bd0b5e

Please sign in to comment.