Commit 4de49a37ba5215c9d4f0541eae6a5fe2e2b6fba5

Authored by Carlos Purificação
1 parent aa1e3108

Added removed listener to RecentDocuments Block

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 @@ -2,6 +2,7 @@ import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builde
2 import {Provider, Input, provide, Component} from 'ng-forward'; 2 import {Provider, Input, provide, Component} from 'ng-forward';
3 import {provideFilters} from '../../../../spec/helpers'; 3 import {provideFilters} from '../../../../spec/helpers';
4 import {RecentDocumentsBlockComponent} from './recent-documents-block.component'; 4 import {RecentDocumentsBlockComponent} from './recent-documents-block.component';
  5 +import * as helpers from "./../../../../spec/helpers";
5 6
6 const htmlTemplate: string = '<noosfero-recent-documents-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-recent-documents-block>'; 7 const htmlTemplate: string = '<noosfero-recent-documents-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-recent-documents-block>';
7 8
@@ -11,11 +12,13 @@ describe(&quot;Components&quot;, () =&gt; { @@ -11,11 +12,13 @@ describe(&quot;Components&quot;, () =&gt; {
11 describe("Recent Documents Block Component", () => { 12 describe("Recent Documents Block Component", () => {
12 13
13 let settingsObj = {}; 14 let settingsObj = {};
  15 + let article = <noosfero.Article>{ name: "article1" };
14 let mockedBlockService = { 16 let mockedBlockService = {
15 getApiContent: (block: noosfero.Block): any => { 17 getApiContent: (block: noosfero.Block): any => {
16 - return Promise.resolve({ articles: [{ name: "article1" }], headers: (name: string) => { return name; } }); 18 + return Promise.resolve({ articles: [ article ], headers: (name: string) => { return name; } });
17 } 19 }
18 }; 20 };
  21 + let articleService: any = helpers.mocks.articleService;
19 let profile = { name: 'profile-name' }; 22 let profile = { name: 'profile-name' };
20 beforeEach(angular.mock.module("templates")); 23 beforeEach(angular.mock.module("templates"));
21 24
@@ -28,6 +31,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -28,6 +31,7 @@ describe(&quot;Components&quot;, () =&gt; {
28 new Provider('BlockService', { 31 new Provider('BlockService', {
29 useValue: mockedBlockService 32 useValue: mockedBlockService
30 }), 33 }),
  34 + new Provider('ArticleService', { useValue: articleService })
31 ].concat(provideFilters("truncateFilter", "stripTagsFilter")); 35 ].concat(provideFilters("truncateFilter", "stripTagsFilter"));
32 } 36 }
33 let componentClass: any = null; 37 let componentClass: any = null;
@@ -47,7 +51,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -47,7 +51,7 @@ describe(&quot;Components&quot;, () =&gt; {
47 it("get recent documents from the block service", done => { 51 it("get recent documents from the block service", done => {
48 tcb.createAsync(getComponent()).then(fixture => { 52 tcb.createAsync(getComponent()).then(fixture => {
49 let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance; 53 let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance;
50 - expect(recentDocumentsBlock.documents).toEqual([{ name: "article1" }]); 54 + expect(recentDocumentsBlock.documents).toEqual([ article ]);
51 done(); 55 done();
52 }); 56 });
53 }); 57 });
@@ -61,5 +65,22 @@ describe(&quot;Components&quot;, () =&gt; { @@ -61,5 +65,22 @@ describe(&quot;Components&quot;, () =&gt; {
61 }); 65 });
62 }); 66 });
63 67
  68 + it("verify removed article has been removed from list", done => {
  69 + tcb.createAsync(getComponent()).then(fixture => {
  70 + let recentDocumentsBlock: RecentDocumentsBlockComponent = fixture.debugElement.componentViewChildren[0].componentInstance;
  71 + expect(recentDocumentsBlock.documents.length).toEqual(1);
  72 + simulateRemovedEvent(recentDocumentsBlock);
  73 + expect(recentDocumentsBlock.documents.length).toEqual(0);
  74 + done();
  75 + })
  76 + });
  77 +
  78 + /**
  79 + * Simulate the ArticleService ArticleEvent.removed event
  80 + */
  81 + function simulateRemovedEvent(recentDocumentsBlock: RecentDocumentsBlockComponent) {
  82 + recentDocumentsBlock.articleService["notifyArticleRemovedListeners"](article);
  83 + }
  84 +
64 }); 85 });
65 }); 86 });
src/app/layout/blocks/recent-documents/recent-documents-block.component.ts
1 import {Component, Inject, Input} from "ng-forward"; 1 import {Component, Inject, Input} from "ng-forward";
2 import {BlockService} from "../../../../lib/ng-noosfero-api/http/block.service"; 2 import {BlockService} from "../../../../lib/ng-noosfero-api/http/block.service";
  3 +import {ArticleService} from "./../../../../lib/ng-noosfero-api/http/article.service"
  4 +import {Arrays} from "./../../../../lib/util/arrays"
3 5
4 @Component({ 6 @Component({
5 selector: "noosfero-recent-documents-block", 7 selector: "noosfero-recent-documents-block",
6 templateUrl: 'app/layout/blocks/recent-documents/recent-documents-block.html' 8 templateUrl: 'app/layout/blocks/recent-documents/recent-documents-block.html'
7 }) 9 })
8 -@Inject(BlockService, "$state") 10 +@Inject(BlockService, "$state", ArticleService)
9 export class RecentDocumentsBlockComponent { 11 export class RecentDocumentsBlockComponent {
10 12
11 @Input() block: any; 13 @Input() block: any;
@@ -15,7 +17,7 @@ export class RecentDocumentsBlockComponent { @@ -15,7 +17,7 @@ export class RecentDocumentsBlockComponent {
15 documents: any; 17 documents: any;
16 documentsLoaded: boolean = false; 18 documentsLoaded: boolean = false;
17 19
18 - constructor(private blockService: BlockService, private $state: any) { } 20 + constructor(private blockService: BlockService, private $state: any, public articleService: ArticleService) { }
19 21
20 ngOnInit() { 22 ngOnInit() {
21 this.profile = this.owner; 23 this.profile = this.owner;
@@ -24,7 +26,14 @@ export class RecentDocumentsBlockComponent { @@ -24,7 +26,14 @@ export class RecentDocumentsBlockComponent {
24 this.documents = content.articles; 26 this.documents = content.articles;
25 this.documentsLoaded = true; 27 this.documentsLoaded = true;
26 }); 28 });
  29 + this.watchArticles();
27 } 30 }
  31 +
  32 + watchArticles() {
  33 + this.articleService.subscribeToArticleRemoved((article: noosfero.Article) => {
  34 + Arrays.remove(this.documents, article);
  35 + });
  36 + }
28 37
29 openDocument(article: any) { 38 openDocument(article: any) {
30 this.$state.go("main.profile.page", { page: article.path, profile: article.profile.identifier }); 39 this.$state.go("main.profile.page", { page: article.path, profile: article.profile.identifier });