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 | 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 './display-blocks.filter'; |
| 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 | } | ... | ... |