fix: return the loader after redirect (#37432)

Co-authored-by: Kristofer Koishigawa <scissorsneedfoodtoo@gmail.com>
pull/37462/head
Ahmad Abdolsaheb 2019-10-22 14:28:35 +03:00 committed by mrugesh
parent afeb476818
commit 9337d6ad82
5 changed files with 48 additions and 15 deletions

View File

@ -162,14 +162,13 @@ export function ShowSettings(props) {
} }
if (!showLoading && !isSignedIn) { if (!showLoading && !isSignedIn) {
return navigate(`${apiLocation}/signin?returnTo=settings`); navigate(`${apiLocation}/signin?returnTo=settings`);
return <Loader fullScreen={true} />;
} }
return ( return (
<Fragment> <Fragment>
<Helmet> <Helmet title='Settings | freeCodeCamp.org'></Helmet>
<title>Settings | freeCodeCamp.org</title>
</Helmet>
<Grid> <Grid>
<main> <main>
<Spacer size={2} /> <Spacer size={2} />

View File

@ -7,22 +7,36 @@ import { apiLocation } from '../../config/env.json';
import { ShowSettings } from './ShowSettings'; import { ShowSettings } from './ShowSettings';
describe('<ShowSettings />', () => { describe('<ShowSettings />', () => {
it('redirects to signin page when user not logged in', () => { it('renders to the DOM when user is logged in', () => {
const shallow = new ShallowRenderer();
shallow.render(<ShowSettings {...loggedInProps} />);
expect(navigate).toHaveBeenCalledTimes(0);
const result = shallow.getRenderOutput();
expect(result.type.toString()).toBe('Symbol(react.fragment)');
// Renders Helmet component rather than Loader
expect(result.props.children[0].props.title).toEqual(
'Settings | freeCodeCamp.org'
);
});
it('redirects to sign in page when user is not logged in', () => {
const shallow = new ShallowRenderer(); const shallow = new ShallowRenderer();
shallow.render(<ShowSettings {...loggedOutProps} />); shallow.render(<ShowSettings {...loggedOutProps} />);
expect(navigate).toHaveBeenCalledTimes(1); expect(navigate).toHaveBeenCalledTimes(1);
expect(navigate).toHaveBeenCalledWith( expect(navigate).toHaveBeenCalledWith(
`${apiLocation}/signin?returnTo=settings` `${apiLocation}/signin?returnTo=settings`
); );
expect(true).toBeTruthy(); const result = shallow.getRenderOutput();
// Renders Loader rather than ShowSettings
expect(result.type.displayName).toBe('Loader');
}); });
}); });
const navigate = jest.fn(); const navigate = jest.fn();
const loggedOutProps = { const loggedInProps = {
createFlashMessage: jest.fn(), createFlashMessage: jest.fn(),
hardGoTo: jest.fn(), hardGoTo: jest.fn(),
isSignedIn: false, isSignedIn: true,
navigate: navigate, navigate: navigate,
showLoading: false, showLoading: false,
submitNewAbout: jest.fn(), submitNewAbout: jest.fn(),
@ -37,3 +51,5 @@ const loggedOutProps = {
}, },
verifyCert: jest.fn() verifyCert: jest.fn()
}; };
const loggedOutProps = { ...loggedInProps };
loggedOutProps.isSignedIn = false;

View File

@ -91,7 +91,8 @@ export class DonatePage extends Component {
} }
if (!showLoading && !isSignedIn) { if (!showLoading && !isSignedIn) {
return navigate(`${apiLocation}/signin?returnTo=donate`); navigate(`${apiLocation}/signin?returnTo=donate`);
return <Loader fullScreen={true} />;
} }
return ( return (

View File

@ -6,22 +6,38 @@ import { apiLocation } from '../../config/env.json';
import { DonatePage } from './donate'; import { DonatePage } from './donate';
describe('<ShowSettings />', () => { describe('<DonatePage />', () => {
it('redirects to signin page when user not logged in', () => { it('renders to the DOM when user is logged in', () => {
const shallow = new ShallowRenderer();
shallow.render(<DonatePage {...loggedInProps} />);
expect(navigate).toHaveBeenCalledTimes(0);
const result = shallow.getRenderOutput();
expect(result.type.toString()).toBe('Symbol(react.fragment)');
// Renders Helmet component rather than Loader
expect(result.props.children[0].props.title).toEqual(
'Support our nonprofit | freeCodeCamp.org'
);
});
it('redirects to sign in page when user is not logged in', () => {
const shallow = new ShallowRenderer(); const shallow = new ShallowRenderer();
shallow.render(<DonatePage {...loggedOutProps} />); shallow.render(<DonatePage {...loggedOutProps} />);
expect(navigate).toHaveBeenCalledTimes(1); expect(navigate).toHaveBeenCalledTimes(1);
expect(navigate).toHaveBeenCalledWith( expect(navigate).toHaveBeenCalledWith(
`${apiLocation}/signin?returnTo=donate` `${apiLocation}/signin?returnTo=donate`
); );
expect(true).toBeTruthy(); const result = shallow.getRenderOutput();
// Renders Loader rather than DonatePage
expect(result.type.displayName).toBe('Loader');
}); });
}); });
const navigate = jest.fn(); const navigate = jest.fn();
const loggedOutProps = { const loggedInProps = {
createFlashMessage: () => {}, createFlashMessage: () => {},
isSignedIn: false, isSignedIn: true,
showLoading: false, showLoading: false,
navigate: navigate navigate: navigate
}; };
const loggedOutProps = { ...loggedInProps };
loggedOutProps.isSignedIn = false;

View File

@ -50,7 +50,8 @@ function ProfilePage(props) {
return <Loader fullScreen={true} />; return <Loader fullScreen={true} />;
} }
if (!showLoading && !isSignedIn) { if (!showLoading && !isSignedIn) {
return navigate(`${apiLocation}/signin?returnTo=portfolio`); navigate(`${apiLocation}/signin?returnTo=portfolio`);
return <Loader fullScreen={true} />;
} }
const RedirecUser = createRedirect('/' + username); const RedirecUser = createRedirect('/' + username);
return <RedirecUser />; return <RedirecUser />;