Parcourir la source

reorganize menuBuilder services and add menuComposer.test.ts

Olivier Massot il y a 2 ans
Parent
commit
662e88eeb8
46 fichiers modifiés avec 215 ajouts et 121 suppressions
  1. 1 1
      composables/layout/useMenu.ts
  2. 0 0
      services/layout/menuBuilder/abstractMenuBuilder.ts
  3. 1 1
      services/layout/menuBuilder/accessMenuBuilder.ts
  4. 1 1
      services/layout/menuBuilder/accountMenuBuilder.ts
  5. 1 1
      services/layout/menuBuilder/admin2iosMenuBuilder.ts
  6. 1 1
      services/layout/menuBuilder/agendaMenuBuilder.ts
  7. 1 1
      services/layout/menuBuilder/billingMenuBuilder.ts
  8. 1 1
      services/layout/menuBuilder/communicationMenuBuilder.ts
  9. 1 1
      services/layout/menuBuilder/configurationMenuBuilder.ts
  10. 1 1
      services/layout/menuBuilder/cotisationsMenuBuilder.ts
  11. 1 1
      services/layout/menuBuilder/donorsMenuBuilder.ts
  12. 1 1
      services/layout/menuBuilder/educationalMenuBuilder.ts
  13. 1 1
      services/layout/menuBuilder/equipmentMenuBuilder.ts
  14. 13 13
      services/layout/menuBuilder/mainMenuBuilder.ts
  15. 1 1
      services/layout/menuBuilder/medalsMenuBuilder.ts
  16. 1 1
      services/layout/menuBuilder/myAccessesMenuBuilder.ts
  17. 1 1
      services/layout/menuBuilder/myFamilyMenuBuilder.ts
  18. 1 1
      services/layout/menuBuilder/parametersMenuBuilder.ts
  19. 1 1
      services/layout/menuBuilder/statsMenuBuilder.ts
  20. 1 1
      services/layout/menuBuilder/websiteAdminMenuBuilder.ts
  21. 1 1
      services/layout/menuBuilder/websiteListMenuBuilder.ts
  22. 62 0
      services/layout/menuComposer.ts
  23. 0 56
      services/menuBuilder/menuComposer.ts
  24. 0 0
      tests/units/services/data/entityManager.test.ts
  25. 1 1
      tests/units/services/layout/menuBuilder/abstractMenuBuilder.test.ts
  26. 1 1
      tests/units/services/layout/menuBuilder/accessMenuBuilder.test.ts
  27. 1 1
      tests/units/services/layout/menuBuilder/accountMenuBuilder.test.ts
  28. 1 1
      tests/units/services/layout/menuBuilder/admin2iosMenuBuilder.test.ts
  29. 1 1
      tests/units/services/layout/menuBuilder/agendaMenuBuilder.test.ts
  30. 1 1
      tests/units/services/layout/menuBuilder/billingMenuBuilder.test.ts
  31. 1 1
      tests/units/services/layout/menuBuilder/communicationMenuBuilder.test.ts
  32. 1 1
      tests/units/services/layout/menuBuilder/configurationMenuBuilder.test.ts
  33. 1 1
      tests/units/services/layout/menuBuilder/cotisationsMenuBuilder.test.ts
  34. 1 1
      tests/units/services/layout/menuBuilder/donorsMenuBuilder.test.ts
  35. 1 1
      tests/units/services/layout/menuBuilder/educationalMenuBuilder.test.ts
  36. 1 1
      tests/units/services/layout/menuBuilder/equipmentMenuBuilder.test.ts
  37. 14 14
      tests/units/services/layout/menuBuilder/mainMenuBuilder.test.ts
  38. 1 1
      tests/units/services/layout/menuBuilder/medalsMenuBuilder.test.ts
  39. 1 1
      tests/units/services/layout/menuBuilder/myAccessesMenuBuilder.test.ts
  40. 1 1
      tests/units/services/layout/menuBuilder/myFamilyMenuBuilder.test.ts
  41. 1 1
      tests/units/services/layout/menuBuilder/parametersMenuBuilder.test.ts
  42. 1 1
      tests/units/services/layout/menuBuilder/statsMenuBuilder.test.ts
  43. 1 1
      tests/units/services/layout/menuBuilder/websiteAdminMenuBuilder.test.ts
  44. 1 1
      tests/units/services/layout/menuBuilder/websiteListMenuBuilder.test.ts
  45. 87 0
      tests/units/services/layout/menuComposer.test.ts
  46. 1 0
      types/layout.d.ts

+ 1 - 1
composables/layout/useMenu.ts

@@ -7,7 +7,7 @@ import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import {AccessProfile} from "~/types/interfaces";
 import {useLayoutStore} from "~/stores/layout";
-import MenuComposer from "~/services/menuBuilder/menuComposer";
+import MenuComposer from "~/services/layout/menuComposer";
 
 /**
  * Renvoie des méthodes pour interagir avec les menus

+ 0 - 0
services/menuBuilder/abstractMenuBuilder.ts → services/layout/menuBuilder/abstractMenuBuilder.ts


+ 1 - 1
services/menuBuilder/accessMenuBuilder.ts → services/layout/menuBuilder/accessMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import {useOrganizationProfileStore} from "~/stores/organizationProfile";

+ 1 - 1
services/menuBuilder/accountMenuBuilder.ts → services/layout/menuBuilder/accountMenuBuilder.ts

@@ -1,6 +1,6 @@
 import {MenuGroup, MenuItem, MenuItems} from '~/types/layout'
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 
 /**
  * Menu Mon compte

+ 1 - 1
services/menuBuilder/admin2iosMenuBuilder.ts → services/layout/menuBuilder/admin2iosMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/agendaMenuBuilder.ts → services/layout/menuBuilder/agendaMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/billingMenuBuilder.ts → services/layout/menuBuilder/billingMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/communicationMenuBuilder.ts → services/layout/menuBuilder/communicationMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/configurationMenuBuilder.ts → services/layout/menuBuilder/configurationMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/cotisationsMenuBuilder.ts → services/layout/menuBuilder/cotisationsMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuItems, MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/donorsMenuBuilder.ts → services/layout/menuBuilder/donorsMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/educationalMenuBuilder.ts → services/layout/menuBuilder/educationalMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/equipmentMenuBuilder.ts → services/layout/menuBuilder/equipmentMenuBuilder.ts

@@ -1,6 +1,6 @@
 import {MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
-import AbstractMenuBuilder from "~/services/menuBuilder/abstractMenuBuilder";
+import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
 
 /**
  * Menu Matériel

+ 13 - 13
services/menuBuilder/mainMenuBuilder.ts → services/layout/menuBuilder/mainMenuBuilder.ts

@@ -1,17 +1,17 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
-import AccessMenuBuilder from "~/services/menuBuilder/accessMenuBuilder";
-import AgendaMenuBuilder from "~/services/menuBuilder/agendaMenuBuilder";
-import EquipmentMenuBuilder from "~/services/menuBuilder/equipmentMenuBuilder";
-import EducationalMenuBuilder from "~/services/menuBuilder/educationalMenuBuilder";
-import BillingMenuBuilder from "~/services/menuBuilder/billingMenuBuilder";
-import CommunicationMenuBuilder from "~/services/menuBuilder/communicationMenuBuilder";
-import MedalsMenuBuilder from "~/services/menuBuilder/medalsMenuBuilder";
-import DonorsMenuBuilder from "~/services/menuBuilder/donorsMenuBuilder";
-import WebsiteAdminMenuBuilder from "~/services/menuBuilder/websiteAdminMenuBuilder";
-import CotisationsMenuBuilder from "~/services/menuBuilder/cotisationsMenuBuilder";
-import StatsMenuBuilder from "~/services/menuBuilder/statsMenuBuilder";
-import Admin2iosMenuBuilder from "~/services/menuBuilder/admin2iosMenuBuilder";
+import AccessMenuBuilder from "~/services/layout/menuBuilder/accessMenuBuilder";
+import AgendaMenuBuilder from "~/services/layout/menuBuilder/agendaMenuBuilder";
+import EquipmentMenuBuilder from "~/services/layout/menuBuilder/equipmentMenuBuilder";
+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 DonorsMenuBuilder from "~/services/layout/menuBuilder/donorsMenuBuilder";
+import WebsiteAdminMenuBuilder from "~/services/layout/menuBuilder/websiteAdminMenuBuilder";
+import CotisationsMenuBuilder from "~/services/layout/menuBuilder/cotisationsMenuBuilder";
+import StatsMenuBuilder from "~/services/layout/menuBuilder/statsMenuBuilder";
+import Admin2iosMenuBuilder from "~/services/layout/menuBuilder/admin2iosMenuBuilder";
 
 /**
  * Menu principal (ou menu lateral)

+ 1 - 1
services/menuBuilder/medalsMenuBuilder.ts → services/layout/menuBuilder/medalsMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/myAccessesMenuBuilder.ts → services/layout/menuBuilder/myAccessesMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import _ from "lodash"

+ 1 - 1
services/menuBuilder/myFamilyMenuBuilder.ts → services/layout/menuBuilder/myFamilyMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import _ from "lodash"

+ 1 - 1
services/menuBuilder/parametersMenuBuilder.ts → services/layout/menuBuilder/parametersMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/statsMenuBuilder.ts → services/layout/menuBuilder/statsMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/websiteAdminMenuBuilder.ts → services/layout/menuBuilder/websiteAdminMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
services/menuBuilder/websiteListMenuBuilder.ts → services/layout/menuBuilder/websiteListMenuBuilder.ts

@@ -1,4 +1,4 @@
-import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
+import AbstractMenuBuilder from '~/services/layout/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import _ from "lodash"

+ 62 - 0
services/layout/menuComposer.ts

@@ -0,0 +1,62 @@
+import MainMenuBuilder from "~/services/layout/menuBuilder/mainMenuBuilder";
+import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
+import WebsiteListMenuBuilder from "~/services/layout/menuBuilder/websiteListMenuBuilder";
+import MyAccessesMenuBuilder from "~/services/layout/menuBuilder/myAccessesMenuBuilder";
+import MyFamilyMenuBuilder from "~/services/layout/menuBuilder/myFamilyMenuBuilder";
+import ConfigurationMenuBuilder from "~/services/layout/menuBuilder/configurationMenuBuilder";
+import AccountMenuBuilder from "~/services/layout/menuBuilder/accountMenuBuilder";
+import {RuntimeConfig} from "@nuxt/schema";
+import {AnyAbility} from "@casl/ability";
+import {MenuBuilder, MenuGroup} from "~/types/layout";
+
+/**
+ * Gestionnaire principal des menus de l'application
+ */
+export default class MenuComposer {
+
+    // @ts-ignore TODO: mieux typer cette prop
+    protected static readonly builders: Array<any> = [
+        MainMenuBuilder,
+        WebsiteListMenuBuilder,
+        MyAccessesMenuBuilder,
+        MyFamilyMenuBuilder,
+        ConfigurationMenuBuilder,
+        AccountMenuBuilder,
+    ]
+
+    /**
+     * Construit l'ensemble des menus et les insère dans le store Layout
+     *
+     * @param runtimeConfig
+     * @param ability
+     * @param organizationProfile
+     * @param accessProfile
+     * @param layoutState
+     */
+    public static build(
+        runtimeConfig: RuntimeConfig,
+        ability: AnyAbility,
+        organizationProfile: organizationState,
+        accessProfile: AccessProfile,
+        layoutState: LayoutState
+    ) {
+        for (const builderClass of MenuComposer.builders) {
+
+            const builder: MenuBuilder = new builderClass(runtimeConfig, ability, organizationProfile, accessProfile)
+            const menuName = builder.getMenuName()
+            const menu = builder.build();
+
+            if (!menu) {
+                continue
+            }
+
+            // Store a ref to the menu in the store
+            layoutState.menus[menuName] = menu
+
+            // On enregistre l'état du menu dans le store de la page
+            if ( ((menu as MenuGroup).children ?? []).length > 0 ) {
+                layoutState.menusOpened[menuName] = false
+            }
+        }
+    }
+}

+ 0 - 56
services/menuBuilder/menuComposer.ts

@@ -1,56 +0,0 @@
-import MainMenuBuilder from "~/services/menuBuilder/mainMenuBuilder";
-import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
-import WebsiteListMenuBuilder from "~/services/menuBuilder/websiteListMenuBuilder";
-import MyAccessesMenuBuilder from "~/services/menuBuilder/myAccessesMenuBuilder";
-import MyFamilyMenuBuilder from "~/services/menuBuilder/myFamilyMenuBuilder";
-import ConfigurationMenuBuilder from "~/services/menuBuilder/configurationMenuBuilder";
-import AccountMenuBuilder from "~/services/menuBuilder/accountMenuBuilder";
-import {RuntimeConfig} from "@nuxt/schema";
-import {AnyAbility} from "@casl/ability";
-import {MenuGroup} from "~/types/layout";
-
-/**
- * Gestionnaire principal des menus de l'application
- */
-export default class MenuComposer {
-
-    /**
-     * Construit l'ensemble des menus et les insère dans le store Layout
-     *
-     * @param runtimeConfig
-     * @param ability
-     * @param organizationProfile
-     * @param accessProfile
-     * @param layoutState
-     */
-    public static build(
-        runtimeConfig: RuntimeConfig,
-        ability: AnyAbility,
-        organizationProfile: organizationState,
-        accessProfile: AccessProfile,
-        layoutState: LayoutState
-    ) {
-        const builders = [
-            MainMenuBuilder,
-            WebsiteListMenuBuilder,
-            MyAccessesMenuBuilder,
-            MyFamilyMenuBuilder,
-            ConfigurationMenuBuilder,
-            AccountMenuBuilder
-        ]
-        const menus = builders.map(builder => new builder(runtimeConfig, ability, organizationProfile, accessProfile));
-
-        for(let menu of menus){
-            const menuBuilt = menu.build();
-
-            if(menuBuilt){
-                layoutState.menus[menu.getMenuName()] = menuBuilt
-
-                // On enregistre l'état du menu dans le store de la page
-                if ( ((menuBuilt as MenuGroup).children ?? []).length > 0 ) {
-                    layoutState.menusOpened[menu.getMenuName()] = false
-                }
-            }
-        }
-    }
-}

+ 0 - 0
tests/units/services/entityManager.test.ts → tests/units/services/data/entityManager.test.ts


+ 1 - 1
tests/units/services/menuBuilder/abstractMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/abstractMenuBuilder.test.ts

@@ -1,5 +1,5 @@
 import { describe, test, it, expect } from 'vitest'
-import AbstractMenuBuilder from "~/services/menuBuilder/abstractMenuBuilder";
+import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
 import {IconItem, MenuGroup, MenuItem, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import {RuntimeConfig} from "@nuxt/schema";

+ 1 - 1
tests/units/services/menuBuilder/accessMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/accessMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import AccessMenuBuilder from "~/services/menuBuilder/accessMenuBuilder";
+import AccessMenuBuilder from "~/services/layout/menuBuilder/accessMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/accountMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/accountMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import {describe, expect, test} from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import AccountMenuBuilder from "~/services/menuBuilder/accountMenuBuilder";
+import AccountMenuBuilder from "~/services/layout/menuBuilder/accountMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import {GENDER} from "~/types/enum/enums";

+ 1 - 1
tests/units/services/menuBuilder/admin2iosMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/admin2iosMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import Admin2iosMenuBuilder from "~/services/menuBuilder/admin2iosMenuBuilder";
+import Admin2iosMenuBuilder from "~/services/layout/menuBuilder/admin2iosMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/agendaMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/agendaMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import AgendaMenuBuilder from "~/services/menuBuilder/agendaMenuBuilder";
+import AgendaMenuBuilder from "~/services/layout/menuBuilder/agendaMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/billingMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/billingMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import BillingMenuBuilder from "~/services/menuBuilder/billingMenuBuilder";
+import BillingMenuBuilder from "~/services/layout/menuBuilder/billingMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/communicationMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/communicationMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import CommunicationMenuBuilder from "~/services/menuBuilder/communicationMenuBuilder";
+import CommunicationMenuBuilder from "~/services/layout/menuBuilder/communicationMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/configurationMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/configurationMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import ConfigurationMenuBuilder from "~/services/menuBuilder/configurationMenuBuilder";
+import ConfigurationMenuBuilder from "~/services/layout/menuBuilder/configurationMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/cotisationsMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/cotisationsMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import CotisationsMenuBuilder from "~/services/menuBuilder/cotisationsMenuBuilder";
+import CotisationsMenuBuilder from "~/services/layout/menuBuilder/cotisationsMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/donorsMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/donorsMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import DonorsMenuBuilder from "~/services/menuBuilder/donorsMenuBuilder";
+import DonorsMenuBuilder from "~/services/layout/menuBuilder/donorsMenuBuilder";
 import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/educationalMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/educationalMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import EducationalMenuBuilder from "~/services/menuBuilder/educationalMenuBuilder";
+import EducationalMenuBuilder from "~/services/layout/menuBuilder/educationalMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/equipmentMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/equipmentMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import EquipmentMenuBuilder from "~/services/menuBuilder/equipmentMenuBuilder";
+import EquipmentMenuBuilder from "~/services/layout/menuBuilder/equipmentMenuBuilder";
 import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

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

@@ -2,22 +2,22 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import MainMenuBuilder from "~/services/menuBuilder/mainMenuBuilder";
+import MainMenuBuilder from "~/services/layout/menuBuilder/mainMenuBuilder";
 import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
-import AbstractMenuBuilder from "~/services/menuBuilder/abstractMenuBuilder";
-import AccessMenuBuilder from "~/services/menuBuilder/accessMenuBuilder";
-import AgendaMenuBuilder from "~/services/menuBuilder/agendaMenuBuilder";
-import EquipmentMenuBuilder from "~/services/menuBuilder/equipmentMenuBuilder";
-import EducationalMenuBuilder from "~/services/menuBuilder/educationalMenuBuilder";
-import BillingMenuBuilder from "~/services/menuBuilder/billingMenuBuilder";
-import CommunicationMenuBuilder from "~/services/menuBuilder/communicationMenuBuilder";
-import DonorsMenuBuilder from "~/services/menuBuilder/donorsMenuBuilder";
-import MedalsMenuBuilder from "~/services/menuBuilder/medalsMenuBuilder";
-import WebsiteAdminMenuBuilder from "~/services/menuBuilder/websiteAdminMenuBuilder";
-import CotisationsMenuBuilder from "~/services/menuBuilder/cotisationsMenuBuilder";
-import StatsMenuBuilder from "~/services/menuBuilder/statsMenuBuilder";
-import Admin2iosMenuBuilder from "~/services/menuBuilder/admin2iosMenuBuilder";
+import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
+import AccessMenuBuilder from "~/services/layout/menuBuilder/accessMenuBuilder";
+import AgendaMenuBuilder from "~/services/layout/menuBuilder/agendaMenuBuilder";
+import EquipmentMenuBuilder from "~/services/layout/menuBuilder/equipmentMenuBuilder";
+import EducationalMenuBuilder from "~/services/layout/menuBuilder/educationalMenuBuilder";
+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 WebsiteAdminMenuBuilder from "~/services/layout/menuBuilder/websiteAdminMenuBuilder";
+import CotisationsMenuBuilder from "~/services/layout/menuBuilder/cotisationsMenuBuilder";
+import StatsMenuBuilder from "~/services/layout/menuBuilder/statsMenuBuilder";
+import Admin2iosMenuBuilder from "~/services/layout/menuBuilder/admin2iosMenuBuilder";
 
 let runtimeConfig: RuntimeConfig
 let ability: AnyAbility

+ 1 - 1
tests/units/services/menuBuilder/medalsMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/medalsMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import MedalsMenuBuilder from "~/services/menuBuilder/medalsMenuBuilder";
+import MedalsMenuBuilder from "~/services/layout/menuBuilder/medalsMenuBuilder";
 import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/myAccessesMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/myAccessesMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import MyAccessesMenuBuilder from "~/services/menuBuilder/myAccessesMenuBuilder";
+import MyAccessesMenuBuilder from "~/services/layout/menuBuilder/myAccessesMenuBuilder";
 import {MenuGroup, MenuItem} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/myFamilyMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/myFamilyMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import {describe, expect, test} from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import MyFamilyMenuBuilder from "~/services/menuBuilder/myFamilyMenuBuilder";
+import MyFamilyMenuBuilder from "~/services/layout/menuBuilder/myFamilyMenuBuilder";
 import {GENDER} from "~/types/enum/enums";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 import {MenuGroup} from "~/types/layout";

+ 1 - 1
tests/units/services/menuBuilder/parametersMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/parametersMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import ParametersMenuBuilder from "~/services/menuBuilder/parametersMenuBuilder";
+import ParametersMenuBuilder from "~/services/layout/menuBuilder/parametersMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/statsMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/statsMenuBuilder.test.ts

@@ -3,7 +3,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import StatsMenuBuilder from "~/services/menuBuilder/statsMenuBuilder";
+import StatsMenuBuilder from "~/services/layout/menuBuilder/statsMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/websiteAdminMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/websiteAdminMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import WebsiteAdminMenuBuilder from "~/services/menuBuilder/websiteAdminMenuBuilder";
+import WebsiteAdminMenuBuilder from "~/services/layout/menuBuilder/websiteAdminMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 1 - 1
tests/units/services/menuBuilder/websiteListMenuBuilder.test.ts → tests/units/services/layout/menuBuilder/websiteListMenuBuilder.test.ts

@@ -2,7 +2,7 @@ import { describe, test, it, expect } from 'vitest'
 import {RuntimeConfig} from "@nuxt/schema";
 import {AnyAbility} from "@casl/ability/dist/types";
 import {AccessProfile, organizationState} from "~/types/interfaces";
-import WebsiteListMenuBuilder from "~/services/menuBuilder/websiteListMenuBuilder";
+import WebsiteListMenuBuilder from "~/services/layout/menuBuilder/websiteListMenuBuilder";
 import {MenuGroup} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
 

+ 87 - 0
tests/units/services/layout/menuComposer.test.ts

@@ -0,0 +1,87 @@
+import { describe, test, it, expect } from 'vitest'
+import MenuComposer from "~/services/layout/menuComposer";
+import {RuntimeConfig} from "@nuxt/schema";
+import {AnyAbility} from "@casl/ability/dist/types";
+import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
+import {MenuBuilder, MenuGroup, MenuItem} from "~/types/layout";
+import {MENU_LINK_TYPE} from "~/types/enum/layout";
+import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
+
+
+
+describe('build', () => {
+    test('simple call', () => {
+        // @ts-ignore
+        const runtimeConfig = vi.fn() as RuntimeConfig
+        // @ts-ignore
+        const ability = vi.fn() as AnyAbility
+        // @ts-ignore
+        const organizationProfile = vi.fn() as organizationState
+        // @ts-ignore
+        const accessProfile = vi.fn() as AccessProfile
+        // @ts-ignore
+        const layoutState = vi.fn() as LayoutState
+
+        layoutState.menus = {}
+        layoutState.menusOpened = {}
+
+        const item1 = {label: 'item1', type: MENU_LINK_TYPE.INTERNAL} as MenuItem
+        const group1 = {label: 'group1', children: []} as MenuGroup
+        const group2 = {label: 'group1', children: [{label: 'item2', type: MENU_LINK_TYPE.INTERNAL}]} as MenuGroup
+
+        // @ts-ignore
+        const dummyBuilder1 = vi.fn() as MenuBuilder
+        const dummyBuilderClass1 = vi.fn(() => dummyBuilder1)
+        dummyBuilder1.getMenuName = vi.fn(() => 'dummy1')
+        dummyBuilder1.build = vi.fn(() => item1)
+
+        // @ts-ignore
+        const dummyBuilder2 = vi.fn() as MenuBuilder
+        const dummyBuilderClass2 = vi.fn(() => dummyBuilder2)
+        dummyBuilder2.getMenuName = vi.fn(() => 'dummy2')
+        dummyBuilder2.build = vi.fn(() => group1)
+
+        // @ts-ignore
+        const dummyBuilder3 = vi.fn() as MenuBuilder
+        const dummyBuilderClass3 = vi.fn(() => dummyBuilder3)
+        dummyBuilder3.getMenuName = vi.fn(() => 'dummy3')
+        dummyBuilder3.build = vi.fn(() => group2)
+
+        // @ts-ignore
+        const dummyBuilder4 = vi.fn() as MenuBuilder
+        const dummyBuilderClass4 = vi.fn(() => dummyBuilder4)
+        dummyBuilder4.getMenuName = vi.fn(() => 'dummy4')
+        dummyBuilder4.build = vi.fn(() => null)
+
+        // @ts-ignore
+        MenuComposer.builders = [ dummyBuilderClass1, dummyBuilderClass2, dummyBuilderClass3, dummyBuilderClass4 ]
+
+        MenuComposer.build(runtimeConfig, ability, organizationProfile, accessProfile, layoutState)
+
+        expect(dummyBuilderClass1).toHaveBeenCalledOnce()
+        expect(dummyBuilderClass1).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
+        expect(dummyBuilder1.build).toHaveBeenCalledOnce()
+
+        expect(dummyBuilderClass2).toHaveBeenCalledOnce()
+        expect(dummyBuilderClass2).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
+        expect(dummyBuilder2.build).toHaveBeenCalledOnce()
+
+        expect(dummyBuilderClass3).toHaveBeenCalledOnce()
+        expect(dummyBuilderClass3).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
+        expect(dummyBuilder3.build).toHaveBeenCalledOnce()
+
+        expect(dummyBuilderClass4).toHaveBeenCalledOnce()
+        expect(dummyBuilderClass4).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
+        expect(dummyBuilder4.build).toHaveBeenCalledOnce()
+
+        expect(layoutState.menus).toEqual({
+            'dummy1': item1,
+            'dummy2': group1,
+            'dummy3': group2
+        })
+
+        expect(layoutState.menusOpened).toEqual({
+            'dummy3': false
+        })
+    })
+})

+ 1 - 0
types/layout.d.ts

@@ -36,5 +36,6 @@ type MenuItems = Array<MenuItem | MenuGroup>
  * Service responsable de la génération d'un menu
  */
 interface MenuBuilder {
+    getMenuName: () => string
     build: () => MenuItem | MenuGroup | null
 }