1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-10 12:01:57 +08:00
2021-05-12 13:52:53 -04:00

240 lines
8.3 KiB
JavaScript

// ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution
// Copyright (C) 2017-Present Systemhaus Westfalia
// Contributor(s): Sofia Calderon sofia.ester.calderon@gmail.com www.wetfalia-it.com
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
import { createLocalVue, mount } from '@vue/test-utils'
import Vuex from 'vuex'
import ElementUI from 'element-ui'
import i18n from '../../../../../src/lang/index.js'
import Badge from '@/components/ADempiere/Badge/index.vue'
const tableComponent = 'el-table'
const badgeComponent = 'el-badge'
const emptyDataBlock = '.el-table__empty-block'
let notificationProcesses
beforeEach(() => {
notificationProcesses =
[
{ id: '1', name: 'value1', isReport: true, processId: '1', instanceUuid: 'bc0ab4d0-8aff-11eb-8dcd-0242ac130003', download: 'file1.pdf' },
{ id: '2', name: 'value2', isReport: false, processId: '2', instanceUuid: 'bc0ab70a-8aff-11eb-8dcd-0242ac130003', download: 'file2.pdf' }
]
})
const mountMainWrapper = (notificationProcesses, $router) => {
const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(ElementUI)
const getters = {
getNotificationProcess: () => (notificationProcesses)
}
const store = new Vuex.Store({ getters })
return mount(Badge, {
store,
localVue,
i18n,
stubs: ['svg-icon'],
mocks: {
$router
}
})
}
describe('given the badge is initially loaded', () => {
it('should display the correct header text', async() => {
const wrapper = mountMainWrapper([])
await wrapper.find({ name: tableComponent })
const header = wrapper.find('th')
expect(header.text()).toBe('Notifications')
})
})
describe('given there are no notification processes', () => {
it('should not display a badge with the amount of notification processes', async() => {
const wrapper = mountMainWrapper([])
const badgeWrapper = await wrapper.find({ name: badgeComponent })
const badgeElement = badgeWrapper.find('sup')
expect(badgeElement.isVisible()).toBeFalsy()
})
it('should display "No Data" in the table', async() => {
const wrapper = mountMainWrapper([])
await wrapper.find({ name: tableComponent })
const noDataBlock = wrapper.find(emptyDataBlock).find('span')
// 暂无数据 means 'No Data' in Chinese
expect(noDataBlock.text()).toBe('暂无数据')
})
})
describe('given there are notification processes in the store', () => {
it('should display a badge with the amount of notification processes', async() => {
const wrapper = mountMainWrapper(notificationProcesses)
const badgeWrapper = await wrapper.find({ name: badgeComponent })
const badgeElement = badgeWrapper.find('sup')
expect(badgeElement.isVisible()).toBeTruthy()
expect(badgeElement.text()).toBe('2')
})
it('should display the notification processes in the table', async() => {
const wrapper = mountMainWrapper(notificationProcesses)
await wrapper.find({ name: tableComponent })
const tableRows = wrapper.find('.el-table__body').findAll('tr')
expect(tableRows.at(0).find('div').text()).toBe('value1')
expect(tableRows.at(1).find('div').text()).toBe('value2')
})
describe('given the close button of a row is clicked', () => {
it('should delete the notification process of that row from the table', async() => {
const router = { push: jest.fn() }
const wrapper = mountMainWrapper(notificationProcesses, router)
await wrapper.find({ name: tableComponent })
const firstTableRow = wrapper.find('.el-table__body').find('tr')
const closeButton = firstTableRow.findAll('td').at(2).find('button')
closeButton.trigger('click')
await wrapper.find({ name: tableComponent })
const tableRows = wrapper.find('.el-table__body').findAll('tr')
expect(tableRows.length).toBe(1)
expect(tableRows.at(0).find('div').text()).toBe('value2')
})
it('should display the new number of notification processes in the badge', async() => {
const router = { push: jest.fn() }
const wrapper = mountMainWrapper(notificationProcesses, router)
await wrapper.find({ name: tableComponent })
const firstTableRow = wrapper.find('.el-table__body').find('tr')
const closeButton = firstTableRow.findAll('td').at(2).find('button')
closeButton.trigger('click')
// I THINK THIS IS A BUG! The number should be dynamic...
// const badgeWrapper = await wrapper.find({ name: badgeComponent })
// const badgeElement = badgeWrapper.find('sup')
// expect(badgeElement.text()).toBe('1')
})
})
describe('given that the "Delete All" button is clicked', () => {
it('should delete all notification processes from table and display "No Data"', async() => {
const wrapper = mountMainWrapper(notificationProcesses)
await wrapper.find({ name: tableComponent })
expect(wrapper.find(emptyDataBlock).exists()).toBeFalsy()
const deleteButton = wrapper.find('.el-table__header').find('button')
deleteButton.trigger('click')
await wrapper.find({ name: tableComponent })
const noDataBlock = wrapper.find(emptyDataBlock).find('span')
// 暂无数据 means 'No Data' in Chinese
expect(noDataBlock.text()).toBe('暂无数据')
})
it('the badge with the amount of notification processes should disappear', async() => {
const wrapper = mountMainWrapper(notificationProcesses)
await wrapper.find({ name: tableComponent })
const deleteButton = wrapper.find('.el-table__header').find('button')
deleteButton.trigger('click')
// I THINK THIS IS A BUG! The badge icon should disappear...
// const badgeWrapper = await wrapper.find({ name: badgeComponent })
// const badgeElement = badgeWrapper.find('sup')
// expect(badgeElement.isVisible()).toBeFalsy()
})
})
describe('given that the "Go to Process Logs" button is clicked', () => {
it('should route to the Process Logs', async() => {
const router = { push: jest.fn() }
const wrapper = mountMainWrapper(notificationProcesses, router)
const expectedRouterOptions = {
name: 'ProcessActivity'
}
await wrapper.find({ name: tableComponent })
const tableRow = wrapper.find('.el-table__body').find('tr')
const goToButton = tableRow.findAll('td').at(1)
goToButton.trigger('click')
expect(router.push).toHaveBeenCalledWith(expectedRouterOptions, expect.anything())
})
})
describe('given that the a row of the table is clicked', () => {
describe('and the process notification is a report', () => {
it('should route to the Report Viewer', async() => {
const router = { push: jest.fn() }
const wrapper = mountMainWrapper(notificationProcesses, router)
const expectedRouterOptions = {
name: 'Report Viewer',
params: {
processId: '1',
instanceUuid: 'bc0ab4d0-8aff-11eb-8dcd-0242ac130003',
fileName: 'file1.pdf'
}
}
await wrapper.find({ name: tableComponent })
const tableRow = wrapper.find('.el-table__body').find('tr')
const anyCell = tableRow.findAll('td').at(0)
anyCell.trigger('click')
expect(router.push).toHaveBeenCalledWith(expectedRouterOptions, expect.anything())
})
})
describe('and the process notification is not a report', () => {
it('should route to the Process Logs', async() => {
const router = { push: jest.fn() }
const wrapper = mountMainWrapper(notificationProcesses, router)
const expectedRouterOptions = {
name: 'ProcessActivity'
}
await wrapper.find({ name: tableComponent })
const tableRow = wrapper.find('.el-table__body').findAll('tr').at(1)
const anyCell = tableRow.findAll('td').at(0)
anyCell.trigger('click')
expect(router.push).toHaveBeenCalledWith(expectedRouterOptions, expect.anything())
})
})
})
})