Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add first set of docusaurus-build tests using Jest #259

Merged
merged 8 commits into from
Dec 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ defaults: &defaults

version: 2
jobs:
test-website:
tests:
<<: *defaults
steps:
- checkout
Expand All @@ -42,7 +42,10 @@ jobs:
name: Check Prettier
command: yarn ci-check
- run:
name: Test Build Static Website
name: Run Test Suites
command: yarn test
- run:
name: Test Static Website Builds
command: cd website && yarn run build

deploy-website:
Expand Down Expand Up @@ -99,11 +102,11 @@ workflows:

website:
jobs:
- test-website:
- tests:
filters: *filter-ignore-gh-pages
- deploy-website:
requires:
- test-website
- tests
filters: *filter-only-master

deploy:
Expand Down
Empty file added .watchmanconfig
Empty file.
107 changes: 107 additions & 0 deletions lib/__tests__/build-files.tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
const filepath = require('filepath');
const fm = require('front-matter');
const fs = require('fs-extra');
const glob = require('glob-promise');
const rimraf = require('rimraf');
const shell = require('shelljs');

const CWD = process.cwd();

const siteConfig = require(CWD + '/website/siteConfig.js');
const buildDir = CWD + '/website/build';
const docsDir = CWD + '/docs';
const staticCSSDir = CWD + '/website/static/css';

let inputMarkdownFiles = [];
let inputAssetsFiles = [];
let outputHTMLFiles = [];
let outputAssetsFiles = [];

function generateSite() {
shell.cd('website');
shell.exec('yarn build');
}

function clearBuildFolder() {
return rimraf(buildDir);
}

beforeEach(() => {
shell.cd(CWD);
});

beforeAll(() => {
generateSite();
return Promise.all([
glob(docsDir + '/**/*.md'),
glob(buildDir + '/' + siteConfig.projectName + '/docs/*.html'),
glob(docsDir + '/assets/*'),
glob(buildDir + '/' + siteConfig.projectName + '/img/*'),
]).then(function(results) {
inputMarkdownFiles = results[0];
outputHTMLFiles = results[1];
inputAssetsFiles = results[2];
outputAssetsFiles = results[3];
return;
});
});

function afterAll() {
clearBuildFolder();
}

test('Build folder exists', function() {
return fs.stat(buildDir).then(function(status) {
expect(status.isDirectory()).toBeTruthy();
});
});

test('Generated HTML for each Markdown resource', function() {
let metadata = [];
outputHTMLFiles.forEach(function(file) {
const path = filepath.create(file);
metadata.push(path.basename());
});
inputMarkdownFiles.forEach(function(file) {
const path = filepath.create(file);
const data = fs.readFileSync(file, 'utf8');
const frontmatter = fm(data);
expect(metadata).toContain(frontmatter.attributes.id + '.html');
});
});

test('Generated table of contents', function() {
outputHTMLFiles.forEach(function(file) {
const fileContents = fs.readFileSync(file, 'utf8');
expect(fileContents).not.toContain('<AUTOGENERATED_TABLE_OF_CONTENTS>');
});
});

test('Concatenated CSS files', function() {
return Promise.all([
glob(staticCSSDir + '/*.css'),
fs.readFile(
buildDir + '/' + siteConfig.projectName + '/css/main.css',
'utf8'
),
]).then(function(results) {
const inputFiles = results[0];
const outputFile = results[1];
inputFiles.forEach(function(file) {
const contents = fs.readFileSync(file, 'utf8');
expect(outputFile).toContain(contents);
});
});
});

test('Copied assets from /docs/assets', function() {
let metadata = [];
outputAssetsFiles.forEach(function(file) {
const path = filepath.create(file);
metadata.push(path.basename());
});
inputAssetsFiles.forEach(function(file) {
const path = filepath.create(file);
expect(metadata).toContain(path.basename());
});
});
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"nit:source": "prettier --config .prettierrc --list-different \"lib/**/*.js\"",
"nit:examples": "prettier --config .prettierrc --list-different \"examples/**/*.js\"",
"prettier": "yarn format:source && yarn format:examples",
"prettier:diff": "yarn nit:source && yarn nit:examples"
"prettier:diff": "yarn nit:source && yarn nit:examples",
"test": "jest"
},
"dependencies": {
"babel-preset-env": "^1.6.0",
Expand Down Expand Up @@ -59,6 +60,11 @@
"docusaurus-feed": "./lib/generate-feed.js"
},
"devDependencies": {
"prettier": "^1.9.1"
"prettier": "^1.9.1",
"filepath": "^1.1.0",
"front-matter": "^2.3.0",
"glob-promise": "^3.3.0",
"jest": "^21.2.1",
"rimraf": "^2.6.2"
}
}