task-2: buildJavaUrl() 统一 URL 构造(query 编码、尾斜杠规范化)

This commit is contained in:
2026-08-31 19:16:19 +08:00
parent d1870f1382
commit f63ab837f5
2 changed files with 76 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { buildJavaUrl } from '../src/shared/api/url.ts'
test('test_build_url_prefixed', () => {
assert.equal(buildJavaUrl('/api/dedupe/run'), '/newApi/api/dedupe/run')
assert.equal(buildJavaUrl('/api/similar-asin/parse'), '/newApi/api/similar-asin/parse')
})
test('test_build_url_with_query', () => {
const url = buildJavaUrl('/api/dedupe/history', { resultId: 42 })
assert.equal(url, '/newApi/api/dedupe/history?resultId=42')
})
test('test_build_url_no_query', () => {
const url = buildJavaUrl('/api/publish/dashboard')
assert.ok(!url.includes('?'), '无 query 时不应追加 ?')
assert.equal(url, '/newApi/api/publish/dashboard')
})
test('test_build_url_query_encoding', () => {
const url = buildJavaUrl('/api/query-asin/tasks', {
shopName: 'a b&c',
keyword: '中文',
})
const encoded = encodeURIComponent('a b&c')
assert.equal(url, `/newApi/api/query-asin/tasks?shopName=${encoded}&keyword=${encodeURIComponent('中文')}`)
})
test('test_build_url_empty_query_object', () => {
const url = buildJavaUrl('/api/withdraw/candidates', {})
assert.ok(!url.includes('?'), '空对象不应追加 ?')
assert.equal(url, '/newApi/api/withdraw/candidates')
})
test('test_build_url_trailing_slash_endpoint', () => {
const url = buildJavaUrl('/api/split/run/')
assert.equal(url, '/newApi/api/split/run', 'endpoint 尾斜杠应被规范化')
})
test('test_build_url_undefined_query', () => {
const url = buildJavaUrl('/api/files/upload', undefined)
assert.ok(!url.includes('?'), 'undefined query 不应追加 ?')
assert.equal(url, '/newApi/api/files/upload')
})
test('test_build_url_join_no_duplicate_slash', () => {
assert.equal(buildJavaUrl('/api/dedupe/run'), '/newApi/api/dedupe/run')
assert.ok(!buildJavaUrl('/api/dedupe/run').includes('/newApi//api'))
assert.ok(!buildJavaUrl('/api/dedupe/run').includes('//api/'))
})