Commit ffdb32a2277dbd5d5f208b555a872bbf004736a1
1 parent
57499aeb
Exists in
master
and in
26 other branches
Filter blocks by language in display blocks filter
Showing
3 changed files
with
35 additions
and
12 deletions
Show diff stats
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 './display-blocks.filter'; | @@ -4,71 +4,81 @@ import {DisplayBlocks} from './display-blocks.filter'; | ||
| 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 | } |