Fix infinite redirect on www subdomain

Add first route tests
This commit is contained in:
Tom Moor
2018-11-12 22:45:51 -08:00
parent 1d906c7f68
commit a95632b9de
2 changed files with 35 additions and 1 deletions

View File

@ -70,13 +70,19 @@ router.get('/', async ctx => {
const subdomain = domain ? domain.subdomain : undefined; const subdomain = domain ? domain.subdomain : undefined;
const accessToken = ctx.cookies.get('accessToken'); const accessToken = ctx.cookies.get('accessToken');
// Because we render both the signed in and signed out views depending
// on a cookie it's important that the browser does not render from cache.
ctx.set('Cache-Control', 'no-cache'); ctx.set('Cache-Control', 'no-cache');
// If we have an accessToken we can just go ahead and render the app if
// the accessToken turns out to be invalid the user will be redirected.
if (accessToken) { if (accessToken) {
return renderapp(ctx); return renderapp(ctx);
} }
if (subdomain) { // If we're on a custom subdomain then we display a slightly different signed
// out view that includes the teams basic information.
if (subdomain && subdomain !== 'www') {
const team = await Team.find({ const team = await Team.find({
where: { subdomain }, where: { subdomain },
}); });
@ -98,6 +104,7 @@ router.get('/', async ctx => {
return; return;
} }
// Otherwise, go ahead and render the homepage
return renderpage( return renderpage(
ctx, ctx,
<Home <Home

27
server/routes.test.js Normal file
View File

@ -0,0 +1,27 @@
/* eslint-disable flowtype/require-valid-file-annotation */
import TestServer from 'fetch-test-server';
import app from '.';
import { flushdb } from './test/support';
const server = new TestServer(app.callback());
beforeEach(flushdb);
afterAll(server.close);
describe('#index', async () => {
it('should render homepage', async () => {
const res = await server.get('/');
const html = await res.text();
expect(res.status).toEqual(200);
expect(html.includes('Your teams knowledge base')).toEqual(true);
});
it('should render app if there is an accessToken', async () => {
const res = await server.get('/', {
headers: { authorization: 'Bearer thisIsAnAccessToken' },
});
const html = await res.text();
expect(res.status).toEqual(200);
expect(html.includes('id="root"')).toEqual(true);
});
});