修复bug
This commit is contained in:
@@ -2,13 +2,14 @@ import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
import { formatQualificationFileSize, QUALIFICATION_MAX_FILE_SIZE, validateQualificationFile } from './qualificationFile.ts'
|
||||
|
||||
test('accepts the backend-confirmed JPG and PNG formats up to 5MB', () => {
|
||||
test('accepts the backend-confirmed PDF, JPG and PNG formats up to 5MB', () => {
|
||||
assert.equal(validateQualificationFile({ name: '营业执照.jpeg', size: QUALIFICATION_MAX_FILE_SIZE, type: 'image/jpeg' }), '')
|
||||
assert.equal(validateQualificationFile({ name: '营业执照.PNG', size: 2048, type: 'image/png' }), '')
|
||||
assert.equal(validateQualificationFile({ name: '货代资质.pdf', size: 2048, type: 'application/pdf' }), '')
|
||||
})
|
||||
|
||||
test('rejects PDF, empty, mismatched, and oversized files', () => {
|
||||
assert.match(validateQualificationFile({ name: '营业执照.pdf', size: 1024, type: 'application/pdf' }), /格式不支持/)
|
||||
test('rejects unsupported, empty, mismatched, and oversized files', () => {
|
||||
assert.match(validateQualificationFile({ name: '营业执照.svg', size: 1024, type: 'image/svg+xml' }), /格式不支持/)
|
||||
assert.match(validateQualificationFile({ name: '伪装图片.png', size: 1024, type: 'text/plain' }), /内容类型/)
|
||||
assert.match(validateQualificationFile({ name: '空文件.png', size: 0, type: 'image/png' }), /内容为空/)
|
||||
assert.match(validateQualificationFile({ name: '超大文件.jpg', size: QUALIFICATION_MAX_FILE_SIZE + 1, type: 'image/jpeg' }), /超过 5MB/)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export const QUALIFICATION_MAX_FILE_SIZE = 5 * 1024 * 1024
|
||||
|
||||
const allowedExtensions = new Set(['jpg', 'jpeg', 'png'])
|
||||
const allowedMimeTypes = new Set(['image/jpeg', 'image/png'])
|
||||
const allowedExtensions = new Set(['jpg', 'jpeg', 'png', 'pdf'])
|
||||
const allowedMimeTypes = new Set(['image/jpeg', 'image/png', 'application/pdf'])
|
||||
|
||||
export interface QualificationFileLike {
|
||||
name: string
|
||||
@@ -11,7 +11,7 @@ export interface QualificationFileLike {
|
||||
|
||||
export function validateQualificationFile(file: QualificationFileLike) {
|
||||
const extension = file.name.includes('.') ? file.name.split('.').pop()?.toLowerCase() ?? '' : ''
|
||||
if (!allowedExtensions.has(extension)) return '文件格式不支持,请选择 JPG 或 PNG 图片'
|
||||
if (!allowedExtensions.has(extension)) return '文件格式不支持,请选择 PDF、JPG 或 PNG 文件'
|
||||
if (file.type && !allowedMimeTypes.has(file.type)) return '文件内容类型与支持的资质格式不一致'
|
||||
if (file.size <= 0) return '文件内容为空,请重新选择'
|
||||
if (file.size > QUALIFICATION_MAX_FILE_SIZE) return '文件超过 5MB,请压缩后重新选择'
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
import { normalizeQualificationStatus, qualificationStatusMeta } from './qualificationStatus.ts'
|
||||
|
||||
test('maps backend qualification states without treating replaced files as expired', () => {
|
||||
assert.equal(normalizeQualificationStatus('APPROVED'), 'VERIFIED')
|
||||
assert.equal(normalizeQualificationStatus('SUPERSEDED'), 'SUPERSEDED')
|
||||
assert.deepEqual(qualificationStatusMeta('SUPERSEDED'), { label: '已替换', type: 'info' })
|
||||
})
|
||||
|
||||
test('keeps a safe expired fallback for unknown legacy states', () => {
|
||||
assert.equal(normalizeQualificationStatus('UNKNOWN'), 'EXPIRED')
|
||||
assert.deepEqual(qualificationStatusMeta('EXPIRED'), { label: '已过期', type: 'info' })
|
||||
})
|
||||
@@ -0,0 +1,15 @@
|
||||
export type TenantQualificationStatus = 'VERIFIED' | 'PENDING' | 'REJECTED' | 'SUPERSEDED' | 'EXPIRED'
|
||||
|
||||
export function normalizeQualificationStatus(status: string): TenantQualificationStatus {
|
||||
if (status === 'APPROVED') return 'VERIFIED'
|
||||
if (status === 'PENDING' || status === 'REJECTED' || status === 'SUPERSEDED') return status
|
||||
return 'EXPIRED'
|
||||
}
|
||||
|
||||
export function qualificationStatusMeta(status: TenantQualificationStatus) {
|
||||
if (status === 'VERIFIED') return { label: '已验证', type: 'success' as const }
|
||||
if (status === 'PENDING') return { label: '待审核', type: 'warning' as const }
|
||||
if (status === 'REJECTED') return { label: '已驳回', type: 'danger' as const }
|
||||
if (status === 'SUPERSEDED') return { label: '已替换', type: 'info' as const }
|
||||
return { label: '已过期', type: 'info' as const }
|
||||
}
|
||||
Reference in New Issue
Block a user