浏览代码

fix RoleUtils unit tests, and minor fixes

Olivier Massot 2 年之前
父节点
当前提交
260b1556cc

+ 1 - 1
plugins/init.server.ts

@@ -4,7 +4,7 @@ import {useEntityManager} from "~/composables/data/useEntityManager";
 import UnauthorizedError from "~/services/error/UnauthorizedError";
 import {useRedirectToLogout} from "~/composables/utils/useRedirectToLogout";
 
-export default defineNuxtPlugin(async ({ssrContext}) => {
+export default defineNuxtPlugin(async () => {
     const redirectToLogout = useRedirectToLogout()
 
     const bearer = useCookie('BEARER')

+ 2 - 2
services/data/entityManager.ts

@@ -293,8 +293,8 @@ class EntityManager {
         const profile = await this.fetch(MyProfile, accessId)
 
         // On met à jour le store accessProfile
-        const accessProfileStore = useAccessProfileStore()
-        accessProfileStore.setProfile(profile)
+        const accessProfile = useAccessProfileStore()
+        accessProfile.setProfile(profile)
     }
 
     /**

+ 4 - 2
stores/accessProfile.ts

@@ -10,6 +10,8 @@ import {
 import {computed, ref, Ref} from "@vue/reactivity";
 import {useOrganizationProfileStore} from "~/stores/organizationProfile";
 import RoleUtils from "~/services/rights/roleUtils";
+import AbilityBuilder from "~/services/rights/abilityBuilder";
+import {ability} from "~/plugins/ability";
 
 export const useAccessProfileStore = defineStore('accessProfile', () => {
 
@@ -130,8 +132,8 @@ export const useAccessProfileStore = defineStore('accessProfile', () => {
     setFamilyAccesses(profile.familyAccesses)
 
     // Time to set Organization Profile
-    const organizationProfileStore = useOrganizationProfileStore()
-    organizationProfileStore.setProfile(profile.organization)
+    const organizationProfile = useOrganizationProfileStore()
+    organizationProfile.setProfile(profile.organization)
   }
 
   const refreshProfile = (profile: any) => {

+ 33 - 0
tests/units/services/rights/abilityBuilder.test.ts

@@ -0,0 +1,33 @@
+import { describe, test, it, expect } from 'vitest'
+import {MongoAbility} from "@casl/ability/dist/types/Ability";
+import {AbilitiesType, AccessProfile, organizationState} from "~/types/interfaces";
+import AbilityBuilder from "~/services/rights/abilityBuilder";
+
+let ability: MongoAbility
+let accessProfile: AccessProfile
+let organizationProfile: organizationState
+let abilityBuilder: AbilityBuilder
+
+beforeEach(() => {
+    ability = vi.fn() as any as MongoAbility
+    accessProfile = vi.fn() as any as AccessProfile
+    organizationProfile = vi.fn() as any as organizationState
+
+    abilityBuilder = new AbilityBuilder(ability, accessProfile, organizationProfile)
+})
+
+describe('setupAbilities', () => {
+    test('base call', () => {
+        // @ts-ignore
+        ability.update = vi.fn((abilities: Array<AbilitiesType>) => {})
+        // @ts-ignore
+        organizationProfile.$onAction = vi.fn((params: any) => {})
+
+        abilityBuilder.setupAbilities()
+
+        expect(ability.update).toHaveBeenCalledTimes(1)
+        // @ts-ignore
+        expect(organizationProfile.$onAction).toHaveBeenCalledTimes(1)
+    })
+})
+

+ 0 - 1
tests/units/services/rights/roleUtils.test.ts

@@ -36,7 +36,6 @@ describe('rolesToAbilities', () => {
         const expected = [
             { subject: 'events', action: 'read' },
             { subject: 'courses', action: 'manage' },
-            { subject: 'teacher', action: 'manage' },
             { subject: 'other', action: 'manage' },
         ]
 

+ 2 - 0
types/interfaces.d.ts

@@ -117,6 +117,8 @@ interface AccessProfile extends BaseAccessProfile {
   originalAccess: OrignalAccessProfile | null
 }
 
+// TODO: y'a un problème entre l'interface AccessProfile et celle organizationState, les noms sont construits différemment,
+//       il faut tout remettre sur le même modèle
 interface organizationState extends BaseOrganizationProfile {
   id: number | null
   parametersId: number | null