浏览代码

useAccessesProvider

Vincent GUFFON 3 年之前
父节点
当前提交
bddfe4b333

+ 3 - 4
components/Form/Organization/Address.vue

@@ -103,7 +103,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, useContext, computed, ComputedRef, Ref, ref } from '@nuxtjs/composition-api'
+import { defineComponent, useContext, computed, ComputedRef} from '@nuxtjs/composition-api'
 import { Repository as VuexRepository } from '@vuex-orm/core/dist/src/repository/Repository'
 import { Query, Model } from '@vuex-orm/core'
 import { OrganizationAddressPostal } from '~/models/Organization/OrganizationAddressPostal'
@@ -117,7 +117,7 @@ import ModelsUtils from "~/services/utils/modelsUtils";
 import {UseAddressPostal} from "~/composables/data/useAddresspostal";
 import {AnyJson} from "~/types/interfaces";
 import DataProvider from "~/services/data/dataProvider";
-import {UseAccess} from "~/composables/data/useAccess";
+import {useAccessesProvider} from "~/composables/data/useAccessesProvider";
 
 export default defineComponent({
   props: {
@@ -128,6 +128,7 @@ export default defineComponent({
   },
   setup (props) {
     const { $dataProvider } = useContext()
+    const {getPhysicalByFullName: accessSearch} = useAccessesProvider($dataProvider)
 
     const repository: VuexRepository<Model> = repositoryHelper.getRepository(OrganizationAddressPostal)
     const query: Query = repository.with('addressPostal')
@@ -154,8 +155,6 @@ export default defineComponent({
 
     const {searchFunction: addressSearch, updateCpAddress} = new UseAddressPostal().invoke()
 
-    const {getPhysicalByFullName: accessSearch} = new UseAccess().invoke()
-
     const {updateAccessAddress} = accessOwnerResearch($dataProvider, organizationAddressPostalItem, addressPostalItem)
 
     const getIdFromUri = (uri: string) => {

+ 3 - 3
components/Layout/AlertBar/SwitchYear.vue

@@ -19,9 +19,9 @@ import { useMyProfile } from '~/composables/data/useMyProfile'
 
 export default defineComponent({
   setup () {
-    const { store } = useContext()
+    const { store, $dataPersister } = useContext()
     const { markFormAsNotDirty } = $useForm()
-    const { updateMyProfile, setHistorical, setActivityYear } = useMyProfile()
+    const { updateMyProfile, setHistorical, setActivityYear } = useMyProfile($dataPersister, store)
 
     const profileAccess:accessState = store.state.profile.access
     const profileOrganization:organizationState = store.state.profile.organization
@@ -40,7 +40,7 @@ export default defineComponent({
       setHistorical(['present'])
       if(profileOrganization.currentActivityYear)
         setActivityYear(profileOrganization.currentActivityYear)
-      
+
       markFormAsNotDirty()
       await updateMyProfile()
       window.location.reload()

+ 2 - 2
components/Layout/SubHeader/ActivityYear.vue

@@ -25,8 +25,8 @@ import { $useForm } from '~/composables/form/useForm'
 
 export default defineComponent({
   setup () {
-    const { store } = useContext()
-    const { updateMyProfile, setActivityYear, activityYear } = useMyProfile()
+    const { store, $dataPersister } = useContext()
+    const { updateMyProfile, setActivityYear, activityYear } = useMyProfile($dataPersister, store)
     const { markFormAsNotDirty } = $useForm()
 
     const organizationProfile = $organizationProfile(store)

+ 3 - 2
components/Layout/SubHeader/DataTiming.vue

@@ -25,14 +25,15 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, onUnmounted, ref, watch, Ref, WatchStopHandle } from '@nuxtjs/composition-api'
+import {defineComponent, onUnmounted, ref, watch, Ref, WatchStopHandle, useContext} from '@nuxtjs/composition-api'
 import { $useForm } from '~/composables/form/useForm'
 import { useMyProfile } from '~/composables/data/useMyProfile'
 
 export default defineComponent({
   setup () {
+    const { store, $dataPersister } = useContext()
     const { markFormAsNotDirty } = $useForm()
-    const { updateMyProfile, setHistorical, historical } = useMyProfile()
+    const { updateMyProfile, setHistorical, historical } = useMyProfile($dataPersister, store)
 
     const historicalBtn: Ref<Array<number>> = initHistoricalBtn(historical.value as Array<any>)
 

+ 3 - 2
components/Layout/SubHeader/DataTimingRange.vue

@@ -37,7 +37,7 @@
 
 <script lang="ts">
 import {
-  defineComponent, onUnmounted, ref, watch, computed, ComputedRef, Ref, WatchStopHandle
+  defineComponent, onUnmounted, ref, watch, computed, ComputedRef, Ref, WatchStopHandle, useContext
 } from '@nuxtjs/composition-api'
 import { useMyProfile } from '~/composables/data/useMyProfile'
 import { $useForm } from '~/composables/form/useForm'
@@ -45,7 +45,8 @@ import { $useForm } from '~/composables/form/useForm'
 export default defineComponent({
   setup (_, { emit }) {
     const { markFormAsNotDirty } = $useForm()
-    const { updateMyProfile, setHistoricalRange, historical } = useMyProfile()
+    const { store, $dataPersister } = useContext()
+    const { updateMyProfile, setHistoricalRange, historical } = useMyProfile($dataPersister, store)
 
     const datesRange:ComputedRef<Array<any>> = computed(() => {
       return [historical.value.dateStart, historical.value.dateEnd]

+ 0 - 41
composables/data/useAccess.ts

@@ -1,41 +0,0 @@
-import { AnyJson } from '~/types/interfaces'
-import {QUERY_TYPE} from "~/types/enums";
-import { useContext} from '@nuxtjs/composition-api'
-import DataProvider from "~/services/data/dataProvider";
-
-/**
- * @category composables/data
- * @class UseAccess
- * Use Classe qui va récupérer les Accesses suivant des critères de recherche
- */
-export class UseAccess {
-  private $dataProvider!: DataProvider
-
-  constructor() {
-    const {$dataProvider} = useContext()
-    this.$dataProvider = $dataProvider
-  }
-
-  public invoke(): AnyJson{
-    return {
-      getPhysicalByFullName: (research: string) => this.getPhysicalByFullName(research),
-    }
-  }
-
-  private async getPhysicalByFullName(research: string): Promise<Array<AnyJson>>{
-    if(research){
-      const response = await this.$dataProvider.invoke({
-        type: QUERY_TYPE.DEFAULT,
-        url: `api/access_people`,
-        listArgs: {
-          filters:[
-            {key: 'person.isPhysical', value: 1},
-            {key: 'fullname', value: research}
-          ]
-        }
-      })
-      return response.data
-    }
-    return []
-  }
-}

+ 35 - 0
composables/data/useAccessesProvider.ts

@@ -0,0 +1,35 @@
+import { AnyJson } from '~/types/interfaces'
+import {QUERY_TYPE} from "~/types/enums";
+import DataProvider from "~/services/data/dataProvider";
+
+/**
+ * Composable function
+ * @param $dataProvider
+ */
+export function useAccessesProvider($dataProvider: DataProvider){
+
+  /**
+   * Retourne les personnes physique selon leur nom et prénom
+   * @param research
+   */
+  async function getPhysicalByFullName(research: string): Promise<Array<AnyJson>>{
+    if(research){
+      const response = await $dataProvider.invoke({
+        type: QUERY_TYPE.DEFAULT,
+        url: `api/access_people`,
+        listArgs: {
+          filters:[
+            {key: 'person.isPhysical', value: 1},
+            {key: 'fullname', value: research}
+          ]
+        }
+      })
+      return response.data
+    }
+    return []
+  }
+
+  return {
+    getPhysicalByFullName
+  }
+}

+ 3 - 4
composables/data/useMyProfile.ts

@@ -2,16 +2,15 @@ import {computed, ComputedRef} from '@nuxtjs/composition-api'
 import { Item, Model } from '@vuex-orm/core'
 import { repositoryHelper } from '~/services/store/repository'
 import { QUERY_TYPE } from '~/types/enums'
-import { Historical } from '~/types/interfaces'
+import {AccessStore, Historical} from '~/types/interfaces'
 import { MyProfile } from '~/models/Access/MyProfile'
 import { $accessProfile } from '@/services/profile/accessProfile'
-import { useContext } from '@nuxtjs/composition-api'
+import DataPersister from "~/services/data/dataPersister";
 
 /**
  * Composable function
  */
-export function useMyProfile(){
-  const {$dataPersister, store} = useContext()
+export function useMyProfile($dataPersister: DataPersister, store: AccessStore){
   $accessProfile.setStore(store)
   const currentAccessId = $accessProfile.getCurrentAccessId()
   const myProfile = getMyProfileInstance(currentAccessId) as MyProfile

+ 3 - 3
services/connection/urlBuilder.ts

@@ -1,5 +1,5 @@
 import {Model} from '@vuex-orm/core'
-import {DataPersisterArgs, DataProviderArgs, ImageArgs, UrlArgs} from '~/types/interfaces'
+import {ImageArgs, UrlArgs} from '~/types/interfaces'
 import {QUERY_TYPE} from '~/types/enums'
 import {repositoryHelper} from '~/services/store/repository'
 import TypesTesting from "~/services/utils/typesTesting";
@@ -60,11 +60,11 @@ class UrlBuilder {
    * @param baseUrl
    * @private
    */
-  private static getDefaultUrl (url?: string, baseUrl: string = ''): string {
+  private static getDefaultUrl (url?: string, baseUrl: string|null = null): string {
     if (!url) {
       throw new Error('no url')
     }
-    return UrlBuilder.concat(baseUrl, url)
+    return baseUrl ? UrlBuilder.concat(baseUrl, url) : url
   }
 
   /**

+ 22 - 0
tests/unit/composables/data/useAccessesProvider.spec.ts

@@ -0,0 +1,22 @@
+import DataProvider from "~/services/data/dataProvider";
+import {useAccessesProvider} from "~/composables/data/useAccessesProvider";
+let useMyAccessesProviderMount:any
+const dataproviderMock = DataProvider as jest.Mocked<typeof DataProvider>
+const dataproviderMockInstance = new dataproviderMock()
+
+beforeAll(() => {
+  useMyAccessesProviderMount = useAccessesProvider(dataproviderMockInstance)
+})
+
+describe('getPhysicalByFullName()', () => {
+  it('should return [] if no research params', async () => {
+    const result = await useMyAccessesProviderMount.getPhysicalByFullName()
+    expect(result).toHaveLength(0)
+  })
+
+  it('should call $dataProvider.invoke if there is research param', async () => {
+    dataproviderMockInstance.invoke = jest.fn().mockReturnValue({data:['foo bar']})
+    const result = await useMyAccessesProviderMount.getPhysicalByFullName('foo bar')
+    expect(result).toStrictEqual(['foo bar'])
+  })
+})

+ 3 - 4
tests/unit/composables/data/useMyProfile.spec.ts

@@ -1,10 +1,11 @@
-import { createStore, initLocalVue, mountComposition } from '~/tests/unit/Helpers'
+import { createStore, initLocalVue } from '~/tests/unit/Helpers'
 import { accessProfile as accessModule } from '~/tests/unit/fixture/state/profile'
 import { AnyStore } from '~/types/interfaces'
 import { useMyProfile } from '~/composables/data/useMyProfile'
 import { repositoryHelper } from '~/services/store/repository'
 import {$accessProfile} from "~/services/profile/accessProfile";
 import {_exportedForTesting} from "~/composables/data/useMyProfile"
+import DataPersister from "~/services/data/dataPersister";
 let store:AnyStore
 let useMyProfileMount:any
 let repositoryHelperMock = repositoryHelper as jest.Mocked<typeof repositoryHelper>
@@ -20,9 +21,7 @@ beforeAll(() => {
   $accessProfileMock.getCurrentAccessId = jest.fn().mockReturnValue(1)
   repositoryHelperMock.findItemFromModel = jest.fn()
 
-  const component = mountComposition(() => {
-    useMyProfileMount = useMyProfile()
-  });
+  useMyProfileMount = useMyProfile(new DataPersister(), store)
 })
 
 describe('setActivityYear()', () => {

+ 1 - 1
tests/unit/services/connection/urlBuilder.spec.ts

@@ -17,7 +17,7 @@ describe('invoke()', () => {
       expect(UrlBuilder.build({
         type: QUERY_TYPE.DEFAULT,
         url: 'users'
-      })).toEqual('/users')
+      })).toEqual('users')
     })
   })