Files
admin-web/src/modules/ocean-bookings/pages/OceanBookingsView.test.ts
T
2026-08-18 16:09:43 +08:00

51 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'
const source = readFileSync(resolve(process.cwd(), 'src/modules/ocean-bookings/pages/OceanBookingsView.vue'), 'utf8')
describe('OceanBookingsView', () => {
it('keeps the operation column first and left fixed', () => {
expect(source.indexOf("key: 'actions'")).toBeLessThan(source.indexOf("prop: 'bookingNo'"))
expect(source).toContain("fixed: 'left'")
})
it('renders loading, empty and error states and keeps draft creation available', () => {
expect(source).toContain('LoadErrorState')
expect(source).toContain(':loading="loading"')
expect(source).toContain('新增订舱')
expect(source).toContain("router.push('/ocean-bookings/new')")
})
it('edits DRAFT rows and views RELEASED rows', () => {
expect(source).toContain('<Pencil v-if="row.status === \'DRAFT\'"')
expect(source).toContain("row.status === 'DRAFT' ? '编辑' : '查看'")
expect(source).not.toContain('MoreHorizontal')
})
it('uses only the frozen DRAFT and RELEASED status options', () => {
expect(source).toContain('options: oceanBookingStatusOptions')
expect(source).toContain(':status="oceanBookingStatusLabel(row.status)"')
expect(source).not.toContain('CONFIRMED')
expect(source).not.toContain('CHANGE_PENDING')
expect(source).not.toContain('CANCELLED')
})
it('keeps the prototype business field order after actions', () => {
const fields = ['bookingNo', 'customerName', 'billOfLadingNo', 'shipperName', 'consigneeName', 'containerCount', 'carrierName', 'bookingAgent', 'vesselName', 'pol', 'pod', 'etd', 'eta', 'status', 'updatedAt']
let previous = source.indexOf("key: 'actions'")
for (const field of fields) {
const current = source.indexOf(`prop: '${field}'`, previous + 1)
expect(current, field).toBeGreaterThan(previous)
previous = current
}
})
it('loads active customers by name and stays usable on narrow screens', () => {
expect(source).toContain("listPlatformTenants({ page: 1, size: 200, status: 'ACTIVE' })")
expect(source).toContain('label: customer.tenantName')
expect(source).not.toContain('customer.tenantCode')
expect(source).toContain('@media(max-width:420px)')
})
})