fix: Fix multiple bugs with new authentication flow
This commit is contained in:
@@ -6,7 +6,54 @@ import {
|
||||
} from 'vitest';
|
||||
|
||||
import { UsersActions } from '../../../../store/users/users.actions';
|
||||
import { waitForAuthenticationOutcome } from './auth-navigation.rules';
|
||||
import {
|
||||
buildLoginReturnQueryParams,
|
||||
resolveSafeReturnUrl,
|
||||
waitForAuthenticationOutcome
|
||||
} from './auth-navigation.rules';
|
||||
|
||||
describe('resolveSafeReturnUrl', () => {
|
||||
it('returns the requested in-app path unchanged', () => {
|
||||
expect(resolveSafeReturnUrl('/servers')).toBe('/servers');
|
||||
expect(resolveSafeReturnUrl('/room/abc')).toBe('/room/abc');
|
||||
});
|
||||
|
||||
it('unwraps nested login returnUrl chains to the original destination', () => {
|
||||
const nested = '/login?returnUrl=%2Flogin%3FreturnUrl%3D%252Fservers';
|
||||
|
||||
expect(resolveSafeReturnUrl(nested)).toBe('/servers');
|
||||
expect(resolveSafeReturnUrl(`/login?returnUrl=${encodeURIComponent(nested)}`)).toBe('/servers');
|
||||
});
|
||||
|
||||
it('falls back to dashboard for auth-only return targets', () => {
|
||||
expect(resolveSafeReturnUrl('/login')).toBe('/dashboard');
|
||||
expect(resolveSafeReturnUrl('/register')).toBe('/dashboard');
|
||||
expect(resolveSafeReturnUrl(null)).toBe('/dashboard');
|
||||
});
|
||||
|
||||
it('rejects open redirects and protocol-relative paths', () => {
|
||||
expect(resolveSafeReturnUrl('//evil.example/phish')).toBe('/dashboard');
|
||||
expect(resolveSafeReturnUrl('https://evil.example/phish')).toBe('/dashboard');
|
||||
});
|
||||
});
|
||||
|
||||
describe('buildLoginReturnQueryParams', () => {
|
||||
it('preserves a safe destination when redirecting from protected routes', () => {
|
||||
expect(buildLoginReturnQueryParams('/servers')).toEqual({ returnUrl: '/servers' });
|
||||
});
|
||||
|
||||
it('does not nest login returnUrl values', () => {
|
||||
expect(buildLoginReturnQueryParams('/login?returnUrl=%2Fservers')).toEqual({ returnUrl: '/servers' });
|
||||
expect(buildLoginReturnQueryParams('/login?returnUrl=%2Flogin%3FreturnUrl%3D%252Fservers')).toEqual({
|
||||
returnUrl: '/servers'
|
||||
});
|
||||
});
|
||||
|
||||
it('omits returnUrl when there is no meaningful destination', () => {
|
||||
expect(buildLoginReturnQueryParams('/login')).toEqual({});
|
||||
expect(buildLoginReturnQueryParams('/register')).toEqual({});
|
||||
});
|
||||
});
|
||||
|
||||
describe('waitForAuthenticationOutcome', () => {
|
||||
it('resolves when authentication storage preparation succeeds', async () => {
|
||||
|
||||
Reference in New Issue
Block a user