mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			3187 lines
		
	
	
		
			106 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			3187 lines
		
	
	
		
			106 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| 
 | |
| import { flushPromises } from '@vue/test-utils'
 | |
| import { ref } from 'vue'
 | |
| 
 | |
| import mockAxios from '../../mock/mockAxios'
 | |
| import AutogenView from '@/views/AutogenView'
 | |
| import user from '@/store/modules/user'
 | |
| import common from '../../common'
 | |
| import mockData from '../../mockData/AutogenView.mock.json'
 | |
| 
 | |
| jest.mock('axios', () => mockAxios)
 | |
| jest.mock('@/vue-app', () => ({
 | |
|   vueProps: {
 | |
|     $localStorage: {
 | |
|       set: jest.fn((key, value) => {}),
 | |
|       get: jest.fn((key) => {
 | |
|         switch (key) {
 | |
|           case 'HEADER_NOTICES':
 | |
|             return []
 | |
|           default:
 | |
|             return null
 | |
|         }
 | |
|       })
 | |
|     }
 | |
|   }
 | |
| }))
 | |
| user.state.apis = mockData.apis
 | |
| 
 | |
| let router = null
 | |
| let store = null
 | |
| let i18n = null
 | |
| let mocks = null
 | |
| let wrapper = null
 | |
| let originalFunc = {}
 | |
| 
 | |
| const spyConsole = {
 | |
|   log: null,
 | |
|   warn: null
 | |
| }
 | |
| 
 | |
| const state = {
 | |
|   user: {
 | |
|     apis: mockData.apis,
 | |
|     info: mockData.info,
 | |
|     defaultListViewPageSize: 20,
 | |
|     headerNotices: [],
 | |
|     customColumns: []
 | |
|   }
 | |
| }
 | |
| 
 | |
| const mutations = {
 | |
|   SET_HEADER_NOTICES: (state, jobsJsonArray) => {
 | |
|     state.user.headerNotices = jobsJsonArray
 | |
|   },
 | |
|   SET_CUSTOM_COLUMNS: (state, customColumns) => {
 | |
|     state.user.customColumns = customColumns
 | |
|   }
 | |
| }
 | |
| 
 | |
| const actions = {
 | |
|   SetProject: jest.fn(({ commit }, project) => {}),
 | |
|   ToggleTheme: jest.fn(({ commit }, theme) => {}),
 | |
|   SetCustomColumns: jest.fn(({ commit }, columns) => {})
 | |
| }
 | |
| 
 | |
| mockData.routes.push({
 | |
|   name: 'testRouter15',
 | |
|   path: '/test-router-15',
 | |
|   meta: {
 | |
|     title: 'label.title',
 | |
|     icon: 'play-circle-outlined',
 | |
|     permission: ['testApiNameCase1'],
 | |
|     columns: [
 | |
|       'id',
 | |
|       'name',
 | |
|       {
 | |
|         column1: (record) => {
 | |
|           return record.name
 | |
|         }
 | |
|       }
 | |
|     ]
 | |
|   },
 | |
|   component: {},
 | |
|   children: [{
 | |
|     name: 'testRouter15-1',
 | |
|     path: '/test-router-15/:id',
 | |
|     meta: {
 | |
|       title: 'label.title',
 | |
|       icon: 'play-circle-outlined'
 | |
|     },
 | |
|     component: {}
 | |
|   }]
 | |
| })
 | |
| 
 | |
| router = common.createMockRouter(mockData.routes)
 | |
| store = common.createMockStore(state, actions, mutations)
 | |
| i18n = common.createMockI18n('en', mockData.messages)
 | |
| 
 | |
| mocks = {
 | |
|   $notifyError: jest.fn((error) => {
 | |
|     return error
 | |
|   }),
 | |
|   $notification: {
 | |
|     error: jest.fn((option) => {
 | |
|       return {
 | |
|         message: option.message,
 | |
|         description: 'test-description-error',
 | |
|         duration: option.duration
 | |
|       }
 | |
|     }),
 | |
|     info: jest.fn((option) => {
 | |
|       return {
 | |
|         message: option.message,
 | |
|         description: 'test-description-info',
 | |
|         duration: option.duration
 | |
|       }
 | |
|     }),
 | |
|     success: jest.fn((option) => {
 | |
|       return {
 | |
|         message: option.message,
 | |
|         description: 'test-description-success',
 | |
|         duration: option.duration
 | |
|       }
 | |
|     }),
 | |
|     warning: jest.fn((option) => {
 | |
|       return {
 | |
|         message: option.message,
 | |
|         description: 'test-description-warning',
 | |
|         duration: option.duration
 | |
|       }
 | |
|     })
 | |
|   },
 | |
|   $message: {
 | |
|     success: jest.fn((obj) => {
 | |
|       return obj
 | |
|     }),
 | |
|     error: jest.fn((obj) => {
 | |
|       return obj
 | |
|     }),
 | |
|     info: jest.fn((obj) => {
 | |
|       return obj
 | |
|     })
 | |
|   }
 | |
| }
 | |
| 
 | |
| const factory = (opts = {}) => {
 | |
|   router = opts.router || router
 | |
|   i18n = opts.i18n || i18n
 | |
|   store = opts.store || store
 | |
|   mocks = opts.mocks || mocks
 | |
| 
 | |
|   return common.createFactory(AutogenView, {
 | |
|     router,
 | |
|     i18n,
 | |
|     store,
 | |
|     mocks,
 | |
|     props: opts.props || {},
 | |
|     data: opts.data || {}
 | |
|   })
 | |
| }
 | |
| 
 | |
| const { ResizeObserver, ls } = window
 | |
| router.push('/')
 | |
| 
 | |
| describe('Views > AutogenView.vue', () => {
 | |
|   beforeEach(async () => {
 | |
|     jest.clearAllMocks()
 | |
|     jest.spyOn(console, 'warn').mockImplementation(() => {})
 | |
| 
 | |
|     delete window.ResizeObserver
 | |
|     delete window.ls
 | |
| 
 | |
|     if (!wrapper) {
 | |
|       await router.isReady()
 | |
|       wrapper = factory()
 | |
|     }
 | |
| 
 | |
|     window.ResizeObserver = jest.fn().mockImplementation(() => ({
 | |
|       observe: jest.fn(),
 | |
|       unobserve: jest.fn(),
 | |
|       disconnect: jest.fn()
 | |
|     }))
 | |
| 
 | |
|     window.ls = {
 | |
|       get: jest.fn((key) => []),
 | |
|       set: jest.fn()
 | |
|     }
 | |
| 
 | |
|     state.user.info.roletype = 'Normal'
 | |
|     if (i18n.global.locale !== 'en') i18n.global.locale = 'en'
 | |
|   })
 | |
| 
 | |
|   afterEach(() => {
 | |
|     window.ResizeObserver = ResizeObserver
 | |
|     window.ResizeObserver = ls
 | |
| 
 | |
|     if (wrapper) {
 | |
|       wrapper.vm.currentAction = {}
 | |
|       wrapper.vm.resource = {}
 | |
|       wrapper.vm.searchParams = {}
 | |
|       wrapper.vm.actionData = {}
 | |
|       wrapper.vm.dataView = false
 | |
|       wrapper.vm.showAction = false
 | |
|       wrapper.vm.selectedRowKeys = []
 | |
|       wrapper.vm.selectedRowKeys = []
 | |
|       wrapper.vm.items = []
 | |
|       wrapper.vm.promises = []
 | |
|       wrapper.vm.form = {}
 | |
|       wrapper.vm.rules = {}
 | |
|     }
 | |
| 
 | |
|     if (Object.keys(originalFunc).length > 0) {
 | |
|       Object.keys(originalFunc).forEach(key => {
 | |
|         switch (key) {
 | |
|           case 'fetchData':
 | |
|             wrapper.vm.fetchData = originalFunc[key]
 | |
|             break
 | |
|           case 'listUuidOpts':
 | |
|             wrapper.vm.listUuidOpts = originalFunc[key]
 | |
|             break
 | |
|           case 'fillEditFormFieldValues':
 | |
|             wrapper.vm.fillEditFormFieldValues = originalFunc[key]
 | |
|             break
 | |
|           case 'validateTwoPassword':
 | |
|             wrapper.vm.validateTwoPassword = originalFunc[key]
 | |
|             break
 | |
|           case 'handleResponse':
 | |
|             wrapper.vm.handleResponse = originalFunc[key]
 | |
|             break
 | |
|           case 'closeAction':
 | |
|             wrapper.vm.closeAction = originalFunc[key]
 | |
|             break
 | |
|           case 'getFirstIndexFocus':
 | |
|             wrapper.vm.getFirstIndexFocus = originalFunc[key]
 | |
|             break
 | |
|           case 'setRules':
 | |
|             wrapper.vm.setRules = originalFunc[key]
 | |
|             break
 | |
|           case 'RefValidateFields':
 | |
|             wrapper.vm.formRef.value.validateFields = originalFunc[key]
 | |
|             break
 | |
|           case 'formRef':
 | |
|             wrapper.vm.formRef = originalFunc[key]
 | |
|             break
 | |
|           case 'switchProject':
 | |
|             wrapper.vm.switchProject = originalFunc[key]
 | |
|             break
 | |
|           case 'execSubmit':
 | |
|             wrapper.vm.execSubmit = originalFunc[key]
 | |
|             break
 | |
|           case 'shouldNavigateBack':
 | |
|             wrapper.vm.shouldNavigateBack = originalFunc[key]
 | |
|             break
 | |
|           case 'routerGo':
 | |
|             wrapper.vm.$router.go = originalFunc[key]
 | |
|             break
 | |
|         }
 | |
|       })
 | |
| 
 | |
|       originalFunc = {}
 | |
|     }
 | |
|     if (spyConsole.log) {
 | |
|       spyConsole.log.mockClear()
 | |
|       spyConsole.log.mockRestore()
 | |
|     }
 | |
|     if (spyConsole.warn) {
 | |
|       spyConsole.warn.mockClear()
 | |
|       spyConsole.warn.mockRestore()
 | |
|     }
 | |
|   })
 | |
| 
 | |
|   describe('Navigation Guard', () => {
 | |
|     it('beforeRouteUpdate() should be called', async (done) => {
 | |
|       originalFunc.fetchData = wrapper.vm.fetchData
 | |
|       wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|       const nextFun = jest.fn()
 | |
|       const beforeRouteUpdate = wrapper.vm.$options.beforeRouteUpdate
 | |
| 
 | |
|       await router.push({ name: 'testRouter1' })
 | |
|       await beforeRouteUpdate.call(wrapper.vm, {}, {}, nextFun)
 | |
|       await flushPromises()
 | |
| 
 | |
|       expect(wrapper.vm.currentPath).toEqual('/test-router-1')
 | |
|       expect(nextFun).toHaveBeenCalled()
 | |
|       done()
 | |
|     })
 | |
| 
 | |
|     it('beforeRouteLeave() should be called', async (done) => {
 | |
|       originalFunc.fetchData = wrapper.vm.fetchData
 | |
|       wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|       const nextFun = jest.fn()
 | |
|       const beforeRouteLeave = wrapper.vm.$options.beforeRouteLeave
 | |
| 
 | |
|       await router.push({ name: 'testRouter2' })
 | |
|       await beforeRouteLeave.call(wrapper.vm, {}, {}, nextFun)
 | |
|       await flushPromises()
 | |
| 
 | |
|       expect(wrapper.vm.currentPath).toEqual('/test-router-2')
 | |
|       expect(nextFun).toHaveBeenCalled()
 | |
|       done()
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   describe('Watchers', () => {
 | |
|     describe('$route', () => {
 | |
|       it('The wrapper data does not change when $router do not change', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await wrapper.setData({ page: 2, itemCount: 10 })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.page).toEqual(2)
 | |
|         expect(wrapper.vm.itemCount).toEqual(10)
 | |
|         expect(fetchData).not.toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('The wrapper data changes when $router changes', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await wrapper.setData({ page: 2, itemCount: 10 })
 | |
|         await router.push({ name: 'testRouter3' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.page).toEqual(1)
 | |
|         expect(wrapper.vm.itemCount).toEqual(0)
 | |
|         expect(fetchData).toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('switchProject() should be called when $route changes with projectid in query', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         originalFunc.switchProject = wrapper.vm.switchProject
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.switchProject = jest.fn((projectid) => {})
 | |
| 
 | |
|         const switchProject = jest.spyOn(wrapper.vm, 'switchProject')
 | |
| 
 | |
|         await router.push({ name: 'testRouter30', query: { projectid: 'test-project-id' } })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(switchProject).toHaveBeenCalledTimes(1)
 | |
|         expect(switchProject).toHaveBeenCalledWith('test-project-id')
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('$i18n.locale', () => {
 | |
|       it('Check language and fetchData() when not changing locale', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         expect(wrapper.vm.$t('labelname')).toEqual('test-name-en')
 | |
|         expect(fetchData).not.toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('Check languages and fetchData() when changing locale', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         i18n.global.locale = 'de'
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.$t('labelname')).toEqual('test-name-de')
 | |
|         expect(fetchData).toBeCalled()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   describe('Methods', () => {
 | |
|     describe('switchProject', () => {
 | |
|       it('API not called when switchProject() is called with not have projectId', async (done) => {
 | |
|         await wrapper.vm.switchProject()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).not.toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API not called when switchProject() is called with projectId empty', async (done) => {
 | |
|         await wrapper.vm.switchProject('')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).not.toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API not called when switchProject() is called with projectId length not equal 36', async (done) => {
 | |
|         await wrapper.vm.switchProject('test-project-id')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).not.toBeCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API will be called when switchProject() is called with projectId satisfying the condition', async (done) => {
 | |
|         mockAxios.mockResolvedValue({})
 | |
| 
 | |
|         await router.push({ name: 'testRouter31' })
 | |
|         await wrapper.vm.switchProject('111111111111111111111111111111111111')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'listProjects',
 | |
|             id: '111111111111111111111111111111111111',
 | |
|             listall: true,
 | |
|             details: 'min',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $router not changes when API response with result empty', async (done) => {
 | |
|         mockAxios.mockResolvedValue({ listprojectsresponse: {} })
 | |
| 
 | |
|         await router.push({ name: 'testRouter32' })
 | |
|         await wrapper.vm.switchProject('111111111111111111111111111111111111')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-32')
 | |
|         expect(router.currentRoute.value.query).toEqual({})
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $router, $store event when API response with result not empty', async (done) => {
 | |
|         mockAxios.mockResolvedValue({ listprojectsresponse: { project: [{ id: 'project-id' }] } })
 | |
| 
 | |
|         await router.push({ name: 'testRouter33' })
 | |
|         await wrapper.vm.switchProject('111111111111111111111111111111111111')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-33')
 | |
|         expect(router.currentRoute.value.query).toEqual({})
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('fetchData()', () => {
 | |
|       it('fetchData() should be return empty when $route.name equal `deployVirtualMachine`', async (done) => {
 | |
|         await router.push({ name: 'deployVirtualMachine' })
 | |
|         await wrapper.vm.fetchData()
 | |
| 
 | |
|         expect(wrapper.vm.items).toEqual([])
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check routeName when fetchData() is called with $route.name is not empty', async (done) => {
 | |
|         await router.push({ name: 'testRouter4' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.routeName).toEqual('testRouter4')
 | |
|         expect(wrapper.vm.items).toEqual([])
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check routeName when fetchData() is called with $route.name is empty', async (done) => {
 | |
|         await router.replace('/test-router-5')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.routeName).toEqual('testRouter5')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check resource, dataView when fetchData() is called with $route.meta.params is not empty', async (done) => {
 | |
|         await router.push({ name: 'testRouter6', params: { id: 'test-id' } })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.resource).toEqual({})
 | |
|         expect(wrapper.vm.dataView).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check columnKeys, actions when fetchData() is called with $route.meta.actions, route.meta.columns is not empty', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 0,
 | |
|             testapinamecase1: []
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter7' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.columnKeys.length).toEqual(3)
 | |
|         expect(wrapper.vm.actions.length).toEqual(1)
 | |
|         expect(wrapper.vm.columnKeys).toEqual(['column1', 'column2', 'column3'])
 | |
|         expect(wrapper.vm.actions).toEqual([{
 | |
|           label: 'labelname',
 | |
|           api: 'testApiNameCase1',
 | |
|           icon: 'plus-outlined',
 | |
|           listView: true
 | |
|         }])
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check columnKeys assign by store.getters.apis when fetchData() is called', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase4response: {
 | |
|             count: 0,
 | |
|             testapinamecase4: []
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter8' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.columnKeys.length).toEqual(3)
 | |
|         expect(wrapper.vm.columnKeys).toEqual(['column1', 'column2', 'column3'])
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check columnKeys assign by $route.meta.columns when fetchData() is called', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 0,
 | |
|             testapinamecase1: []
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter9' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.columns.length).toEqual(2)
 | |
|         expect(wrapper.vm.columns[0].key).toEqual('name')
 | |
|         expect(wrapper.vm.columns[0].title).toEqual('name-en')
 | |
|         expect(wrapper.vm.columns[0].dataIndex).toEqual('name')
 | |
|         expect(typeof wrapper.vm.columns[0].sorter).toBe('function')
 | |
|         expect(wrapper.vm.columns[1].key).toEqual('filtercolumn')
 | |
|         expect(wrapper.vm.columns[1].dataIndex).toEqual('filtercolumn')
 | |
|         expect(wrapper.vm.columns[1].customFilterDropdown).toBeTruthy()
 | |
|         done(0)
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params assign by $route.query', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase2response: {
 | |
|             count: 0,
 | |
|             testapinamecase2: []
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter10', query: { key: 'test-value' } })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           data: new URLSearchParams(),
 | |
|           method: 'GET',
 | |
|           params: {
 | |
|             command: 'testApiNameCase2',
 | |
|             listall: true,
 | |
|             key: 'test-value',
 | |
|             page: 1,
 | |
|             pagesize: 20,
 | |
|             response: 'json'
 | |
|           },
 | |
|           url: '/'
 | |
|         })
 | |
| 
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params assign by $route.meta.params', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase3response: {
 | |
|             count: 0,
 | |
|             testapinamecase3: []
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter11' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           data: new URLSearchParams(),
 | |
|           method: 'GET',
 | |
|           params: {
 | |
|             command: 'testApiNameCase3',
 | |
|             listall: true,
 | |
|             key: 'test-value',
 | |
|             page: 1,
 | |
|             pagesize: 20,
 | |
|             response: 'json'
 | |
|           },
 | |
|           url: '/'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       // it('API should be called with params has item id, name when $route.path startWith /ssh/', async (done) => {
 | |
|       //   await mockAxios.mockResolvedValue({
 | |
|       //     testapinamecase1response: {
 | |
|       //       count: 0,
 | |
|       //       testapinamecase1: [{
 | |
|       //         id: 'test-id-1',
 | |
|       //         name: 'test-name-1'
 | |
|       //       }]
 | |
|       //     }
 | |
|       //   })
 | |
|       //   await router.push({ name: 'testRouter12', params: { id: 'test-id' } })
 | |
|       //   await flushPromises()
 | |
| 
 | |
|       //   expect(mockAxios).toHaveBeenCalled()
 | |
|       //   expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|       //     url: '/',
 | |
|       //     method: 'GET',
 | |
|       //     data: new URLSearchParams(),
 | |
|       //     params: {
 | |
|       //       command: 'testApiNameCase1',
 | |
|       //       listall: true,
 | |
|       //       id: 'test-id',
 | |
|       //       name: 'test-id',
 | |
|       //       page: 1,
 | |
|       //       pagesize: 20,
 | |
|       //       response: 'json'
 | |
|       //     }
 | |
|       //   })
 | |
|       //   done()
 | |
|       // })
 | |
| 
 | |
|       it('API should be called with params has item id, hostname when $route.path startWith /ldapsetting/', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 0,
 | |
|             testapinamecase1: [{
 | |
|               id: 'test-id-1',
 | |
|               name: 'test-name-1'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter13', params: { id: 'test-id' } })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             listall: true,
 | |
|             id: 'test-id',
 | |
|             hostname: 'test-id',
 | |
|             page: 1,
 | |
|             pagesize: 20,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check items, resource when api is called with result is not empty', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           listtemplatesresponse: {
 | |
|             count: 2,
 | |
|             templates: [{
 | |
|               id: 'uuid1',
 | |
|               templateid: 'templateid-1',
 | |
|               name: 'template-test-1'
 | |
|             }, {
 | |
|               id: 'uuid2',
 | |
|               templateid: 'templateid-2',
 | |
|               name: 'template-test-2'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter14' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.items.length).toEqual(2)
 | |
|         expect(wrapper.vm.items).toEqual([
 | |
|           {
 | |
|             id: 'uuid1',
 | |
|             templateid: 'templateid-1',
 | |
|             name: 'template-test-1',
 | |
|             key: 0
 | |
|           },
 | |
|           {
 | |
|             id: 'uuid2',
 | |
|             templateid: 'templateid-2',
 | |
|             name: 'template-test-2',
 | |
|             key: 1
 | |
|           }
 | |
|         ])
 | |
|         expect(wrapper.vm.resource).toEqual({
 | |
|           id: 'uuid1',
 | |
|           templateid: 'templateid-1',
 | |
|           name: 'template-test-1',
 | |
|           key: 0
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check items, resource when api is called and $route.meta.columns has function', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 1,
 | |
|             testapinamecase1: [{
 | |
|               id: 'test-id',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter15' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.items).toEqual([{
 | |
|           id: 'test-id',
 | |
|           name: 'test-name-value',
 | |
|           key: 0,
 | |
|           column1: 'test-name-value'
 | |
|         }])
 | |
|         expect(wrapper.vm.resource).toEqual({
 | |
|           id: 'test-id',
 | |
|           name: 'test-name-value',
 | |
|           key: 0,
 | |
|           column1: 'test-name-value'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       // it('check items, resource when api is called and $route.path startWith /ssh', async (done) => {
 | |
|       //   await mockAxios.mockResolvedValue({
 | |
|       //     testapinamecase1response: {
 | |
|       //       count: 1,
 | |
|       //       testapinamecase1: [{
 | |
|       //         name: 'test-name-value'
 | |
|       //       }]
 | |
|       //     }
 | |
|       //   })
 | |
|       //   await router.push({ name: 'testRouter16' })
 | |
|       //   await flushPromises()
 | |
|       //
 | |
|       //   expect(wrapper.vm.items).toEqual([{
 | |
|       //     id: 'test-name-value',
 | |
|       //     name: 'test-name-value',
 | |
|       //     key: 0
 | |
|       //   }])
 | |
|       //   expect(wrapper.vm.resource).toEqual({
 | |
|       //     id: 'test-name-value',
 | |
|       //     name: 'test-name-value',
 | |
|       //     key: 0
 | |
|       //   })
 | |
|       //   done()
 | |
|       // })
 | |
| 
 | |
|       it('check items, resource when api is called and $route.path startWith /ldapsetting', async (done) => {
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 1,
 | |
|             testapinamecase1: [{
 | |
|               name: 'test-name-value',
 | |
|               hostname: 'test-hostname-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await router.push({ name: 'testRouter17' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.items).toEqual([{
 | |
|           id: 'test-hostname-value',
 | |
|           name: 'test-name-value',
 | |
|           hostname: 'test-hostname-value',
 | |
|           key: 0
 | |
|         }])
 | |
|         expect(wrapper.vm.resource).toEqual({
 | |
|           id: 'test-hostname-value',
 | |
|           name: 'test-name-value',
 | |
|           hostname: 'test-hostname-value',
 | |
|           key: 0
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $notifyError is called when api is called with throw error', async (done) => {
 | |
|         const errorMock = {
 | |
|           response: {},
 | |
|           message: 'Error: throw exception error'
 | |
|         }
 | |
| 
 | |
|         await mockAxios.mockRejectedValue(errorMock)
 | |
|         await router.push({ name: 'testRouter18' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledWith(errorMock)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $notifyError is called and router path = /exception/403 when api is called with throw error', async (done) => {
 | |
|         const errorMock = {
 | |
|           response: {
 | |
|             status: 405
 | |
|           },
 | |
|           message: 'Error: Method Not Allowed'
 | |
|         }
 | |
| 
 | |
|         await mockAxios.mockRejectedValue(errorMock)
 | |
|         await router.push({ name: 'testRouter19' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledWith(errorMock)
 | |
|         expect(router.currentRoute.value.path).toEqual('/exception/403')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $notifyError is called and router path = /exception/404 when api is called with throw error', async (done) => {
 | |
|         const errorMock = {
 | |
|           response: {
 | |
|             status: 430
 | |
|           },
 | |
|           message: 'Error: Request Header Fields Too Large'
 | |
|         }
 | |
| 
 | |
|         await mockAxios.mockRejectedValue(errorMock)
 | |
|         await router.push({ name: 'testRouter19' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledWith(errorMock)
 | |
|         expect(router.currentRoute.value.path).toEqual('/exception/404')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $notifyError is called and router path = /exception/500 when api is called with throw error', async (done) => {
 | |
|         const errorMock = {
 | |
|           response: {
 | |
|             status: 530
 | |
|           },
 | |
|           message: 'Error: Site is frozen'
 | |
|         }
 | |
| 
 | |
|         await mockAxios.mockRejectedValue(errorMock)
 | |
|         await router.push({ name: 'testRouter19' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$notifyError).toHaveBeenCalledWith(errorMock)
 | |
|         expect(router.currentRoute.value.path).toEqual('/exception/500')
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('onSearch()', () => {
 | |
|       it('check router when onSearch() is called with args empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter20', query: { page: 1, pagesize: 20 } })
 | |
|         await wrapper.vm.onSearch()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-20')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: '1', pagesize: '20' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check router when onSearch() is called with args not empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter21', query: { page: 1, pagesize: 20 } })
 | |
|         await wrapper.vm.onSearch({ value: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-21')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: '1', pagesize: '20', value: 'test-value' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check router when onSearch() is called with args have searchQuery', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter22', query: { page: 1, pagesize: 20 } })
 | |
|         await wrapper.vm.onSearch({ searchQuery: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-22')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           page: '1',
 | |
|           pagesize: '20',
 | |
|           keyword: 'test-value',
 | |
|           q: 'test-value'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check router when onSearch() is called with args have searchQuery and route.name equal `role`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'role' })
 | |
|         await wrapper.vm.onSearch({ searchQuery: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/role')
 | |
|         expect(router.currentRoute.value.query).toEqual({ keyword: 'test-value', q: 'test-value', page: '1', pagesize: '20' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check router when onSearch() is called with args have searchQuery and route.name equal `quotaemailtemplate`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'quotaemailtemplate' })
 | |
|         await wrapper.vm.onSearch({ searchQuery: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/quotaemailtemplate')
 | |
|         expect(router.currentRoute.value.query).toEqual({ templatetype: 'test-value', q: 'test-value', page: '1', pagesize: '20' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check router when onSearch() is called with args have searchQuery and route.name equal `quotaemailtemplate`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'globalsetting' })
 | |
|         await wrapper.vm.onSearch({ searchQuery: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/globalsetting')
 | |
|         expect(router.currentRoute.value.query).toEqual({ name: 'test-value', q: 'test-value', page: '1', pagesize: '20' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('fetchData() should be called when onSearch() is called', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
|         await router.push({ name: 'testRouter23', query: { page: 1, pagesize: 20, value: 'test-value' } })
 | |
|         await wrapper.vm.onSearch({ page: '1', pagesize: '20', value: 'test-value' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenLastCalledWith({ page: '1', pagesize: '20', value: 'test-value' })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('closeAction()', () => {
 | |
|       it('check currentAction, showAction when closeAction() is called', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             label: 'label.name',
 | |
|             loading: true,
 | |
|             paramFields: []
 | |
|           },
 | |
|           showAction: true
 | |
|         })
 | |
|         await wrapper.vm.closeAction()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction).toEqual({})
 | |
|         expect(wrapper.vm.showAction).toBeFalsy()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('execAction()', () => {
 | |
|       it('check showAction, actionData and router name when execAction() is called', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         await wrapper.setData({ actionData: { name: 'test-add-action' } })
 | |
|         await wrapper.vm.execAction({
 | |
|           label: 'labelname',
 | |
|           icon: 'plus-outlined',
 | |
|           component: {},
 | |
|           api: 'testRouter24',
 | |
|           popup: false
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.showAction).toBeFalsy()
 | |
|         expect(router.currentRoute.value.name).toEqual('testRouter24')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check currentAction params and paramsField when execAction() is called', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.execAction({
 | |
|           label: 'label.name',
 | |
|           api: 'testApiNameCase5',
 | |
|           paramFields: []
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction.params).toEqual([
 | |
|           { name: 'id', type: 'string' },
 | |
|           { name: 'name', type: 'string' },
 | |
|           { name: 'column1', type: 'string' },
 | |
|           { name: 'column2', type: 'string' },
 | |
|           { name: 'column3', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.currentAction.paramFields).toEqual([])
 | |
|         expect(wrapper.vm.showAction).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check currentAction params and paramsField when execAction() is called with args is exists', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.execAction({
 | |
|           api: 'testApiNameCase5',
 | |
|           args: ['column1', 'column2', 'column3']
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction.params).toEqual([
 | |
|           { name: 'column1', type: 'string' },
 | |
|           { name: 'column2', type: 'string' },
 | |
|           { name: 'column3', type: 'string' },
 | |
|           { name: 'name', type: 'string' },
 | |
|           { name: 'id', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.currentAction.paramFields).toEqual([
 | |
|           { name: 'column1', type: 'string' },
 | |
|           { name: 'column2', type: 'string' },
 | |
|           { name: 'column3', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.showAction).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check currentAction params and paramsField when execAction() is called with args is function', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.execAction({
 | |
|           api: 'testApiNameCase5',
 | |
|           resource: { id: 'test-id-value', name: 'test-name-value' },
 | |
|           args: (record, store) => {
 | |
|             return ['Admin'].includes(store.userInfo.roletype) ? ['column1', 'column2', 'column3'] : ['id', 'name']
 | |
|           }
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction.params).toEqual([
 | |
|           { name: 'id', type: 'string' },
 | |
|           { name: 'name', type: 'string' },
 | |
|           { name: 'column1', type: 'string' },
 | |
|           { name: 'column2', type: 'string' },
 | |
|           { name: 'column3', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.currentAction.paramFields).toEqual([
 | |
|           { name: 'id', type: 'string' },
 | |
|           { name: 'name', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.showAction).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check currentAction paramsField and listUuidOpts() is called when execAction() is called', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         const listUuidOpts = jest.spyOn(wrapper.vm, 'listUuidOpts')
 | |
|         await wrapper.vm.execAction({
 | |
|           api: 'testApiNameCase6',
 | |
|           args: ['id', 'tags', 'column1', 'column2', 'account'],
 | |
|           mapping: {
 | |
|             column2: () => {
 | |
|               return 'test-value'
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction.paramFields).toEqual([
 | |
|           { name: 'id', type: 'uuid' },
 | |
|           { name: 'tags', type: 'string' },
 | |
|           { name: 'column1', type: 'list' },
 | |
|           { name: 'column2', type: 'string' },
 | |
|           { name: 'account', type: 'string' }
 | |
|         ])
 | |
|         expect(wrapper.vm.showAction).toBeTruthy()
 | |
|         expect(listUuidOpts).toHaveBeenCalledTimes(4)
 | |
|         expect(listUuidOpts).toHaveBeenCalledWith({ name: 'id', type: 'uuid' }, undefined)
 | |
|         expect(listUuidOpts).toHaveBeenCalledWith({ name: 'column1', type: 'list' }, undefined)
 | |
|         expect(listUuidOpts).toHaveBeenCalledWith({ name: 'column2', type: 'string' }, undefined)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check fillEditFormFieldValues() is called when execAction() is called', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         const fillEditFormFieldValues = jest.spyOn(wrapper.vm, 'fillEditFormFieldValues')
 | |
| 
 | |
|         await wrapper.vm.execAction({
 | |
|           api: 'testApiNameCase6',
 | |
|           dataView: true,
 | |
|           icon: 'edit-outlined'
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fillEditFormFieldValues).toHaveBeenCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check currentAction paramFields when execAction() is called args has confirmpassword field', async (done) => {
 | |
|         originalFunc.getFirstIndexFocus = wrapper.vm.getFirstIndexFocus
 | |
|         originalFunc.setRules = wrapper.vm.setRules
 | |
|         originalFunc.listUuidOpts = wrapper.vm.listUuidOpts
 | |
|         originalFunc.fillEditFormFieldValues = wrapper.vm.fillEditFormFieldValues
 | |
| 
 | |
|         wrapper.vm.getFirstIndexFocus = jest.fn()
 | |
|         wrapper.vm.setRules = jest.fn((param) => {})
 | |
|         wrapper.vm.listUuidOpts = jest.fn((param) => {})
 | |
|         wrapper.vm.fillEditFormFieldValues = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.execAction({
 | |
|           api: 'testApiNameCase6',
 | |
|           args: ['confirmpassword'],
 | |
|           mapping: {}
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.currentAction.paramFields).toEqual([
 | |
|           { name: 'confirmpassword', type: 'password', required: true, description: 'confirmpassword-description-en' }
 | |
|         ])
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('listUuidOpts()', () => {
 | |
|       it('API not called when listUuidOpts() is called with currentAction.mapping.id is null', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             mapping: {
 | |
|               id: () => { return '' }
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts({ name: 'id', type: 'uuid' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).not.toHaveBeenCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API not called when listUuidOpts() is called with currentAction.mapping is empty', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             mapping: {}
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts({ name: 'test-name', type: 'uuid' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).not.toHaveBeenCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called and param.opts when listUuidOpts() is called with currentAction.mapping[param.name].api', async (done) => {
 | |
|         const param = { name: 'template', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 1,
 | |
|             testapinamecase1: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             mapping: {
 | |
|               template: {
 | |
|                 api: 'testApiNameCase1'
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             listall: true,
 | |
|             showicon: true,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'template',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when listUuidOpts() is called with store apis has api startWith param.name', async (done) => {
 | |
|         const param = { name: 'testapiname', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           listtestapinamesresponse: {
 | |
|             count: 1,
 | |
|             testapiname: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'listTestApiNames',
 | |
|             listall: true,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'testapiname',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params has item name and value assign by resource', async (done) => {
 | |
|         const param = { name: 'template', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           testapinamecase1response: {
 | |
|             count: 0,
 | |
|             testapinamecase1: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             mapping: {
 | |
|               template: {
 | |
|                 api: 'testApiNameCase1',
 | |
|                 params: (record) => {
 | |
|                   return {
 | |
|                     name: record.name
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             listall: true,
 | |
|             name: 'test-name-value',
 | |
|             showicon: true,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'template',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params has item templatefilter when apiName is listTemplates', async (done) => {
 | |
|         const param = { name: 'id', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           listtemplateresponse: {
 | |
|             count: 1,
 | |
|             templates: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.setData({
 | |
|           apiName: 'listTemplates'
 | |
|         })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'listTemplates',
 | |
|             listall: true,
 | |
|             templatefilter: 'executable',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'id',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params has item isofilter when apiName is listIsos', async (done) => {
 | |
|         const param = { name: 'id', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           listisosresponse: {
 | |
|             count: 1,
 | |
|             iso: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.setData({ apiName: 'listIsos' })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'listIsos',
 | |
|             listall: true,
 | |
|             isofilter: 'executable',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'id',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with params has item type = routing when apiName is listHosts', async (done) => {
 | |
|         const param = { name: 'id', type: 'uuid' }
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           listhostresponse: {
 | |
|             count: 1,
 | |
|             hosts: [{
 | |
|               id: 'test-id-value',
 | |
|               name: 'test-name-value'
 | |
|             }]
 | |
|           }
 | |
|         })
 | |
|         await wrapper.setData({ apiName: 'listHosts' })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'listHosts',
 | |
|             listall: true,
 | |
|             type: 'routing',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'id',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: [{
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called and param.opts is empty when api throw error', async (done) => {
 | |
|         const param = { name: 'id', type: 'uuid', loading: true }
 | |
|         spyConsole.log = jest.spyOn(console, 'log').mockImplementation(() => {})
 | |
| 
 | |
|         await mockAxios.mockRejectedValue({
 | |
|           response: {},
 | |
|           stack: 'Error: throw exception error'
 | |
|         })
 | |
|         await wrapper.setData({ apiName: 'testApiNameCase1' })
 | |
|         await wrapper.vm.listUuidOpts(param)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             listall: true,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         expect(param).toEqual({
 | |
|           name: 'id',
 | |
|           type: 'uuid',
 | |
|           loading: false,
 | |
|           opts: []
 | |
|         })
 | |
| 
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('pollActionCompletion()', () => {
 | |
|       it('check $notification when pollActionCompletion() is called with action is empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           queryasyncjobresultresponse: {
 | |
|             jobstatus: 1,
 | |
|             jobresult: {
 | |
|               name: 'test-name-value'
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.pollActionCompletion('test-job-id', { label: 'label.name' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenCalled()
 | |
|         expect(mocks.$notification.info).not.toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'queryAsyncJobResult',
 | |
|             jobId: 'test-job-id',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $notification when pollActionCompletion() is called with action is not empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           queryasyncjobresultresponse: {
 | |
|             jobstatus: 1,
 | |
|             jobresult: {
 | |
|               name: 'test-name-value'
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.pollActionCompletion('test-job-id', {
 | |
|           label: 'labelname',
 | |
|           response: (jobResult) => {
 | |
|             return jobResult.name
 | |
|           }
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenCalled()
 | |
|         expect(mocks.$notification.info).toHaveBeenCalled()
 | |
|         expect(mocks.$notification.info).toHaveLastReturnedWith({
 | |
|           message: 'test-name-en',
 | |
|           description: 'test-description-info',
 | |
|           duration: 0
 | |
|         })
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'queryAsyncJobResult',
 | |
|             jobId: 'test-job-id',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
| 
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('fetchData() should be called when $pollJob error response', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await mockAxios.mockResolvedValue({
 | |
|           queryasyncjobresultresponse: {
 | |
|             jobstatus: 2,
 | |
|             jobresult: {
 | |
|               errortext: 'test-error-message'
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.pollActionCompletion('test-job-id', {
 | |
|           label: 'labelname',
 | |
|           response: (jobResult) => {
 | |
|             return jobResult.name
 | |
|           }
 | |
|         })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'queryAsyncJobResult',
 | |
|             jobId: 'test-job-id',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('fillEditFormFieldValues()', () => {
 | |
|       it('form data should be empty when currentAction.paramFields empty', async (done) => {
 | |
|         await wrapper.setData({ currentAction: { paramFields: [] } })
 | |
|         await wrapper.vm.fillEditFormFieldValues()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.form).toEqual({})
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('form data should not empty when currentAction.paramFields has item type equal `list`', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             paramFields: [
 | |
|               { name: 'domainids', type: 'list' }
 | |
|             ]
 | |
|           },
 | |
|           resource: {
 | |
|             domainname: ['test-domain-value-1', 'test-domain-value-2']
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.fillEditFormFieldValues()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.form).toEqual({ domainids: ['test-domain-value-1', 'test-domain-value-2'] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('form data should not empty when currentAction.paramFields has item type equal `account`', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             paramFields: [
 | |
|               { name: 'account', type: 'string' }
 | |
|             ]
 | |
|           },
 | |
|           resource: {
 | |
|             account: 'test-account-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.fillEditFormFieldValues()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.form).toEqual({ account: 'test-account-value' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('form data should not empty when currentAction.paramFields has item type not in [`list`, `account`]', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             paramFields: [
 | |
|               { name: 'name', type: 'string' }
 | |
|             ]
 | |
|           },
 | |
|           resource: {
 | |
|             name: 'test-name-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.fillEditFormFieldValues()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.form).toEqual({ name: 'test-name-value' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('form data should be empty when currentAction.paramFields has item not exist in resource', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             paramFields: [
 | |
|               { name: 'templatename', type: 'string' }
 | |
|             ]
 | |
|           },
 | |
|           resource: {
 | |
|             name: 'test-name-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.fillEditFormFieldValues()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.form).toEqual({})
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('changeFilter()', () => {
 | |
|       it('check `route.query` when changeFilter() is called with empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter25' })
 | |
|         await wrapper.vm.changeFilter()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-25')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: undefined,
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with $route has query', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter25', query: { templatefilter: 'template', account: 'test-account' } })
 | |
|         await wrapper.vm.changeFilter('filter')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-25')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: 'filter',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with filter not empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter25' })
 | |
|         await wrapper.vm.changeFilter('filter')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-25')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: 'filter',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with $route.name equal `template`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'template' })
 | |
|         await wrapper.vm.changeFilter('filter')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/template')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: 'filter',
 | |
|           templatefilter: 'filter',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with $route.name equal `iso`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'iso' })
 | |
|         await wrapper.vm.changeFilter('filter')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/iso')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: 'filter',
 | |
|           isofilter: 'filter',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with $route.name equal `guestnetwork`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'guestnetwork' })
 | |
|         await wrapper.vm.changeFilter('filter')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/guestnetwork')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           filter: 'filter',
 | |
|           networkfilter: 'filter',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with filter equal `self` and $route.name equal `vm`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'vm' })
 | |
|         await wrapper.vm.changeFilter('self')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/vm')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           account: 'test-account',
 | |
|           domainid: 'test-domain-id',
 | |
|           filter: 'self',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check `route.query` when changeFilter() is called with filter equal `running` and $route.name equal `vm`', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'vm' })
 | |
|         await wrapper.vm.changeFilter('running')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/vm')
 | |
|         expect(router.currentRoute.value.query).toEqual({
 | |
|           state: 'running',
 | |
|           filter: 'running',
 | |
|           page: '1',
 | |
|           pagesize: '20'
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('changePage()', () => {
 | |
|       it('check $route query when changePage() is called with args not empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter26' })
 | |
|         await wrapper.vm.changePage(2, 10)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-26')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: '2', pagesize: '10' })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $route query when changePage() is called with args empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter26', query: { page: 1, pagesize: 10 } })
 | |
|         await wrapper.vm.changePage()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-26')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: undefined, pagesize: undefined })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('changePageSize()', () => {
 | |
|       it('check $route query when changePageSize() is called with args empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter27' })
 | |
|         await wrapper.vm.changePageSize()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-27')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: undefined, pagesize: undefined })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check $route query when changePageSize() is called with args not empty', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
| 
 | |
|         await router.push({ name: 'testRouter27' })
 | |
|         await wrapper.vm.changePageSize(2, 10)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(router.currentRoute.value.path).toEqual('/test-router-27')
 | |
|         expect(router.currentRoute.value.query).toEqual({ page: '2', pagesize: '10' })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('start()', () => {
 | |
|       it('check loading, selectedRowKeys, fetchData() when start() is called', async (done) => {
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.fetchData = jest.fn((args) => {})
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
| 
 | |
|         await wrapper.setData({ selectedRowKeys: [{ id: 'test-id' }] })
 | |
|         await wrapper.vm.start()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenCalledTimes(1)
 | |
| 
 | |
|         setTimeout(() => {
 | |
|           expect(wrapper.vm.loading).toBeFalsy()
 | |
|           expect(wrapper.vm.selectedRowKeys).toEqual([])
 | |
|           done()
 | |
|         }, 1000)
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('toggleLoading()', () => {
 | |
|       it('check loading when toggleLoading() is called', async (done) => {
 | |
|         await wrapper.setData({ loading: false })
 | |
|         await wrapper.vm.toggleLoading()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.loading).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('startLoading()', () => {
 | |
|       it('check loading when startLoading() is called', async (done) => {
 | |
|         await wrapper.setData({ loading: false })
 | |
|         await wrapper.vm.startLoading()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.loading).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('finishLoading()', () => {
 | |
|       it('check loading when finishLoading() is called', async (done) => {
 | |
|         await wrapper.setData({ loading: true })
 | |
|         await wrapper.vm.finishLoading()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.loading).toBeFalsy()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('handleConfirmBlur()', () => {
 | |
|       it('check confirmDirty value when handleConfirmBlur() is called with args empty', async (done) => {
 | |
|         await wrapper.setData({ confirmDirty: undefined })
 | |
|         await wrapper.vm.handleConfirmBlur()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.confirmDirty).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check confirmDirty value when handleConfirmBlur() is called with args name not equal `confirmpassword`', async (done) => {
 | |
|         const event = document.createEvent('Event')
 | |
| 
 | |
|         await wrapper.setData({ confirmDirty: undefined })
 | |
|         await wrapper.vm.handleConfirmBlur(event, 'test')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.confirmDirty).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check confirmDirty value when handleConfirmBlur() is called with args name equal `confirmpassword`', async (done) => {
 | |
|         await wrapper.setData({ confirmDirty: false })
 | |
|         await wrapper.vm.handleConfirmBlur({ target: { value: true } }, 'confirmpassword')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.confirmDirty).toBeTruthy()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('validateTwoPassword()', () => {
 | |
|       it('validate password result is empty when validateTwoPassword() calling with value empty', async (done) => {
 | |
|         wrapper.vm.form = {}
 | |
| 
 | |
|         const result = await wrapper.vm.validateTwoPassword({}, null)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `confirmpassword` not valid when validateTwoPassword() is called with `password` not empty', async (done) => {
 | |
|         let result = null
 | |
|         wrapper.vm.form = { password: 'abc123' }
 | |
| 
 | |
|         try {
 | |
|           result = await wrapper.vm.validateTwoPassword({ field: 'confirmpassword' }, '123abc')
 | |
|           await flushPromises()
 | |
|         } catch (e) {
 | |
|           result = e
 | |
|         }
 | |
| 
 | |
|         expect(result).not.toBeUndefined()
 | |
|         expect(result).toEqual('message validate password')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `confirmpassword` valid and result empty when validateTwoPassword() is called with `password` not empty', async (done) => {
 | |
|         wrapper.vm.form = { password: 'abc123' }
 | |
| 
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'confirmpassword' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `password` valid when validateTwoPassword() is called with `confirmpassword` is empty', async (done) => {
 | |
|         wrapper.vm.form = { confirmpassword: '' }
 | |
| 
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'password' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `password` valid when validateTwoPassword() is called with `confirmpassword` not empty', async (done) => {
 | |
|         wrapper.vm.form = { confirmpassword: 'abc123' }
 | |
| 
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'password' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `confirmpassword` a when validateTwoPassword() is called with confirmDirty equal true', async (done) => {
 | |
|         wrapper.vm.form = { confirmpassword: '123abc' }
 | |
|         originalFunc.RefValidateFields = wrapper.vm.formRef.value.validateFields
 | |
|         wrapper.vm.formRef.value.validateFields = jest.fn((field) => {})
 | |
| 
 | |
|         const formRefValidate = jest.spyOn(wrapper.vm.formRef.value, 'validateFields')
 | |
|         await wrapper.setData({ confirmDirty: true })
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'password' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         expect(formRefValidate).toHaveBeenCalledTimes(1)
 | |
|         expect(formRefValidate).toHaveBeenLastCalledWith('confirmpassword')
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate field `password` valid when validateTwoPassword() is called with confirmDirty equal false', async (done) => {
 | |
|         wrapper.vm.form = { confirmpassword: 'abc123' }
 | |
| 
 | |
|         await wrapper.setData({ confirmDirty: false })
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'password' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('validate result empty when validateTwoPassword() is called with rules.field not equals `password` or `confirmpassword`', async (done) => {
 | |
|         wrapper.vm.form = {}
 | |
| 
 | |
|         const result = await wrapper.vm.validateTwoPassword({ field: 'name' }, 'abc123')
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(result).toBeUndefined()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('setRules()', () => {
 | |
|       it('check rules when setRules() is called with args empty', async (done) => {
 | |
|         await wrapper.vm.setRules()
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({})
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with args not empty', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ required: true, message: 'required-input' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with args field.type equal `boolean`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true, type: 'boolean' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ required: true, message: 'required-input' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with currentAction.mapping not empty', async (done) => {
 | |
|         await wrapper.setData({
 | |
|           currentAction: {
 | |
|             mapping: {
 | |
|               field: {
 | |
|                 options: []
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ required: true, message: 'required-select' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `keypair`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'keypair', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ keypair: [{ required: true, message: 'required-select' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `account`', async (done) => {
 | |
|         await wrapper.setData({ currentAction: { api: 'testApiNameCase1' } })
 | |
|         await wrapper.vm.setRules({ name: 'account', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ account: [{ required: true, message: 'required-select' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.type equal `uuid`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true, type: 'uuid' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ required: true, message: 'required-select' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.type equal `list`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true, type: 'list' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ type: 'array', required: true, message: 'required-select' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.type equal `long`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'field', required: true, type: 'long' })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({ field: [{ type: 'number', required: true, message: 'required-number' }] })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `password`', async (done) => {
 | |
|         originalFunc.validateTwoPassword = wrapper.vm.validateTwoPassword
 | |
|         wrapper.vm.validateTwoPassword = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.setRules({ name: 'password', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           password: [
 | |
|             { required: true, message: 'required-input' },
 | |
|             { validator: wrapper.vm.validateTwoPassword }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `currentpassword`', async (done) => {
 | |
|         originalFunc.validateTwoPassword = wrapper.vm.validateTwoPassword
 | |
|         wrapper.vm.validateTwoPassword = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.setRules({ name: 'currentpassword', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           currentpassword: [
 | |
|             { required: true, message: 'required-input' },
 | |
|             { validator: wrapper.vm.validateTwoPassword }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `confirmpassword`', async (done) => {
 | |
|         originalFunc.validateTwoPassword = wrapper.vm.validateTwoPassword
 | |
|         wrapper.vm.validateTwoPassword = jest.fn()
 | |
| 
 | |
|         await wrapper.vm.setRules({ name: 'confirmpassword', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           confirmpassword: [
 | |
|             { required: true, message: 'required-input' },
 | |
|             { validator: wrapper.vm.validateTwoPassword }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `certificate`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'certificate', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           certificate: [
 | |
|             { required: true, message: 'required-input' }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `privatekey`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'privatekey', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           privatekey: [
 | |
|             { required: true, message: 'required-input' }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('check rules when setRules() is called with field.name equal `certchain`', async (done) => {
 | |
|         await wrapper.vm.setRules({ name: 'certchain', required: true })
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.rules).toEqual({
 | |
|           certchain: [
 | |
|             { required: true, message: 'required-input' }
 | |
|           ]
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('handleSubmit', () => {
 | |
|       it('execSubmit() should be called when handleSubmit() is called in resource view', async (done) => {
 | |
|         originalFunc.execSubmit = wrapper.vm.execSubmit
 | |
|         wrapper.vm.execSubmit = jest.fn((event) => {})
 | |
| 
 | |
|         const execSubmit = jest.spyOn(wrapper.vm, 'execSubmit')
 | |
|         const event = document.createEvent('Event')
 | |
|         await wrapper.setData({ dataView: true })
 | |
|         await wrapper.vm.handleSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(execSubmit).toHaveBeenCalledTimes(1)
 | |
|         expect(execSubmit).toHaveBeenCalledWith(event)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('formRef makes validation calls when handleSubmit() is called in list view', async (done) => {
 | |
|         originalFunc.callGroupApi = wrapper.vm.callGroupApi
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         originalFunc.formRef = wrapper.vm.formRef
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.callGroupApi = jest.fn((params, resourceName) => {
 | |
|           return new Promise(resolve => {
 | |
|             resolve()
 | |
|           })
 | |
|         })
 | |
|         if (!wrapper.vm.formRef) {
 | |
|           wrapper.vm.formRef = ref()
 | |
|         }
 | |
|         wrapper.vm.formRef.value.validate = jest.fn((params, resourceName) => {
 | |
|           return new Promise(resolve => {
 | |
|             resolve()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
|         const callGroupApi = jest.spyOn(wrapper.vm, 'callGroupApi')
 | |
|         const event = document.createEvent('Event')
 | |
| 
 | |
|         await wrapper.setData({
 | |
|           dataView: false,
 | |
|           currentAction: {
 | |
|             label: 'label.name',
 | |
|             groupAction: true,
 | |
|             groupMap: (selection) => {
 | |
|               return selection.map(x => { return { id: x } })
 | |
|             }
 | |
|           },
 | |
|           selectedRowKeys: ['test-id-value-1'],
 | |
|           items: [{
 | |
|             id: 'test-id-value-1',
 | |
|             name: 'test-name-value-1'
 | |
|           }],
 | |
|           columns: [{
 | |
|             key: 'column1',
 | |
|             dataIndex: 'column1',
 | |
|             title: 'column1'
 | |
|           }]
 | |
|         })
 | |
|         await wrapper.vm.handleSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(wrapper.vm.promises).toHaveLength(1)
 | |
|         expect(callGroupApi).toHaveBeenCalledTimes(1)
 | |
|         expect(callGroupApi).toHaveBeenCalledWith({ id: 'test-id-value-1' }, 'test-name-value-1')
 | |
|         expect(fetchData).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$message.info).toHaveBeenCalledTimes(1)
 | |
|         expect(mocks.$message.info).toHaveBeenCalledWith({
 | |
|           content: 'name-en',
 | |
|           key: 'label.name',
 | |
|           duration: 3
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     describe('execSubmit()', () => {
 | |
|       it('API should be called with params has item id equal resource.id', async (done) => {
 | |
|         mockAxios.mockResolvedValue({})
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             icon: 'plus-outlined',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-resource-id'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             id: 'test-resource-id',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key not exist in currentAction.params', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-resource-id'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             id: 'test-resource-id',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key exist in currentAction.params, type is boolean and value is undefined', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: undefined }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'boolean' }],
 | |
|             paramFields: [{ name: 'column1', type: 'boolean' }]
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: false,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key exist in currentAction.params, type is boolean and value is null', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: null }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'boolean' }],
 | |
|             paramFields: [{ name: 'column1', type: 'boolean' }]
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: false,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key exist in currentAction.params, type is boolean and value is empty', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: '' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'boolean' }],
 | |
|             paramFields: [{ name: 'column1', type: 'boolean' }]
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: false,
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has not input tag', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: '' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'string' }],
 | |
|             paramFields: [{ name: 'column1', type: 'string' }]
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key exist in currentAction.mapping', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: 1 }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'list' }],
 | |
|             paramFields: [{ name: 'column1', type: 'list' }],
 | |
|             mapping: {
 | |
|               column1: {
 | |
|                 options: ['column-value1', 'column-value2']
 | |
|               }
 | |
|             }
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: 'column-value2',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key not exist in currentAction.mapping, type is list and currentAction.params[input] has id', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: [1, 2] }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [
 | |
|               {
 | |
|                 name: 'column1',
 | |
|                 type: 'list',
 | |
|                 opts: [
 | |
|                   { id: 'test-id-1', value: 'test-value-1' },
 | |
|                   { id: 'test-id-2', value: 'test-value-2' },
 | |
|                   { id: 'test-id-3', value: 'test-value-3' }
 | |
|                 ]
 | |
|               }
 | |
|             ],
 | |
|             paramFields: [
 | |
|               {
 | |
|                 name: 'column1',
 | |
|                 type: 'list',
 | |
|                 opts: [
 | |
|                   { id: 'test-id-1', value: 'test-value-1' },
 | |
|                   { id: 'test-id-2', value: 'test-value-2' },
 | |
|                   { id: 'test-id-3', value: 'test-value-3' }
 | |
|                 ]
 | |
|               }
 | |
|             ],
 | |
|             mapping: {}
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: 'test-id-2,test-id-3',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key has name = account, currentAction.api = createAccount', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { account: 'test-account-value' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'createAccount',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'account', type: 'string' }],
 | |
|             paramFields: [{ name: 'account', type: 'string' }],
 | |
|             mapping: {}
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'createAccount',
 | |
|             account: 'test-account-value',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key has name = keypair, currentAction.api = addAccountToProject', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { keypair: 'test-keypair-value' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'addAccountToProject',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'keypair', type: 'string' }],
 | |
|             paramFields: [{ name: 'keypair', type: 'string' }],
 | |
|             mapping: {}
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'addAccountToProject',
 | |
|             keypair: 'test-keypair-value',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key name = (account | keypair), currentAction.api != (addAccountToProject | createAccount)', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { keypair: 1 }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [
 | |
|               {
 | |
|                 name: 'keypair',
 | |
|                 type: 'string',
 | |
|                 opts: [
 | |
|                   { id: 'test-id-1', name: 'test-name-1' },
 | |
|                   { id: 'test-id-2', name: 'test-name-2' }
 | |
|                 ]
 | |
|               }
 | |
|             ],
 | |
|             paramFields: [
 | |
|               {
 | |
|                 name: 'keypair',
 | |
|                 type: 'string',
 | |
|                 opts: [
 | |
|                   { id: 'test-id-1', name: 'test-name-1' },
 | |
|                   { id: 'test-id-2', name: 'test-name-2' }
 | |
|                 ]
 | |
|               }
 | |
|             ],
 | |
|             mapping: {}
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             keypair: 'test-name-2',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when form has input key do not fall under special condition.', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: 'test-column-value' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'string' }],
 | |
|             paramFields: [{ name: 'column1', type: 'string' }],
 | |
|             mapping: {}
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: 'test-column-value',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when currentAction has defaultArgs', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: 'test-column1-value' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'string' }],
 | |
|             paramFields: [{ name: 'column1', type: 'string' }],
 | |
|             mapping: {},
 | |
|             defaultArgs: {
 | |
|               column2: 'test-column2-value'
 | |
|             }
 | |
|           },
 | |
|           resource: {}
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: 'test-column1-value',
 | |
|             column2: 'test-column2-value',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called when currentAction.mapping has value and value is function', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.form = { column1: 'test-column1-value' }
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'column1', type: 'string' }],
 | |
|             paramFields: [{ name: 'column1', type: 'string' }],
 | |
|             mapping: {
 | |
|               column2: {
 | |
|                 value: (record, params) => {
 | |
|                   return record.name
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value',
 | |
|             name: 'test-name-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'GET',
 | |
|           data: new URLSearchParams(),
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             column1: 'test-column1-value',
 | |
|             column2: 'test-name-value',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('API should be called with post method', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
| 
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }],
 | |
|             post: true
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         const postData = new URLSearchParams()
 | |
|         postData.append('id', 'test-id-value')
 | |
| 
 | |
|         expect(mockAxios).toHaveBeenCalled()
 | |
|         expect(mockAxios).toHaveBeenLastCalledWith({
 | |
|           url: '/',
 | |
|           method: 'POST',
 | |
|           data: postData,
 | |
|           params: {
 | |
|             command: 'testApiNameCase1',
 | |
|             response: 'json'
 | |
|           }
 | |
|         })
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('handleResponse() & closeAction() should be called when API response success', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, params, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const handleResponse = jest.spyOn(wrapper.vm, 'handleResponse')
 | |
|         const closeAction = jest.spyOn(wrapper.vm, 'closeAction')
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           }
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(handleResponse).toHaveBeenCalledTimes(1)
 | |
|         expect(handleResponse).toHaveBeenLastCalledWith(
 | |
|           {},
 | |
|           'test-id-value',
 | |
|           'test-id-value',
 | |
|           {
 | |
|             api: 'testApiNameCase1',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           }
 | |
|         )
 | |
|         expect(closeAction).toHaveBeenCalledTimes(1)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('$router should go back when API response success with shouldNavigateBack() return true', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         originalFunc.routerGo = wrapper.vm.$router.go
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return true })
 | |
|         wrapper.vm.$router.go = jest.fn((number) => {})
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const routerGo = jest.spyOn(wrapper.vm.$router, 'go')
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             icon: 'delete-outlined',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           },
 | |
|           dataView: true
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(routerGo).toHaveBeenCalledTimes(1)
 | |
|         expect(routerGo).toHaveBeenLastCalledWith(-1)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('$router should go back when API response success with action.api equal `archiveEvents`', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         originalFunc.routerGo = wrapper.vm.$router.go
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return true })
 | |
|         wrapper.vm.$router.go = jest.fn((number) => {})
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const routerGo = jest.spyOn(wrapper.vm.$router, 'go')
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'archiveEvents',
 | |
|             icon: 'plus-outlined',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           },
 | |
|           dataView: true
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(routerGo).toHaveBeenCalledTimes(1)
 | |
|         expect(routerGo).toHaveBeenLastCalledWith(-1)
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('fetchData() should be called when API response success with jobId empty', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve() })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             icon: 'plus-outlined',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           },
 | |
|           dataView: true
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).toHaveBeenCalled()
 | |
|         done()
 | |
|       })
 | |
| 
 | |
|       it('fetchData() not called when API response success with jobId not empty', async (done) => {
 | |
|         originalFunc.handleResponse = wrapper.vm.handleResponse
 | |
|         originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
 | |
|         originalFunc.closeAction = wrapper.vm.closeAction
 | |
|         originalFunc.fetchData = wrapper.vm.fetchData
 | |
|         wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action) => { return Promise.resolve('test-job-id') })
 | |
|         wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
 | |
|         wrapper.vm.closeAction = jest.fn()
 | |
|         wrapper.vm.fetchData = jest.fn()
 | |
| 
 | |
|         const fetchData = jest.spyOn(wrapper.vm, 'fetchData')
 | |
|         const event = document.createEvent('Event')
 | |
|         await mockAxios.mockResolvedValue({})
 | |
|         await wrapper.setData({
 | |
|           showAction: true,
 | |
|           currentAction: {
 | |
|             api: 'testApiNameCase1',
 | |
|             icon: 'plus-outlined',
 | |
|             label: 'label.name',
 | |
|             params: [{ name: 'id', type: 'uuid' }],
 | |
|             paramFields: [{ name: 'id', type: 'uuid' }]
 | |
|           },
 | |
|           resource: {
 | |
|             id: 'test-id-value'
 | |
|           },
 | |
|           dataView: true
 | |
|         })
 | |
|         await wrapper.vm.execSubmit(event)
 | |
|         await flushPromises()
 | |
| 
 | |
|         expect(fetchData).not.toHaveBeenCalled()
 | |
|         done()
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| })
 |