From a7f0a708b372dae33b10a31cba307774e7eaa451 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 12 May 2016 14:00:37 -0300 Subject: [PATCH] Use block endpoint to get block content --- src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts | 27 ++++++--------------------- src/app/layout/blocks/recent-documents/recent-documents-block.component.ts | 18 +++++------------- src/lib/ng-noosfero-api/http/block.service.ts | 40 ++++++++++++++++++++++++++++++++++++++++ src/lib/ng-noosfero-api/interfaces/block.ts | 3 ++- 4 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 src/lib/ng-noosfero-api/http/block.service.ts diff --git a/src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts b/src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts index ff0895e..f2cf273 100644 --- a/src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts +++ b/src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts @@ -11,9 +11,9 @@ describe("Components", () => { describe("Recent Documents Block Component", () => { let settingsObj = {}; - let mockedArticleService = { - getByProfile: (profile: noosfero.Profile, filters: any): any => { - return Promise.resolve({ data: [{ name: "article1" }], headers: (name: string) => { return name; } }); + let mockedBlockService = { + getApiContent: (block: noosfero.Block): any => { + return Promise.resolve({ articles: [{ name: "article1" }], headers: (name: string) => { return name; } }); } }; let profile = { name: 'profile-name' }; @@ -25,8 +25,8 @@ describe("Components", () => { function getProviders() { return [ new Provider('$state', { useValue: state }), - new Provider('ArticleService', { - useValue: mockedArticleService + new Provider('BlockService', { + useValue: mockedBlockService }), ].concat(provideFilters("truncateFilter", "stripTagsFilter")); } @@ -44,7 +44,7 @@ describe("Components", () => { } - it("get recent documents from the article service", done => { + it("get recent documents from the block service", done => { tcb.createAsync(getComponent()).then(fixture => { let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance; expect(recentDocumentsBlock.documents).toEqual([{ name: "article1" }]); @@ -61,20 +61,5 @@ describe("Components", () => { }); }); - it("it uses default limit 5 if not defined on block", done => { - settingsObj = null; - mockedArticleService = jasmine.createSpyObj("mockedArticleService", ["getByProfile"]); - (mockedArticleService).mocked = true; - let thenMocked = jasmine.createSpy("then"); - mockedArticleService.getByProfile = jasmine.createSpy("getByProfile").and.returnValue({then: thenMocked}); - let getByProfileFunct = mockedArticleService.getByProfile; - tcb.createAsync(getComponent()).then(fixture => { - let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance; - recentDocumentsBlock.openDocument({ path: "path", profile: { identifier: "identifier" } }); - expect(getByProfileFunct).toHaveBeenCalledWith(profile, { content_type: 'TinyMceArticle', per_page: 5 }); - done(); - }); - }); - }); }); diff --git a/src/app/layout/blocks/recent-documents/recent-documents-block.component.ts b/src/app/layout/blocks/recent-documents/recent-documents-block.component.ts index 54e9c2e..190b992 100644 --- a/src/app/layout/blocks/recent-documents/recent-documents-block.component.ts +++ b/src/app/layout/blocks/recent-documents/recent-documents-block.component.ts @@ -1,11 +1,11 @@ import {Component, Inject, Input} from "ng-forward"; -import {ArticleService} from "../../../../lib/ng-noosfero-api/http/article.service"; +import {BlockService} from "../../../../lib/ng-noosfero-api/http/block.service"; @Component({ selector: "noosfero-recent-documents-block", templateUrl: 'app/layout/blocks/recent-documents/recent-documents-block.html' }) -@Inject(ArticleService, "$state") +@Inject(BlockService, "$state") export class RecentDocumentsBlockComponent { @Input() block: any; @@ -13,23 +13,15 @@ export class RecentDocumentsBlockComponent { profile: any; documents: any; - documentsLoaded: boolean = false; - constructor(private articleService: ArticleService, private $state: any) { - } + constructor(private blockService: BlockService, private $state: any) { } ngOnInit() { this.profile = this.owner; this.documents = []; - - let limit = ((this.block && this.block.settings) ? this.block.settings.limit : null) || 5; - // FIXME get all text articles - // FIXME make the getByProfile a generic method where we tell the type passing a class TinyMceArticle - // and the promise should be of type TinyMceArticle[], per example - this.articleService.getByProfile(this.profile, { content_type: 'TinyMceArticle', per_page: limit }) - .then((result: noosfero.RestResult) => { - this.documents = result.data; + this.blockService.getApiContent(this.block).then((content: any) => { + this.documents = content.articles; this.documentsLoaded = true; }); } diff --git a/src/lib/ng-noosfero-api/http/block.service.ts b/src/lib/ng-noosfero-api/http/block.service.ts new file mode 100644 index 0000000..f8b0378 --- /dev/null +++ b/src/lib/ng-noosfero-api/http/block.service.ts @@ -0,0 +1,40 @@ +import { Injectable, Inject } from "ng-forward"; +import {RestangularService} from "./restangular_service"; +import {ProfileService} from "./profile.service"; + +@Injectable() +@Inject("Restangular", "$q", "$log") +export class BlockService extends RestangularService { + + constructor(Restangular: restangular.IService, $q: ng.IQService, $log: ng.ILogService) { + super(Restangular, $q, $log); + } + + getResourcePath() { + return "blocks"; + } + + getDataKeys() { + return { + singular: 'block', + plural: 'blocks' + }; + } + + getApiContent(block: noosfero.Block) { + let apiContentPromise = this.$q.defer(); + if (block) { + if (block.api_content) { + apiContentPromise.resolve(block.api_content); + } else { + this.get(block.id) + .then((result: noosfero.RestResult) => { + block = result.data; + apiContentPromise.resolve(block.api_content); + }); + } + } + return apiContentPromise.promise; + } + +} diff --git a/src/lib/ng-noosfero-api/interfaces/block.ts b/src/lib/ng-noosfero-api/interfaces/block.ts index bef92e1..b1ef409 100644 --- a/src/lib/ng-noosfero-api/interfaces/block.ts +++ b/src/lib/ng-noosfero-api/interfaces/block.ts @@ -1,6 +1,7 @@ namespace noosfero { - export interface Block { + export interface Block extends RestModel { id: number; settings: any; + api_content: any; } } -- libgit2 0.21.2