feat(phase3): complete loading workbenches
This commit is contained in:
@@ -102,20 +102,20 @@ const occupiedLocation: PlatformLocationResource = {
|
||||
version: 5,
|
||||
}
|
||||
|
||||
async function mountView() {
|
||||
async function mountView(permissions = [
|
||||
'platform:location:list',
|
||||
'platform:location:create',
|
||||
'platform:location:edit',
|
||||
'platform:location:status',
|
||||
'platform:location:delete',
|
||||
]) {
|
||||
vi.stubGlobal('localStorage', createMemoryStorage())
|
||||
vi.stubGlobal('sessionStorage', createMemoryStorage())
|
||||
const pinia = createPinia()
|
||||
setActivePinia(pinia)
|
||||
const auth = useAuthStore()
|
||||
auth.token = 'token'
|
||||
auth.permissions = [
|
||||
'platform:location:list',
|
||||
'platform:location:create',
|
||||
'platform:location:edit',
|
||||
'platform:location:status',
|
||||
'platform:location:delete',
|
||||
]
|
||||
auth.permissions = permissions
|
||||
useAccessPreviewStore().initializeAfterLogin()
|
||||
const wrapper = mount(LocationsView, {
|
||||
attachTo: document.body,
|
||||
@@ -254,6 +254,51 @@ describe('LocationsView', () => {
|
||||
expect(bodyRows[1]?.text()).not.toContain('更多')
|
||||
})
|
||||
|
||||
it('shows all available actions directly when a row has no more than three', async () => {
|
||||
const wrapper = await mountView(['platform:location:list', 'platform:location:status'])
|
||||
const row = wrapper.find('tbody tr')
|
||||
|
||||
expect(row.text()).toContain('详情')
|
||||
expect(row.text()).toContain('停用')
|
||||
expect(row.text()).not.toContain('更多')
|
||||
})
|
||||
|
||||
it('keeps the first three actions visible and moves only the fourth action into more', async () => {
|
||||
vi.mocked(listPlatformLocations).mockResolvedValue({
|
||||
records: [{ ...availableLocation, status: 'DISABLED' }], page: 1, size: 20, total: 1, pages: 1,
|
||||
})
|
||||
const wrapper = await mountView()
|
||||
const row = wrapper.find('tbody tr')
|
||||
|
||||
expect(row.text()).toContain('详情')
|
||||
expect(row.text()).toContain('编辑')
|
||||
expect(row.text()).toContain('启用')
|
||||
expect(row.text()).not.toContain('删除')
|
||||
expect(row.find('button[aria-label="A1-01的更多操作"]').exists()).toBe(true)
|
||||
})
|
||||
|
||||
it('uses unique fallback labels for more actions across rows', async () => {
|
||||
vi.mocked(listPlatformLocations).mockResolvedValue({
|
||||
records: [
|
||||
{ ...availableLocation, id: 'location-1', locationCode: '', locationName: '东侧库位', status: 'DISABLED' },
|
||||
{ ...availableLocation, id: 'location-2', locationCode: '', locationName: '', status: 'DISABLED' },
|
||||
{ ...availableLocation, id: undefined, locationCode: '', locationName: '', status: 'DISABLED' } as unknown as PlatformLocationResource,
|
||||
],
|
||||
page: 1,
|
||||
size: 20,
|
||||
total: 3,
|
||||
pages: 1,
|
||||
})
|
||||
const wrapper = await mountView()
|
||||
const moreButtons = wrapper.findAll('button[aria-label$="的更多操作"]')
|
||||
const labels = moreButtons.map((button) => button.attributes('aria-label'))
|
||||
|
||||
expect(labels).toEqual(['东侧库位的更多操作', 'location-2的更多操作', '当前库位的更多操作'])
|
||||
expect(moreButtons.map((button) => button.attributes('title'))).toEqual(labels)
|
||||
expect(new Set(labels).size).toBe(labels.length)
|
||||
expect(labels.every((label) => Boolean(label) && !/undefined|null/.test(label ?? ''))).toBe(true)
|
||||
})
|
||||
|
||||
it('does not offer editing for a location outside a domestic warehouse', async () => {
|
||||
vi.mocked(listPlatformLocations).mockResolvedValue({
|
||||
records: [{ ...availableLocation, warehouseId: fbaWarehouse.id }, availableLocation], page: 1, size: 20, total: 2, pages: 1,
|
||||
|
||||
Reference in New Issue
Block a user