Files
crawler-plugin/admin-frontend-vue/tests/align-product-category.test.ts
T

88 lines
3.7 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import {
appendCategoryChildren,
isCategoryLoadMoreNode,
makeCategoryLoadMoreNode,
productCategoryNodeMeta,
productCategorySourceLabel,
type ProductCategoryNode,
} from '../src/pages/asin/product-category-model.ts'
/** 对齐 admin.js:5998-6012/6077-6120:树节点带来源/排序/备注、按需懒加载 + 加载更多(已加载 x/y)。 */
function node(id: number, overrides: Partial<ProductCategoryNode> = {}): ProductCategoryNode {
return {
id,
parentId: null,
name: `类目${id}`,
categoryKey: `k${id}`,
sortOrder: id,
description: '',
isBuiltin: false,
childCount: 0,
level: 0,
path: `类目${id}`,
children: [],
...overrides,
}
}
test('align_category_source_label', () => {
assert.equal(productCategorySourceLabel({ isBuiltin: true } as ProductCategoryNode), '内置')
assert.equal(productCategorySourceLabel({ isBuiltin: false } as ProductCategoryNode), '自定义')
assert.equal(productCategorySourceLabel(null), '自定义')
})
test('align_category_node_meta_contains_source_and_sort', () => {
assert.equal(productCategoryNodeMeta({ isBuiltin: true, sortOrder: 3 } as ProductCategoryNode), '内置 · 排序 3')
assert.equal(productCategoryNodeMeta({ isBuiltin: false, sortOrder: null } as ProductCategoryNode), '自定义 · 排序 0')
})
test('align_category_load_more_node_factory', () => {
const more = makeCategoryLoadMoreNode(5, 20, 45)
assert.equal(isCategoryLoadMoreNode(more), true)
assert.equal(more.parentId, 5)
assert.equal(more.loadedCount, 20)
assert.equal(more.totalCount, 45)
assert.equal(isCategoryLoadMoreNode(node(1)), false)
})
test('align_category_append_children_keeps_more_until_done', () => {
const current = [node(1), makeCategoryLoadMoreNode(null, 20, 45)]
const next = appendCategoryChildren(current, [node(2), node(3)], null, 40, 45, true)
assert.deepEqual(next.filter((n) => !isCategoryLoadMoreNode(n)).map((n) => n.id), [1, 2, 3])
const tail = next[next.length - 1]
assert.equal(isCategoryLoadMoreNode(tail), true)
assert.equal((tail as ReturnType<typeof makeCategoryLoadMoreNode>).loadedCount, 40)
})
test('align_category_append_children_drops_more_when_complete', () => {
const current = [node(1), makeCategoryLoadMoreNode(9, 20, 22)]
const next = appendCategoryChildren(current, [node(2), node(3)], 9, 22, 22, false)
assert.deepEqual(next.map((n) => n.id), [1, 2, 3])
assert.equal(next.some((n) => isCategoryLoadMoreNode(n)), false)
})
test('align_category_children_api_wiring', () => {
const api = readSource('src/pages/asin/product-category-api.ts')
assert.match(api, /children/, '懒加载走 children 端点')
assert.match(api, /parent_id|parentId/, '带父级参数')
assert.match(api, /page_size|pageSize/, '分页参数')
})
test('align_category_page_tree_and_search_wiring', () => {
const page = readSource('src/pages/asin/ProductCategoryPage.vue')
assert.doesNotMatch(page, /default-expand-all/, '树不再全量展开,改按需懒加载')
assert.match(page, /加载更多/, '节点带加载更多')
assert.match(page, /已加载/, '显示已加载 x/y')
assert.match(page, /productCategorySourceLabel/, '节点展示来源')
assert.match(page, /排序/, '节点展示排序')
assert.doesNotMatch(page, /新增根类目/, '按钮名对齐参考“新增类目”')
assert.match(page, /新增类目/, '顶部新增类目按钮')
assert.match(page, /搜索类目名称、编码或备注/, '搜索占位对齐参考')
assert.match(page, /来源/, '搜索表格补来源列')
assert.match(page, /childCount/, '删除按钮按有子禁用')
})