mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-14 21:43:04 +00:00

# Conflicts: # src/app/shared/log-in/log-in.component.html # src/app/shared/log-in/methods/log-in-external-provider/log-in-external-provider.component.spec.ts # src/app/shared/log-in/methods/oidc/log-in-oidc.component.html # src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts # src/app/shared/log-in/methods/orcid/log-in-orcid.component.html # src/app/shared/log-in/methods/password/log-in-password.component.ts # src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html # src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts
683 lines
18 KiB
TypeScript
683 lines
18 KiB
TypeScript
import { authReducer, AuthState } from './auth.reducer';
|
|
import {
|
|
AddAuthenticationMessageAction,
|
|
AuthenticateAction,
|
|
AuthenticatedAction,
|
|
AuthenticatedErrorAction,
|
|
AuthenticatedSuccessAction,
|
|
AuthenticationErrorAction,
|
|
AuthenticationSuccessAction,
|
|
CheckAuthenticationTokenAction,
|
|
SetAuthCookieStatus,
|
|
CheckAuthenticationTokenCookieAction,
|
|
LogOutAction,
|
|
LogOutErrorAction,
|
|
LogOutSuccessAction,
|
|
RedirectWhenAuthenticationIsRequiredAction,
|
|
RedirectWhenTokenExpiredAction,
|
|
RefreshTokenAction,
|
|
RefreshTokenErrorAction,
|
|
RefreshTokenSuccessAction,
|
|
ResetAuthenticationMessagesAction,
|
|
RetrieveAuthenticatedEpersonErrorAction,
|
|
RetrieveAuthenticatedEpersonSuccessAction,
|
|
RetrieveAuthMethodsAction,
|
|
RetrieveAuthMethodsErrorAction,
|
|
RetrieveAuthMethodsSuccessAction,
|
|
SetRedirectUrlAction,
|
|
SetUserAsIdleAction,
|
|
UnsetUserAsIdleAction
|
|
} from './auth.actions';
|
|
import { AuthTokenInfo } from './models/auth-token-info.model';
|
|
import { EPersonMock } from '../../shared/testing/eperson.mock';
|
|
import { AuthStatus } from './models/auth-status.model';
|
|
import { AuthMethod } from './models/auth.method';
|
|
import { AuthMethodType } from './models/auth.method-type';
|
|
|
|
describe('authReducer', () => {
|
|
|
|
let initialState: AuthState;
|
|
let state: AuthState;
|
|
const mockTokenInfo = new AuthTokenInfo('test_token');
|
|
const mockError = new Error('Test error message');
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATE action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: true,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticateAction('user', 'password');
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: true,
|
|
error: undefined,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATE_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticationSuccessAction(mockTokenInfo);
|
|
const newState = authReducer(initialState, action);
|
|
|
|
expect(newState).toEqual(initialState);
|
|
});
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATE_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticationErrorAction(mockError);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
authToken: undefined,
|
|
error: 'Test error message',
|
|
idle: false
|
|
};
|
|
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATED action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
blocking: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticatedAction(mockTokenInfo);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
blocking: true,
|
|
loaded: false,
|
|
error: undefined,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATED_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticatedSuccessAction(true, mockTokenInfo, EPersonMock._links.self.href);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a AUTHENTICATED_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new AuthenticatedErrorAction(mockError);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
authToken: undefined,
|
|
error: 'Test error message',
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a CHECK_AUTHENTICATION_TOKEN action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
const action = new CheckAuthenticationTokenAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a CHECK_AUTHENTICATION_TOKEN_COOKIE action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
idle: false
|
|
};
|
|
const action = new CheckAuthenticationTokenCookieAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should set the authentication cookie status in response to a SET_AUTH_COOKIE_STATUS action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
externalAuth: false,
|
|
idle: false
|
|
};
|
|
const action = new SetAuthCookieStatus(true);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
externalAuth: true,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a LOG_OUT action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
|
|
const action = new LogOutAction();
|
|
const newState = authReducer(initialState, action);
|
|
|
|
expect(newState).toEqual(initialState);
|
|
});
|
|
|
|
it('should properly set the state, in response to a LOG_OUT_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
|
|
const action = new LogOutSuccessAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
authToken: undefined,
|
|
error: undefined,
|
|
loaded: false,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
refreshing: false,
|
|
userId: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a LOG_OUT_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
|
|
const action = new LogOutErrorAction(mockError);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: 'Test error message',
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RETRIEVE_AUTHENTICATED_EPERSON_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new RetrieveAuthenticatedEpersonSuccessAction(EPersonMock.id);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RETRIEVE_AUTHENTICATED_EPERSON_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
error: undefined,
|
|
blocking: true,
|
|
loading: true,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
const action = new RetrieveAuthenticatedEpersonErrorAction(mockError);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
authToken: undefined,
|
|
error: 'Test error message',
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a REFRESH_TOKEN action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
const newTokenInfo = new AuthTokenInfo('Refreshed token');
|
|
const action = new RefreshTokenAction(newTokenInfo);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
refreshing: true,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a REFRESH_TOKEN_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
refreshing: true,
|
|
idle: false
|
|
};
|
|
const newTokenInfo = new AuthTokenInfo('Refreshed token');
|
|
const action = new RefreshTokenSuccessAction(newTokenInfo);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
authToken: newTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
refreshing: false,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a REFRESH_TOKEN_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
refreshing: true,
|
|
idle: false
|
|
};
|
|
const action = new RefreshTokenErrorAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
authToken: undefined,
|
|
error: undefined,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
refreshing: false,
|
|
userId: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
beforeEach(() => {
|
|
initialState = {
|
|
authenticated: true,
|
|
authToken: mockTokenInfo,
|
|
loaded: true,
|
|
error: undefined,
|
|
blocking: false,
|
|
loading: false,
|
|
info: undefined,
|
|
userId: EPersonMock.id,
|
|
idle: false
|
|
};
|
|
|
|
state = {
|
|
authenticated: false,
|
|
authToken: undefined,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
error: undefined,
|
|
info: 'Message',
|
|
userId: undefined,
|
|
idle: false
|
|
};
|
|
});
|
|
|
|
it('should properly set the state, in response to a REDIRECT_AUTHENTICATION_REQUIRED action', () => {
|
|
const action = new RedirectWhenAuthenticationIsRequiredAction('Message');
|
|
const newState = authReducer(initialState, action);
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a REDIRECT_TOKEN_EXPIRED action', () => {
|
|
const action = new RedirectWhenTokenExpiredAction('Message');
|
|
const newState = authReducer(initialState, action);
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a ADD_MESSAGE action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
const action = new AddAuthenticationMessageAction('Message');
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
info: 'Message',
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RESET_MESSAGES action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
error: 'Error',
|
|
info: 'Message',
|
|
idle: false
|
|
};
|
|
const action = new ResetAuthenticationMessagesAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
error: undefined,
|
|
info: undefined,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a SET_REDIRECT_URL action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
const action = new SetRedirectUrlAction('redirect.url');
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
redirectUrl: 'redirect.url',
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RETRIEVE_AUTH_METHODS action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
authMethods: [],
|
|
idle: false
|
|
};
|
|
const action = new RetrieveAuthMethodsAction(new AuthStatus());
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: true,
|
|
authMethods: [],
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RETRIEVE_AUTH_METHODS_SUCCESS action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: true,
|
|
loading: true,
|
|
authMethods: [],
|
|
idle: false
|
|
};
|
|
const authMethods: AuthMethod[] = [
|
|
new AuthMethod(AuthMethodType.Password, 0),
|
|
new AuthMethod(AuthMethodType.Shibboleth, 1, 'location'),
|
|
];
|
|
const action = new RetrieveAuthMethodsSuccessAction(authMethods);
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
authMethods: authMethods,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a RETRIEVE_AUTH_METHODS_ERROR action', () => {
|
|
initialState = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: true,
|
|
loading: true,
|
|
authMethods: [],
|
|
idle: false
|
|
};
|
|
|
|
const action = new RetrieveAuthMethodsErrorAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: false,
|
|
loaded: false,
|
|
blocking: false,
|
|
loading: false,
|
|
authMethods: [new AuthMethod(AuthMethodType.Password, 0)],
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a SET_USER_AS_IDLE action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
|
|
const action = new SetUserAsIdleAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: true
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
|
|
it('should properly set the state, in response to a UNSET_USER_AS_IDLE action', () => {
|
|
initialState = {
|
|
authenticated: true,
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: true
|
|
};
|
|
|
|
const action = new UnsetUserAsIdleAction();
|
|
const newState = authReducer(initialState, action);
|
|
state = {
|
|
authenticated: true,
|
|
loaded: true,
|
|
blocking: false,
|
|
loading: false,
|
|
idle: false
|
|
};
|
|
expect(newState).toEqual(state);
|
|
});
|
|
});
|