Files
crawler-plugin/frontend-vue/tests/url.test.ts
T

52 lines
1.9 KiB
TypeScript

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/'))
})