diff --git a/src/services/authFlow/AbstractState.js b/src/services/authFlow/AbstractState.js index 386393f..b5427f0 100644 --- a/src/services/authFlow/AbstractState.js +++ b/src/services/authFlow/AbstractState.js @@ -1,9 +1,13 @@ +// @flow +/* eslint no-unused-vars: off */ +import type { AuthContext } from 'services/authFlow'; + export default class AbstractState { - resolve() {} - goBack() { + resolve(context: AuthContext, payload: Object) {} + goBack(context: AuthContext) { throw new Error('There is no way back'); } - reject() {} - enter() {} - leave() {} + reject(context: AuthContext, payload: Object) {} + enter(context: AuthContext) {} + leave(context: AuthContext) {} } diff --git a/src/services/authFlow/ActivationState.js b/src/services/authFlow/ActivationState.js index b0bff83..3b7c3e5 100644 --- a/src/services/authFlow/ActivationState.js +++ b/src/services/authFlow/ActivationState.js @@ -1,24 +1,20 @@ +// @flow import logger from 'services/logger'; import AbstractState from './AbstractState'; import CompleteState from './CompleteState'; import ResendActivationState from './ResendActivationState'; +import type { AuthContext } from 'services/authFlow'; export default class ActivationState extends AbstractState { - enter(context) { - const {user} = context.getState(); - - if (user.isActive) { - context.setState(new CompleteState()); - } else { - const url = context.getRequest().path.includes('/activation') - ? context.getRequest().path - : '/activation'; - context.navigate(url); - } + enter(context: AuthContext) { + const url = context.getRequest().path.includes('/activation') + ? context.getRequest().path + : '/activation'; + context.navigate(url); } - resolve(context, payload) { + resolve(context: AuthContext, payload: Object) { context.run('activate', payload) .then(() => context.setState(new CompleteState())) .catch((err = {}) => @@ -26,7 +22,7 @@ export default class ActivationState extends AbstractState { ); } - reject(context) { + reject(context: AuthContext) { context.setState(new ResendActivationState()); } } diff --git a/src/services/authFlow/ActivationState.test.js b/src/services/authFlow/ActivationState.test.js index 826b261..250af74 100644 --- a/src/services/authFlow/ActivationState.test.js +++ b/src/services/authFlow/ActivationState.test.js @@ -53,18 +53,6 @@ describe('ActivationState', () => { state.enter(context); }); - - it('should transition to complete state if account activated', () => { - context.getState.returns({ - user: { - isActive: true - } - }); - - expectState(mock, CompleteState); - - state.enter(context); - }); }); describe('#resolve', () => { diff --git a/src/services/authFlow/AuthFlow.js b/src/services/authFlow/AuthFlow.js index 92500b6..07acd8e 100644 --- a/src/services/authFlow/AuthFlow.js +++ b/src/services/authFlow/AuthFlow.js @@ -11,6 +11,17 @@ import RecoverPasswordState from './RecoverPasswordState'; import ActivationState from './ActivationState'; import CompleteState from './CompleteState'; import ResendActivationState from './ResendActivationState'; +import type AbstractState from './AbstractState'; + +export type AuthContext = { + run: (actionId: string, payload: Object) => any, + setState: (newState: AbstractState) => void, + getRequest: () => { + path: string, + query: URLSearchParams, + params: Object + } +}; export default class AuthFlow { constructor(actions) { diff --git a/src/services/authFlow/ResendActivationState.js b/src/services/authFlow/ResendActivationState.js index 56559e5..1304286 100644 --- a/src/services/authFlow/ResendActivationState.js +++ b/src/services/authFlow/ResendActivationState.js @@ -1,22 +1,17 @@ +// @flow import logger from 'services/logger'; import AbstractState from './AbstractState'; -import CompleteState from './CompleteState'; import ActivationState from './ActivationState'; import RegisterState from './RegisterState'; +import type { AuthContext } from 'services/authFlow'; export default class ResendActivationState extends AbstractState { - enter(context) { - const {user} = context.getState(); - - if (user.isActive) { - context.setState(new CompleteState()); - } else { - context.navigate('/resend-activation'); - } + enter(context: AuthContext) { + context.navigate('/resend-activation'); } - resolve(context, payload) { + resolve(context: AuthContext, payload: Object) { context.run('resendActivation', payload) .then(() => context.setState(new ActivationState())) .catch((err = {}) => @@ -24,11 +19,11 @@ export default class ResendActivationState extends AbstractState { ); } - reject(context) { + reject(context: AuthContext) { context.setState(new ActivationState()); } - goBack(context) { + goBack(context: AuthContext) { if (context.prevState instanceof RegisterState) { context.setState(new RegisterState()); } else { diff --git a/src/services/authFlow/ResendActivationState.test.js b/src/services/authFlow/ResendActivationState.test.js index d4308a8..3c3663b 100644 --- a/src/services/authFlow/ResendActivationState.test.js +++ b/src/services/authFlow/ResendActivationState.test.js @@ -49,18 +49,6 @@ describe('ResendActivationState', () => { state.enter(context); }); - - it('should transition to complete state if account activated', () => { - context.getState.returns({ - user: { - isActive: true - } - }); - - expectState(mock, CompleteState); - - state.enter(context); - }); }); describe('#resolve', () => { diff --git a/src/services/authFlow/index.js b/src/services/authFlow/index.js index 8a365e3..a6d17cf 100644 --- a/src/services/authFlow/index.js +++ b/src/services/authFlow/index.js @@ -1,4 +1,5 @@ import AuthFlow from './AuthFlow'; +export type {AuthContext} from './AuthFlow'; import * as actions from 'components/auth/actions';