Skip to content

Commit

Permalink
Fix bad routing regex for docs & blogs (#795)
Browse files Browse the repository at this point in the history
* fix bad routing regex for docs & blogs

* extract to routing.js & add test

* add more test case

* address code review

* prettier
  • Loading branch information
endiliey committed Jun 24, 2018
1 parent 5a8e9a9 commit 66b2033
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 3 deletions.
62 changes: 62 additions & 0 deletions lib/core/__tests__/routing.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

const {docsRouting, blogRouting} = require('../routing');

describe('Blog routing', () => {
const blogRegex = blogRouting('/');
const blogRegex2 = blogRouting('/react/');

test('valid blog', () => {
expect('/blog/test.html').toMatch(blogRegex);
expect('/react/blog/test.html').toMatch(blogRegex2);
});

test('invalid blog', () => {
expect('/react/blog/test.html').not.toMatch(blogRegex);
expect('/blog/test.html').not.toMatch(blogRegex2);
});

test('assets not classified as blog', () => {
expect('/blog/assets/any.png').not.toMatch(blogRegex);
expect('/react/blog/assets/any.png').not.toMatch(blogRegex2);
});

test('docs not classified as blog', () => {
expect('/docs/en/blog.html').not.toMatch(blogRegex);
expect('/docs/en/blog/blog.html').not.toMatch(blogRegex);
expect('/react/docs/en/blog.html').not.toMatch(blogRegex2);
expect('/react/docs/en/blog/blog.html').not.toMatch(blogRegex2);
});
});

describe('Docs routing', () => {
const docsRegex = docsRouting('/');
const docsRegex2 = docsRouting('/reason/');

test('valid docs', () => {
expect('/docs/en/test.html').toMatch(docsRegex);
expect('/reason/docs/en/test.html').toMatch(docsRegex2);
});

test('invalid docs', () => {
expect('/reason/docs/en/test.html').not.toMatch(docsRegex);
expect('/docs/en/test.html').not.toMatch(docsRegex2);
});

test('assets not classified as docs', () => {
expect('/docs/en/notvalid.png').not.toMatch(docsRegex);
expect('/reason/docs/en/notvalid.png').not.toMatch(docsRegex2);
});

test('blog not classified as docs', () => {
expect('/blog/docs.html').not.toMatch(docsRegex);
expect('/blog/docs/docs.html').not.toMatch(docsRegex);
expect('/reason/blog/docs.html').not.toMatch(docsRegex2);
expect('/reason/blog/docs/docs.html').not.toMatch(docsRegex2);
});
});
20 changes: 20 additions & 0 deletions lib/core/routing.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const escapeStringRegexp = require('escape-string-regexp');

function docsRouting(baseUrl) {
return new RegExp(`^${escapeStringRegexp(baseUrl)}docs\/.*html$`);
}

function blogRouting(baseUrl) {
return new RegExp(`^${escapeStringRegexp(baseUrl)}blog\/.*html$`);
}

module.exports = {
docsRouting,
blogRouting,
};
7 changes: 4 additions & 3 deletions lib/server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ function execute(port, options) {
const path = require('path');
const color = require('color');
const getTOC = require('../core/getTOC');
const {docsRouting, blogRouting} = require('../core/routing');
const mkdirp = require('mkdirp');
const glob = require('glob');
const chalk = require('chalk');
Expand Down Expand Up @@ -129,10 +130,10 @@ function execute(port, options) {
extractTranslations();
reloadSiteConfig();

// handle all requests for document pages
const app = express();

app.get(/\/docs\/.*html$/, (req, res, next) => {
// handle all requests for document pages
app.get(docsRouting(siteConfig.baseUrl), (req, res, next) => {
let url = req.path.toString().replace(siteConfig.baseUrl, '');

// links is a map from a permalink to an id for each document
Expand Down Expand Up @@ -275,7 +276,7 @@ function execute(port, options) {
});

// Handle all requests for blog pages and posts.
app.get(/\/blog\/.*html$/, (req, res) => {
app.get(blogRouting(siteConfig.baseUrl), (req, res) => {
// Regenerate the blog metadata in case it has changed. Consider improving
// this to regenerate on file save rather than on page request.
reloadMetadataBlog();
Expand Down

0 comments on commit 66b2033

Please sign in to comment.