mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
* 4.18: UI: allow new keys for VM details (#7793) Refactoring StorPool's smoke tests (#7392) UI: decode userdata in EditVM dialog (#7796) packaging: unalias cp before package upgrade (#7722) make NoopDbUpgrade do a systemvm template check (#7564) UI unit test: fix expected values (#7792)
3185 lines
106 KiB
JavaScript
3185 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
|
|
}])
|
|
expect(wrapper.vm.resource).toEqual({
|
|
id: 'test-id',
|
|
name: 'test-name-value',
|
|
key: 0
|
|
})
|
|
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()
|
|
})
|
|
})
|
|
})
|
|
})
|