Commit e20ec7003e65b24c3ee197622e7d172ab4865440
1 parent
9e3a58f8
Exists in
master
and in
1 other branch
refactory of code which are calling article service
Showing
6 changed files
with
32 additions
and
15 deletions
Show diff stats
src/app/components/noosfero-blocks/recent-documents/recent-documents.component.spec.ts
@@ -18,7 +18,7 @@ describe("Components", () => { | @@ -18,7 +18,7 @@ describe("Components", () => { | ||
18 | new Provider('ArticleService', { | 18 | new Provider('ArticleService', { |
19 | useValue: { | 19 | useValue: { |
20 | getByProfile: (profileId: number, filters: any): any => { | 20 | getByProfile: (profileId: number, filters: any): any => { |
21 | - return Promise.resolve({ data: { articles: [{ name: "article1" }] } }); | 21 | + return Promise.resolve({ articles: [{ name: "article1" }] }); |
22 | } | 22 | } |
23 | } | 23 | } |
24 | }), | 24 | }), |
src/app/components/noosfero-blocks/recent-documents/recent-documents.component.ts
@@ -27,8 +27,8 @@ export class RecentDocumentsBlock { | @@ -27,8 +27,8 @@ export class RecentDocumentsBlock { | ||
27 | // FIXME get all text articles | 27 | // FIXME get all text articles |
28 | // FIXME make the getByProfile a generic method where we tell the type passing a class TinyMceArticle | 28 | // FIXME make the getByProfile a generic method where we tell the type passing a class TinyMceArticle |
29 | // and the promise should be of type TinyMceArticle[], per example | 29 | // and the promise should be of type TinyMceArticle[], per example |
30 | - this.articleService.getByProfile(this.profile.id, { content_type: 'TinyMceArticle', per_page: limit }).then((response: any) => { | ||
31 | - this.documents = response.data.articles; | 30 | + this.articleService.getByProfile(this.profile.id, { content_type: 'TinyMceArticle', per_page: limit }).then((result: noosfero.ArticlesResult) => { |
31 | + this.documents = result.articles; | ||
32 | this.documentsLoaded = true; | 32 | this.documentsLoaded = true; |
33 | }); | 33 | }); |
34 | } | 34 | } |
src/app/content-viewer/content-viewer.component.ts
1 | -import * as noosfero from "../models/interfaces"; | ||
2 | - | ||
3 | - | ||
4 | import {ArticleView} from "../components/noosfero-articles/article/article_view"; | 1 | import {ArticleView} from "../components/noosfero-articles/article/article_view"; |
5 | import {Input, Component, StateConfig, Inject, provide} from "ng-forward"; | 2 | import {Input, Component, StateConfig, Inject, provide} from "ng-forward"; |
6 | 3 | ||
@@ -34,8 +31,8 @@ export class ContentViewer { | @@ -34,8 +31,8 @@ export class ContentViewer { | ||
34 | this.profileService.getCurrentProfile().then((profile: noosfero.Profile) => { | 31 | this.profileService.getCurrentProfile().then((profile: noosfero.Profile) => { |
35 | this.profile = profile; | 32 | this.profile = profile; |
36 | return this.articleService.getByProfile(this.profile.id, { path: this.$stateParams["page"] }); | 33 | return this.articleService.getByProfile(this.profile.id, { path: this.$stateParams["page"] }); |
37 | - }).then((response: restangular.IResponse) => { | ||
38 | - this.article = response.data.article; | 34 | + }).then((result: noosfero.ArticleResult) => { |
35 | + this.article = result.article; | ||
39 | }); | 36 | }); |
40 | } | 37 | } |
41 | } | 38 | } |
src/lib/ng-noosfero-api/http/article.service.spec.ts
@@ -64,8 +64,8 @@ describe("Services", () => { | @@ -64,8 +64,8 @@ describe("Services", () => { | ||
64 | it("should create an article in a profile", (done) => { | 64 | it("should create an article in a profile", (done) => { |
65 | let profileId = 1; | 65 | let profileId = 1; |
66 | let article: noosfero.Article = <any>{ id: null}; | 66 | let article: noosfero.Article = <any>{ id: null}; |
67 | - $httpBackend.expectPOST(`/api/v1/profiles/${profileId}/articles`, { article: article }).respond(200, { id: 2 }); | ||
68 | - articleService.create(profileId, article).then((result: noosfero.Article) => { | 67 | + $httpBackend.expectPOST(`/api/v1/profiles/${profileId}/articles`, { article: article }).respond(200, {article: { id: 2 }}); |
68 | + articleService.create(profileId, article).then((article: noosfero.Article) => { | ||
69 | expect(article).toEqual({ id: 2 }); | 69 | expect(article).toEqual({ id: 2 }); |
70 | done(); | 70 | done(); |
71 | }); | 71 | }); |
src/lib/ng-noosfero-api/http/article.service.ts
@@ -17,11 +17,11 @@ export class ArticleService extends RestangularWrapperService<noosfero.Article> | @@ -17,11 +17,11 @@ export class ArticleService extends RestangularWrapperService<noosfero.Article> | ||
17 | return { | 17 | return { |
18 | singular: 'article', | 18 | singular: 'article', |
19 | plural: 'articles' | 19 | plural: 'articles' |
20 | - } | 20 | + }; |
21 | } | 21 | } |
22 | 22 | ||
23 | create(profileId: number, article: noosfero.Article): ng.IPromise<noosfero.Article> { | 23 | create(profileId: number, article: noosfero.Article): ng.IPromise<noosfero.Article> { |
24 | - return this.post(this.Restangular.one('profiles', profileId), article); | 24 | + return this.post<noosfero.Article>(this.Restangular.one('profiles', profileId), article); |
25 | } | 25 | } |
26 | 26 | ||
27 | // // TODO create a handle ErrorFactory too and move handleSuccessFactory and handleErrorFactory | 27 | // // TODO create a handle ErrorFactory too and move handleSuccessFactory and handleErrorFactory |
src/lib/ng-noosfero-api/http/restangular_wrapper_service.ts
@@ -13,16 +13,19 @@ export abstract class RestangularWrapperService<T> { | @@ -13,16 +13,19 @@ export abstract class RestangularWrapperService<T> { | ||
13 | return this.Restangular.one(this.getPath(), id); | 13 | return this.Restangular.one(this.getPath(), id); |
14 | } | 14 | } |
15 | 15 | ||
16 | - protected post(elementRoot: restangular.IElement, element?: any, path?: string, params?: any, headers?: any): ng.IPromise<T> { | 16 | + protected post<T>(elementRoot: restangular.IElement, element?: any, path?: string, params?: any, headers?: any): ng.IPromise<T> { |
17 | let deferred = this.$q.defer<T>(); | 17 | let deferred = this.$q.defer<T>(); |
18 | 18 | ||
19 | + let postData = <any>{}; | ||
20 | + postData[this.getDataKeys().singular] = element; | ||
21 | + | ||
19 | this.customPOST( | 22 | this.customPOST( |
20 | elementRoot, | 23 | elementRoot, |
21 | - element, | 24 | + postData, |
22 | this.getPath(), | 25 | this.getPath(), |
23 | {} | 26 | {} |
24 | ) | 27 | ) |
25 | - .then(this.getHandleSuccessFunction(deferred)) | 28 | + .then(this.getPostSuccessHandleFunction(deferred)) |
26 | .catch(this.getHandleErrorFunction(deferred)); | 29 | .catch(this.getHandleErrorFunction(deferred)); |
27 | 30 | ||
28 | return deferred.promise; | 31 | return deferred.promise; |
@@ -67,6 +70,23 @@ export abstract class RestangularWrapperService<T> { | @@ -67,6 +70,23 @@ export abstract class RestangularWrapperService<T> { | ||
67 | return successFunction; | 70 | return successFunction; |
68 | } | 71 | } |
69 | 72 | ||
73 | + getPostSuccessHandleFunction<T>(deferred: ng.IDeferred<T>): (response: restangular.IResponse) => void { | ||
74 | + let self = this; | ||
75 | + let successFunction = (response: restangular.IResponse): void => { | ||
76 | + if (self.$log) { | ||
77 | + self.$log.debug("Post successfully executed", self, response); | ||
78 | + } | ||
79 | + let data = response.data; | ||
80 | + | ||
81 | + if ((<Object>data).hasOwnProperty(self.getDataKeys().singular)) { | ||
82 | + deferred.resolve(data[self.getDataKeys().singular]); | ||
83 | + } else { | ||
84 | + deferred.resolve(data); | ||
85 | + } | ||
86 | + }; | ||
87 | + return successFunction; | ||
88 | + } | ||
89 | + | ||
70 | getHandleErrorFunction<T>(deferred: ng.IDeferred<T>): (response: restangular.IResponse) => void { | 90 | getHandleErrorFunction<T>(deferred: ng.IDeferred<T>): (response: restangular.IResponse) => void { |
71 | let self = this; | 91 | let self = this; |
72 | let successFunction = (response: restangular.IResponse): void => { | 92 | let successFunction = (response: restangular.IResponse): void => { |