优化手工开票表单校验提示
This commit is contained in:
@@ -270,6 +270,62 @@ describe('ReservationManualInvoiceView', () => {
|
||||
expect(wrapper.text()).not.toContain('例如 includingBF')
|
||||
})
|
||||
|
||||
it('marks required fields and highlights empty inputs after submit', async () => {
|
||||
const wrapper = mountView()
|
||||
|
||||
expect(wrapper.find('label[for="invoice-company"].field-label--required').exists()).toBe(true)
|
||||
expect(wrapper.find('[data-testid="recipient-company-input"]').classes()).not.toContain('is-invalid')
|
||||
|
||||
await wrapper.find('[data-testid="manual-invoice-submit"]').trigger('click')
|
||||
await flushPromises()
|
||||
|
||||
expect(service.generateManualReservationInvoice).not.toHaveBeenCalled()
|
||||
expect(wrapper.find('[data-testid="recipient-company-input"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="recipient-company-input"]').attributes('aria-invalid')).toBe('true')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-company"]').text()).toBe(
|
||||
zhCN.manualInvoice.fieldErrors.required,
|
||||
)
|
||||
expect(wrapper.find('[data-testid="booking-group-name"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="primary-room-count"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="charge-description-0"]').classes()).toContain('is-invalid')
|
||||
|
||||
await wrapper.find('[data-testid="recipient-company-input"]').setValue('Manual Company')
|
||||
|
||||
expect(wrapper.find('[data-testid="recipient-company-input"]').classes()).not.toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-company"]').exists()).toBe(false)
|
||||
})
|
||||
|
||||
it('shows field-level validation messages for invalid email, dates, and numbers', async () => {
|
||||
const wrapper = mountView()
|
||||
|
||||
await wrapper.find('[data-testid="recipient-company-code"]').setValue('QBD')
|
||||
await fillMinimumInvoiceForm(wrapper)
|
||||
await wrapper.find('[data-testid="recipient-email"]').setValue('bad-email')
|
||||
await wrapper.find('[data-testid="booking-departure-date"]').setValue('2026-07-19')
|
||||
await wrapper.find('[data-testid="booking-extra-bed-rate"]').setValue('-1')
|
||||
await wrapper.find('[data-testid="charge-rate-0"]').setValue('0')
|
||||
await wrapper.find('[data-testid="manual-invoice-submit"]').trigger('click')
|
||||
await flushPromises()
|
||||
|
||||
expect(service.generateManualReservationInvoice).not.toHaveBeenCalled()
|
||||
expect(wrapper.find('[data-testid="recipient-email"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-email"]').text()).toBe(
|
||||
zhCN.manualInvoice.fieldErrors.invalidEmail,
|
||||
)
|
||||
expect(wrapper.find('[data-testid="booking-departure-date"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-departure-date"]').text()).toBe(
|
||||
zhCN.manualInvoice.fieldErrors.dateOrder,
|
||||
)
|
||||
expect(wrapper.find('[data-testid="booking-extra-bed-rate"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-extra-bed-rate"]').text()).toBe(
|
||||
zhCN.manualInvoice.fieldErrors.nonNegativeNumber,
|
||||
)
|
||||
expect(wrapper.find('[data-testid="charge-rate-0"]').classes()).toContain('is-invalid')
|
||||
expect(wrapper.find('[data-testid="manual-invoice-field-error-charge-0-rate"]').text()).toBe(
|
||||
zhCN.manualInvoice.fieldErrors.positiveNumber,
|
||||
)
|
||||
})
|
||||
|
||||
it('shows final-format date previews like the invoice prototype', async () => {
|
||||
const wrapper = mountView()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user