Sfoglia il codice sorgente

Merge branch 'hotfix/v8-5418-add-distinction-menu' into develop

# Conflicts:
#	config/abilities/pages/medals.yaml
#	services/layout/menuBuilder/mainMenuBuilder.ts
#	services/layout/menuBuilder/medalsMenuBuilder.ts
#	tests/units/services/layout/menuBuilder/mainMenuBuilder.test.ts
#	tests/units/services/layout/menuBuilder/rewardsMenuBuilder.test.ts
Vincent 1 anno fa
parent
commit
3ca7261cb1

+ 0 - 8
config/abilities/pages/medals.yaml

@@ -1,8 +0,0 @@
-medals_page:
-  action: 'display'
-  conditions:
-    - { function: organizationHasAnyModule, parameters: ['Medals'] }
-    - {
-        function: accessHasAnyRoleAbility,
-        parameters: [{ action: 'read', subject: 'medals' }],
-      }

+ 17 - 0
config/abilities/pages/rewards.yaml

@@ -0,0 +1,17 @@
+  access_rewards_list_page:
+    action: 'display'
+    conditions:
+      - {function: organizationHasAnyModule, parameters: ['AccessReward']}
+      - {function: accessHasAnyRoleAbility, parameters: [{action: 'read', subject: 'accessreward'}]}
+
+  access_rewards_command_page:
+    action: 'display'
+    conditions:
+      - { function: organizationHasAnyModule, parameters: [ 'AccessRewardCommand' ] }
+      - { function: accessHasAnyRoleAbility, parameters: [ { action: 'read', subject: 'accessreward' } ] }
+      -
+  rewards_list_page:
+    action: 'display'
+    conditions:
+      - { function: organizationHasAnyModule, parameters: [ 'Reward' ] }
+      - { function: accessHasAnyRoleAbility, parameters: [ { action: 'read', subject: 'reward' } ] }

+ 4 - 1
lang/fr.json

@@ -1,4 +1,8 @@
 {
+  "rewards_list": "Configuration des distinctions",
+  "access_rewards_list": "Gestion des distinctions",
+  "access_rewards_command": "Commande de distinctions",
+  "access_rewards": "Distinctions",
   "afi_export": "Export AFI",
   "item": "Détails",
   "organization_breadcrumbs": "Fiche de la structure",
@@ -437,7 +441,6 @@
   "message_templates": "Modèles",
   "communication": "Communication",
   "donors": "Partenariats et dons",
-  "medals": "Médailles",
   "stats": "Statistiques",
   "report_activity": "Rapport d'activité",
   "educations_quotas_by_education": "Quotas par enseignement",

+ 2 - 2
services/layout/menuBuilder/mainMenuBuilder.ts

@@ -6,7 +6,7 @@ import EquipmentMenuBuilder from '~/services/layout/menuBuilder/equipmentMenuBui
 import EducationalMenuBuilder from '~/services/layout/menuBuilder/educationalMenuBuilder'
 import BillingMenuBuilder from '~/services/layout/menuBuilder/billingMenuBuilder'
 import CommunicationMenuBuilder from '~/services/layout/menuBuilder/communicationMenuBuilder'
-import MedalsMenuBuilder from '~/services/layout/menuBuilder/medalsMenuBuilder'
+import RewardsMenuBuilder from '~/services/layout/menuBuilder/rewardsMenuBuilder'
 import DonorsMenuBuilder from '~/services/layout/menuBuilder/donorsMenuBuilder'
 import WebsiteAdminMenuBuilder from '~/services/layout/menuBuilder/websiteAdminMenuBuilder'
 import CotisationsMenuBuilder from '~/services/layout/menuBuilder/cotisationsMenuBuilder'
@@ -31,7 +31,7 @@ export default class MainMenuBuilder extends AbstractMenuBuilder {
       this.buildSubmenu(BillingMenuBuilder),
       this.buildSubmenu(CommunicationMenuBuilder),
       this.buildSubmenu(DonorsMenuBuilder),
-      this.buildSubmenu(MedalsMenuBuilder),
+      this.buildSubmenu(RewardsMenuBuilder),
       this.buildSubmenu(WebsiteAdminMenuBuilder),
       this.buildSubmenu(CotisationsMenuBuilder),
       this.buildSubmenu(StatsMenuBuilder),

+ 0 - 25
services/layout/menuBuilder/medalsMenuBuilder.ts

@@ -1,25 +0,0 @@
-import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
-import type { MenuItem } from '~/types/layout'
-import { MENU_LINK_TYPE } from '~/types/enum/layout'
-
-/**
- * Menu Médailles
- */
-export default class MedalsMenuBuilder extends AbstractMenuBuilder {
-  static readonly menuName = 'Medals'
-
-  /**
-   * Construit le menu Médailles et Dons, ou null si aucune page accessible
-   */
-  build(): MenuItem | null {
-    if (this.ability.can('display', 'medals_page')) {
-      return this.createItem(
-        'medals',
-        { name: 'fas fa-trophy' },
-        '/medals/list/',
-        MENU_LINK_TYPE.V1,
-      )
-    }
-    return null
-  }
-}

+ 40 - 0
services/layout/menuBuilder/rewardsMenuBuilder.ts

@@ -0,0 +1,40 @@
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
+import {MenuGroup, MenuItems} from "~/types/layout";
+import {MENU_LINK_TYPE} from "~/types/enum/layout";
+
+/**
+ * Menu Distinctions
+ */
+export default class RewardsMenuBuilder extends AbstractMenuBuilder {
+  static readonly menuName = "AccessRewards"
+
+  /**
+   * Construit le menu distinctions, ou null si aucune page accessible
+   */
+  build (): MenuItems | MenuGroup | null {
+    const children: MenuItems = []
+
+    if (this.ability.can('display', 'access_rewards_list_page')) {
+      children.push(this.createItem('access_rewards_list', {name: 'fas fa-trophy'}, '/access_rewards_not_delivered/list/', MENU_LINK_TYPE.V1))
+    }
+
+    if (this.ability.can('display', 'access_rewards_command_page')) {
+      children.push(this.createItem('access_rewards_command', {name: 'fas fa-trophy'}, '/access_reward_commands', MENU_LINK_TYPE.V1))
+    }
+
+    if (this.ability.can('display', 'rewards_list_page')) {
+      children.push(this.createItem('rewards_list', {name: 'fas fa-trophy'}, '/rewards/list/', MENU_LINK_TYPE.V1))
+    }
+
+    if (children.length > 1) {
+      // Plusieurs éléments, on retourne un groupe
+      return this.createGroup('access_rewards', {name: 'fas fa-trophy'}, children)
+    }
+    else if (children.length === 1) {
+      // Un seul élément, on retourne cet élément seul
+      return children[0]
+    }
+
+    return null
+  }
+}

+ 2 - 2
tests/units/services/layout/menuBuilder/mainMenuBuilder.test.ts

@@ -13,7 +13,7 @@ import EducationalMenuBuilder from '~/services/layout/menuBuilder/educationalMen
 import BillingMenuBuilder from '~/services/layout/menuBuilder/billingMenuBuilder'
 import CommunicationMenuBuilder from '~/services/layout/menuBuilder/communicationMenuBuilder'
 import DonorsMenuBuilder from '~/services/layout/menuBuilder/donorsMenuBuilder'
-import MedalsMenuBuilder from '~/services/layout/menuBuilder/medalsMenuBuilder'
+import RewardsMenuBuilder from '~/services/layout/menuBuilder/rewardsMenuBuilder'
 import WebsiteAdminMenuBuilder from '~/services/layout/menuBuilder/websiteAdminMenuBuilder'
 import CotisationsMenuBuilder from '~/services/layout/menuBuilder/cotisationsMenuBuilder'
 import StatsMenuBuilder from '~/services/layout/menuBuilder/statsMenuBuilder'
@@ -73,7 +73,7 @@ describe('build', () => {
     // @ts-ignore
     expect(menuBuilder.buildSubmenu).toBeCalledWith(DonorsMenuBuilder)
     // @ts-ignore
-    expect(menuBuilder.buildSubmenu).toBeCalledWith(MedalsMenuBuilder)
+    expect(menuBuilder.buildSubmenu).toBeCalledWith(RewardsMenuBuilder)
     // @ts-ignore
     expect(menuBuilder.buildSubmenu).toBeCalledWith(WebsiteAdminMenuBuilder)
     // @ts-ignore

+ 9 - 11
tests/units/services/layout/menuBuilder/medalsMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/rewardsMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import type { RuntimeConfig } from '@nuxt/schema'
 import type { AnyAbility } from '@casl/ability/dist/types'
 import type { AccessProfile, organizationState } from '~/types/interfaces'
-import MedalsMenuBuilder from '~/services/layout/menuBuilder/medalsMenuBuilder'
+import RewardsMenuBuilder from '~/services/layout/menuBuilder/rewardsMenuBuilder'
 import type { MenuGroup, MenuItem } from '~/types/layout'
 import { MENU_LINK_TYPE } from '~/types/enum/layout'
 
@@ -10,7 +10,7 @@ let runtimeConfig: RuntimeConfig
 let ability: AnyAbility
 let organizationProfile: organizationState
 let accessProfile: AccessProfile
-let menuBuilder: MedalsMenuBuilder
+let menuBuilder: RewardsMenuBuilder
 
 beforeEach(() => {
   runtimeConfig = vi.fn() as any as RuntimeConfig
@@ -20,7 +20,7 @@ beforeEach(() => {
 
   runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
 
-  menuBuilder = new MedalsMenuBuilder(
+  menuBuilder = new RewardsMenuBuilder(
     runtimeConfig,
     ability,
     organizationProfile,
@@ -30,7 +30,7 @@ beforeEach(() => {
 
 describe('getMenuName', () => {
   test('validate name', () => {
-    expect(menuBuilder.getMenuName()).toEqual('Medals')
+    expect(menuBuilder.getMenuName()).toEqual('AccessRewards')
   })
 })
 
@@ -38,16 +38,14 @@ describe('build', () => {
   test('has all items', () => {
     ability.can = vi.fn(() => true)
 
-    // Should return a MenuItem
-    const result = menuBuilder.build() as MenuItem
+    // Should return a MenuGroup
+    const result = menuBuilder.build() as MenuGroup
 
     expect(result).toEqual({
-      label: 'medals',
-      icon: { name: 'fas fa-trophy' },
-      to: 'https://mydomain.com/#/medals/list/',
-      type: MENU_LINK_TYPE.V1,
-      active: false,
+      label: 'access_rewards',
     })
+    // @ts-ignore
+    expect(result.children.length).toEqual(3)
   })
 
   test('has no items', () => {