Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions src/router/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,25 @@ const router = new Router({
// internal pages
{
path: '/f/',
redirect: { name: 'requestFiles' },
beforeEnter: (to, from, next) => {
const canRequestSign = loadState('libresign', 'can_request_sign', false)
if (canRequestSign) {
next({ name: 'requestFiles' })
} else {
next({ name: 'fileslist' })
}
},
},
{
path: '/',
redirect: { name: 'requestFiles' },
beforeEnter: (to, from, next) => {
const canRequestSign = loadState('libresign', 'can_request_sign', false)
if (canRequestSign) {
next({ name: 'requestFiles' })
} else {
next({ name: 'fileslist' })
}
},
},
{
path: '/f/incomplete',
Expand Down
39 changes: 39 additions & 0 deletions src/tests/router/router.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,4 +266,43 @@ describe('router business rules', () => {
expect(router.options.linkActiveClass).toBe('active')
})
})

describe('root routes redirection based on can_request_sign', () => {
const rootPaths = [
{ path: '/', description: 'root path /' },
{ path: '/f/', description: 'root path /f/' },
]

describe.each(rootPaths)('$description', ({ path }) => {
let route
let beforeEnterGuard

beforeEach(() => {
route = router.options.routes.find(r => r.path === path)
beforeEnterGuard = route.beforeEnter
})

it.each([
{ canRequestSign: true, expectedRoute: 'requestFiles', description: 'when user can request sign' },
{ canRequestSign: false, expectedRoute: 'fileslist', description: 'when user cannot request sign' },
{ canRequestSign: undefined, expectedRoute: 'fileslist', description: 'by default when can_request_sign is undefined' },
])('redirects to $expectedRoute $description', ({ canRequestSign, expectedRoute }) => {
loadState.mockImplementation((key, state, defaultValue) => {
if (state === 'can_request_sign') {
return canRequestSign !== undefined ? canRequestSign : defaultValue
}
return defaultValue
})

const to = {}
const from = {}
const next = vi.fn()

beforeEnterGuard(to, from, next)

expect(next).toHaveBeenCalledWith({ name: expectedRoute })
expect(next).toHaveBeenCalledTimes(1)
})
})
})
})
Loading