Commit ffdb32a2277dbd5d5f208b555a872bbf004736a1

Authored by Victor Costa
1 parent 57499aeb

Filter blocks by language in display blocks filter

src/app/layout/boxes/boxes.component.spec.ts
@@ -33,12 +33,14 @@ describe("Boxes Component", () => { @@ -33,12 +33,14 @@ describe("Boxes Component", () => {
33 providers: [ 33 providers: [
34 helpers.createProviderToValue('SessionService', helpers.mocks.sessionWithCurrentUser({})), 34 helpers.createProviderToValue('SessionService', helpers.mocks.sessionWithCurrentUser({})),
35 helpers.createProviderToValue('AuthService', helpers.mocks.authService), 35 helpers.createProviderToValue('AuthService', helpers.mocks.authService),
36 - helpers.createProviderToValue('$state', state) 36 + helpers.createProviderToValue('$state', state),
  37 + helpers.createProviderToValue('TranslatorService', translatorService)
37 ] 38 ]
38 }); 39 });
39 helper = new ComponentTestHelper<BoxesComponent>(cls, done); 40 helper = new ComponentTestHelper<BoxesComponent>(cls, done);
40 }); 41 });
41 42
  43 + let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]);
42 let state = jasmine.createSpyObj("state", ["current"]); 44 let state = jasmine.createSpyObj("state", ["current"]);
43 state.current = { name: "" }; 45 state.current = { name: "" };
44 46
src/app/layout/boxes/display-blocks.filter.spec.ts
@@ -4,71 +4,81 @@ import {DisplayBlocks} from &#39;./display-blocks.filter&#39;; @@ -4,71 +4,81 @@ import {DisplayBlocks} from &#39;./display-blocks.filter&#39;;
4 describe("Filters", () => { 4 describe("Filters", () => {
5 describe("Display Blocks Filter", () => { 5 describe("Display Blocks Filter", () => {
6 6
  7 + let translatorService = jasmine.createSpyObj("translatorService", ["currentLanguage"]);
  8 +
7 it("not fail when blocks is null", done => { 9 it("not fail when blocks is null", done => {
8 - let filter = new DisplayBlocks(); 10 + let filter = new DisplayBlocks(translatorService);
9 expect(filter.transform(null, true, <noosfero.User>{})).toEqual([]); 11 expect(filter.transform(null, true, <noosfero.User>{})).toEqual([]);
10 done(); 12 done();
11 }); 13 });
12 14
13 it("return blocks when no setting is passed", done => { 15 it("return blocks when no setting is passed", done => {
14 let blocks = [{}]; 16 let blocks = [{}];
15 - let filter = new DisplayBlocks(); 17 + let filter = new DisplayBlocks(translatorService);
16 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); 18 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);
17 done(); 19 done();
18 }); 20 });
19 21
20 it("return blocks when no display is passed", done => { 22 it("return blocks when no display is passed", done => {
21 let blocks = [{ setting: {} }]; 23 let blocks = [{ setting: {} }];
22 - let filter = new DisplayBlocks(); 24 + let filter = new DisplayBlocks(translatorService);
23 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); 25 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);
24 done(); 26 done();
25 }); 27 });
26 28
27 it("filter invisible blocks", done => { 29 it("filter invisible blocks", done => {
28 let blocks = [{ settings: { display: "never" } }]; 30 let blocks = [{ settings: { display: "never" } }];
29 - let filter = new DisplayBlocks(); 31 + let filter = new DisplayBlocks(translatorService);
30 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); 32 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);
31 done(); 33 done();
32 }); 34 });
33 35
34 it("filter blocks with except_home_page in homepage", done => { 36 it("filter blocks with except_home_page in homepage", done => {
35 let blocks = [{ settings: { display: "except_home_page" } }]; 37 let blocks = [{ settings: { display: "except_home_page" } }];
36 - let filter = new DisplayBlocks(); 38 + let filter = new DisplayBlocks(translatorService);
37 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); 39 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);
38 done(); 40 done();
39 }); 41 });
40 42
41 it("filter blocks with home_page_only outside homepage", done => { 43 it("filter blocks with home_page_only outside homepage", done => {
42 let blocks = [{ settings: { display: "home_page_only" } }]; 44 let blocks = [{ settings: { display: "home_page_only" } }];
43 - let filter = new DisplayBlocks(); 45 + let filter = new DisplayBlocks(translatorService);
44 expect(filter.transform(<any>blocks, false, <noosfero.User>{})).toEqual([]); 46 expect(filter.transform(<any>blocks, false, <noosfero.User>{})).toEqual([]);
45 done(); 47 done();
46 }); 48 });
47 49
48 it("show all blocks when display_user is all for logged user", done => { 50 it("show all blocks when display_user is all for logged user", done => {
49 let blocks = [{ settings: { display_user: "all" } }]; 51 let blocks = [{ settings: { display_user: "all" } }];
50 - let filter = new DisplayBlocks(); 52 + let filter = new DisplayBlocks(translatorService);
51 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks); 53 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual(blocks);
52 done(); 54 done();
53 }); 55 });
54 56
55 it("show all blocks when display_user is all for not logged user", done => { 57 it("show all blocks when display_user is all for not logged user", done => {
56 let blocks = [{ settings: { display_user: "all" } }]; 58 let blocks = [{ settings: { display_user: "all" } }];
57 - let filter = new DisplayBlocks(); 59 + let filter = new DisplayBlocks(translatorService);
58 expect(filter.transform(<any>blocks, true, null)).toEqual(blocks); 60 expect(filter.transform(<any>blocks, true, null)).toEqual(blocks);
59 done(); 61 done();
60 }); 62 });
61 63
62 it("filter blocks when display_user is logged for not logged user", done => { 64 it("filter blocks when display_user is logged for not logged user", done => {
63 let blocks = [{ settings: { display_user: "logged" } }]; 65 let blocks = [{ settings: { display_user: "logged" } }];
64 - let filter = new DisplayBlocks(); 66 + let filter = new DisplayBlocks(translatorService);
65 expect(filter.transform(<any>blocks, true, null)).toEqual([]); 67 expect(filter.transform(<any>blocks, true, null)).toEqual([]);
66 done(); 68 done();
67 }); 69 });
68 70
69 it("filter blocks when display_user is not_logged for logged user", done => { 71 it("filter blocks when display_user is not_logged for logged user", done => {
70 let blocks = [{ settings: { display_user: "not_logged" } }]; 72 let blocks = [{ settings: { display_user: "not_logged" } }];
71 - let filter = new DisplayBlocks(); 73 + let filter = new DisplayBlocks(translatorService);
  74 + expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);
  75 + done();
  76 + });
  77 +
  78 + it("filter blocks with different language", done => {
  79 + let blocks = [{ settings: { language: "en" } }];
  80 + translatorService.currentLanguage = jasmine.createSpy("currentLanguage").and.returnValue("pt");
  81 + let filter = new DisplayBlocks(translatorService);
72 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]); 82 expect(filter.transform(<any>blocks, true, <noosfero.User>{})).toEqual([]);
73 done(); 83 done();
74 }); 84 });
src/app/layout/boxes/display-blocks.filter.ts
1 import {Pipe, Inject} from "ng-forward"; 1 import {Pipe, Inject} from "ng-forward";
  2 +import {TranslatorService} from "../../shared/services/translator.service";
2 3
3 @Pipe("displayBlocks") 4 @Pipe("displayBlocks")
  5 +@Inject(TranslatorService)
4 export class DisplayBlocks { 6 export class DisplayBlocks {
5 7
  8 + constructor(private translatorService: TranslatorService) { }
  9 +
6 transform(blocks: noosfero.Block[], isHomepage: boolean, currentUser: noosfero.User) { 10 transform(blocks: noosfero.Block[], isHomepage: boolean, currentUser: noosfero.User) {
7 let selected: noosfero.Block[] = []; 11 let selected: noosfero.Block[] = [];
8 blocks = blocks || []; 12 blocks = blocks || [];
9 for (let block of blocks) { 13 for (let block of blocks) {
10 - if (this.visible(block, isHomepage) && this.displayToUser(block, currentUser)) { 14 + if (this.visible(block, isHomepage) && this.displayToUser(block, currentUser) &&
  15 + this.displayOnLanguage(block, this.translatorService.currentLanguage())) {
11 selected.push(block); 16 selected.push(block);
12 } 17 }
13 } 18 }
@@ -24,4 +29,10 @@ export class DisplayBlocks { @@ -24,4 +29,10 @@ export class DisplayBlocks {
24 return !displayUser || displayUser === "all" || 29 return !displayUser || displayUser === "all" ||
25 (currentUser ? displayUser === "logged" : displayUser === "not_logged"); 30 (currentUser ? displayUser === "logged" : displayUser === "not_logged");
26 } 31 }
  32 +
  33 + private displayOnLanguage(block: noosfero.Block, language: string) {
  34 + let displayLanguage = block.settings ? (<any>block.settings)['language'] : null;
  35 + return !displayLanguage || displayLanguage === "all" ||
  36 + language === displayLanguage;
  37 + }
27 } 38 }