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