'use strict';
const React = require('react');
const {default: PQueue} = require('p-queue');
const delay = require('delay');
const ms = require('ms');
const importJsx = require('import-jsx');
const {Static, Box, render} = require('../..');
const Summary = importJsx('./summary');
const Test = importJsx('./test');
const paths = [
'tests/login.js',
'tests/signup.js',
'tests/forgot-password.js',
'tests/reset-password.js',
'tests/view-profile.js',
'tests/edit-profile.js',
'tests/delete-profile.js',
'tests/posts.js',
'tests/post.js',
'tests/comments.js'
];
class Jest extends React.Component {
constructor() {
super();
this.state = {
startTime: Date.now(),
completedTests: [],
runningTests: []
};
}
render() {
const {startTime, completedTests, runningTests} = this.state;
return (
{test => (
)}
{runningTests.length > 0 && (
{runningTests.map(test => (
))}
)}
test.status === 'pass').length}
failed={completedTests.filter(test => test.status === 'fail').length}
time={ms(Date.now() - startTime)}
/>
);
}
componentDidMount() {
const queue = new PQueue({concurrency: 4});
paths.forEach(path => {
queue.add(this.runTest.bind(this, path));
});
}
async runTest(path) {
this.setState(previousState => ({
runningTests: [
...previousState.runningTests,
{
status: 'runs',
path
}
]
}));
await delay(1000 * Math.random());
this.setState(previousState => ({
runningTests: previousState.runningTests.filter(
test => test.path !== path
),
completedTests: [
...previousState.completedTests,
{
status: Math.random() < 0.5 ? 'pass' : 'fail',
path
}
]
}));
}
}
render();