master: 添加会话模块及界面改进
- 新增 ChatView 页面及其逻辑设计 - 修改 App.vue 以支持动态会话标题 - 调整 Sidebar 为固定高度及改进滚动样式 - 优化会话分页,添加 lastPage 逻辑 - 在 SessionSidebar 中实现刷新操作和路由同步 - 更新路由配置,添加 chat 相关路径 - 添加单元测试以覆盖新逻辑
This commit is contained in:
@@ -20,6 +20,7 @@ const makeRouter = () =>
|
||||
routes: [
|
||||
{ path: '/', name: 'login', component: LoginView },
|
||||
{ path: '/welcome', name: 'welcome', component: LoginView },
|
||||
{ path: '/chat/:id', name: 'chat', component: LoginView },
|
||||
],
|
||||
})
|
||||
|
||||
@@ -61,6 +62,7 @@ describe('SessionSidebar', () => {
|
||||
total: 1,
|
||||
current_page: 1,
|
||||
per_page: 20,
|
||||
last_page: 1,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -81,6 +83,55 @@ describe('SessionSidebar', () => {
|
||||
)
|
||||
expect(wrapper.text()).toContain('Demo')
|
||||
await wrapper.find('.session-item').trigger('click')
|
||||
await flushPromises()
|
||||
expect(localStorage.getItem('ars-current-session')).toBe('s1')
|
||||
expect(router.currentRoute.value.name).toBe('chat')
|
||||
})
|
||||
|
||||
it('resets page when refreshing after loading more', async () => {
|
||||
localStorage.setItem('ars-token', 'jwt-token')
|
||||
mockedAxios.get
|
||||
.mockResolvedValueOnce({
|
||||
data: {
|
||||
data: [{ session_id: 's1', session_name: 'P1', status: 'OPEN' }],
|
||||
meta: { total: 2, current_page: 1, per_page: 10, last_page: 2 },
|
||||
},
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
data: {
|
||||
data: [{ session_id: 's2', session_name: 'P2', status: 'OPEN' }],
|
||||
meta: { total: 2, current_page: 2, per_page: 10, last_page: 2 },
|
||||
},
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
data: {
|
||||
data: [{ session_id: 's1', session_name: 'Refreshed', status: 'OPEN' }],
|
||||
meta: { total: 1, current_page: 1, per_page: 10, last_page: 1 },
|
||||
},
|
||||
})
|
||||
|
||||
const router = makeRouter()
|
||||
router.push('/welcome')
|
||||
await router.isReady()
|
||||
|
||||
const wrapper = mount(SessionSidebar, {
|
||||
global: {
|
||||
plugins: [router, ElementPlus],
|
||||
},
|
||||
})
|
||||
|
||||
await flushPromises()
|
||||
expect(wrapper.findAll('.session-item')).toHaveLength(1)
|
||||
|
||||
await wrapper.find('.load-more').trigger('click')
|
||||
await flushPromises()
|
||||
expect(mockedAxios.get.mock.calls[1][1].params.page).toBe(2)
|
||||
expect(wrapper.findAll('.session-item')).toHaveLength(2)
|
||||
|
||||
await wrapper.find('[data-testid="refresh-btn"]').trigger('click')
|
||||
await flushPromises()
|
||||
expect(mockedAxios.get.mock.calls[2][1].params.page).toBe(1)
|
||||
expect(wrapper.findAll('.session-item')).toHaveLength(1)
|
||||
expect(wrapper.text()).toContain('Refreshed')
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user