From 4de49a37ba5215c9d4f0541eae6a5fe2e2b6fba5 Mon Sep 17 00:00:00 2001 From: Carlos Purificacao Date: Tue, 24 May 2016 10:58:30 -0300 Subject: [PATCH] Added removed listener to RecentDocuments Block --- src/app/layout/blocks/recent-documents/recent-documents-block.component.spec.ts | 25 +++++++++++++++++++++++-- src/app/layout/blocks/recent-documents/recent-documents-block.component.ts | 13 +++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) 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 f2cf273..ab6488c 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 @@ -2,6 +2,7 @@ import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builde import {Provider, Input, provide, Component} from 'ng-forward'; import {provideFilters} from '../../../../spec/helpers'; import {RecentDocumentsBlockComponent} from './recent-documents-block.component'; +import * as helpers from "./../../../../spec/helpers"; const htmlTemplate: string = ''; @@ -11,11 +12,13 @@ describe("Components", () => { describe("Recent Documents Block Component", () => { let settingsObj = {}; + let article = { name: "article1" }; let mockedBlockService = { getApiContent: (block: noosfero.Block): any => { - return Promise.resolve({ articles: [{ name: "article1" }], headers: (name: string) => { return name; } }); + return Promise.resolve({ articles: [ article ], headers: (name: string) => { return name; } }); } }; + let articleService: any = helpers.mocks.articleService; let profile = { name: 'profile-name' }; beforeEach(angular.mock.module("templates")); @@ -28,6 +31,7 @@ describe("Components", () => { new Provider('BlockService', { useValue: mockedBlockService }), + new Provider('ArticleService', { useValue: articleService }) ].concat(provideFilters("truncateFilter", "stripTagsFilter")); } let componentClass: any = null; @@ -47,7 +51,7 @@ describe("Components", () => { 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" }]); + expect(recentDocumentsBlock.documents).toEqual([ article ]); done(); }); }); @@ -61,5 +65,22 @@ describe("Components", () => { }); }); + it("verify removed article has been removed from list", done => { + tcb.createAsync(getComponent()).then(fixture => { + let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance; + expect(recentDocumentsBlock.documents.length).toEqual(1); + simulateRemovedEvent(recentDocumentsBlock); + expect(recentDocumentsBlock.documents.length).toEqual(0); + done(); + }) + }); + + /** + * Simulate the ArticleService ArticleEvent.removed event + */ + function simulateRemovedEvent(recentDocumentsBlock: RecentDocumentsBlockComponent) { + recentDocumentsBlock.articleService["notifyArticleRemovedListeners"](article); + } + }); }); 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 190b992..d051a92 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,13 @@ import {Component, Inject, Input} from "ng-forward"; import {BlockService} from "../../../../lib/ng-noosfero-api/http/block.service"; +import {ArticleService} from "./../../../../lib/ng-noosfero-api/http/article.service" +import {Arrays} from "./../../../../lib/util/arrays" @Component({ selector: "noosfero-recent-documents-block", templateUrl: 'app/layout/blocks/recent-documents/recent-documents-block.html' }) -@Inject(BlockService, "$state") +@Inject(BlockService, "$state", ArticleService) export class RecentDocumentsBlockComponent { @Input() block: any; @@ -15,7 +17,7 @@ export class RecentDocumentsBlockComponent { documents: any; documentsLoaded: boolean = false; - constructor(private blockService: BlockService, private $state: any) { } + constructor(private blockService: BlockService, private $state: any, public articleService: ArticleService) { } ngOnInit() { this.profile = this.owner; @@ -24,7 +26,14 @@ export class RecentDocumentsBlockComponent { this.documents = content.articles; this.documentsLoaded = true; }); + this.watchArticles(); } + + watchArticles() { + this.articleService.subscribeToArticleRemoved((article: noosfero.Article) => { + Arrays.remove(this.documents, article); + }); + } openDocument(article: any) { this.$state.go("main.profile.page", { page: article.path, profile: article.profile.identifier }); -- libgit2 0.21.2