import { createLocalVue, shallowMount } from '@vue/test-utils' import ElementUI from 'element-ui' import BudgetReviewIndex from '@/views/budget/review/index.vue' import BudgetReviewDetail from '@/views/budget/review/components/BudgetReviewDetail.vue' import { getBudgetReviewDetail } from '@/api/budget/budgetReview' const localVue = createLocalVue() localVue.use(ElementUI) jest.mock('@/api/budget/budgetCollectionYear.js', () => ({ getBudgetCollectionYearOptions: jest.fn(() => Promise.resolve([])) })) jest.mock('@/api/budget/budgetReview.js', () => ({ getBudgetReviews: jest.fn(() => Promise.resolve({ items: [], page: 1, total: 0 })), getBudgetReviewDetail: jest.fn(), reviewBudgetSubmission: jest.fn(), batchReviewBudgetSubmissions: jest.fn(), getBudgetReviewStatistics: jest.fn() })) describe('leader budget review', () => { const message = { error: jest.fn(), success: jest.fn(), warning: jest.fn() } beforeEach(() => jest.clearAllMocks()) it('loads the dedicated detail endpoint with the submission id', async() => { const detail = { submission: { id: 8, status: 'submitted', economic_items: [], performance_indicators: [] }, departmentSummary: [] } getBudgetReviewDetail.mockResolvedValue(detail) const wrapper = shallowMount(BudgetReviewIndex, { localVue, mocks: { $message: message } }) await wrapper.vm.viewDetail({ id: 8, package_id: 12 }) expect(getBudgetReviewDetail).toHaveBeenCalledWith(8) expect(wrapper.vm.currentReviewData).toEqual(detail) expect(wrapper.vm.detailDialogVisible).toBe(true) }) it('keeps lead and department submission details in one view model', () => { const submissionData = { submission: { id: 8, status: 'submitted', economic_items: [{ amount: '0.0001' }], performance_indicators: [{ level3: '预算执行率' }] }, departmentSummary: [{ id: 31, departmentName: '执行科室', allocatedAmount: '0.0001', status: 'approved', submission: { economic_items: [{ amount: '0.0001' }], performance_indicators: [{ level3: '预算执行率' }] } }] } const wrapper = shallowMount(BudgetReviewDetail, { localVue, propsData: { submissionData }}) expect(wrapper.vm.economicItems).toEqual(submissionData.submission.economic_items) expect(wrapper.vm.performanceIndicators).toEqual(submissionData.submission.performance_indicators) expect(wrapper.props('submissionData').departmentSummary[0].submission.economic_items).toHaveLength(1) expect(wrapper.vm.formatCurrency('0.0001')).toBe('0.0001') }) })