mirror of
https://github.com/pa11y/pa11y-dashboard.git
synced 2025-09-24 14:21:13 +00:00
Fix JSCS errors
This commit is contained in:
14
app.js
14
app.js
@@ -25,7 +25,7 @@ var pkg = require('./package.json');
|
|||||||
module.exports = initApp;
|
module.exports = initApp;
|
||||||
|
|
||||||
// Initialise the application
|
// Initialise the application
|
||||||
function initApp (config, callback) {
|
function initApp(config, callback) {
|
||||||
config = defaultConfig(config);
|
config = defaultConfig(config);
|
||||||
|
|
||||||
var webserviceUrl = config.webservice;
|
var webserviceUrl = config.webservice;
|
||||||
@@ -58,7 +58,7 @@ function initApp (config, callback) {
|
|||||||
contentHelperName: 'content',
|
contentHelperName: 'content',
|
||||||
layoutsDir: __dirname + '/view/layout',
|
layoutsDir: __dirname + '/view/layout',
|
||||||
partialsDir: __dirname + '/view/partial',
|
partialsDir: __dirname + '/view/partial',
|
||||||
defaultLayout: __dirname + '/view/layout/default',
|
defaultLayout: __dirname + '/view/layout/default'
|
||||||
}));
|
}));
|
||||||
app.express.set('view engine', 'html');
|
app.express.set('view engine', 'html');
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ function initApp (config, callback) {
|
|||||||
siteMessage: config.siteMessage
|
siteMessage: config.siteMessage
|
||||||
});
|
});
|
||||||
|
|
||||||
app.express.use(function (req, res, next) {
|
app.express.use(function(req, res, next) {
|
||||||
res.locals.isHomePage = (req.path === '/');
|
res.locals.isHomePage = (req.path === '/');
|
||||||
res.locals.host = req.host;
|
res.locals.host = req.host;
|
||||||
next();
|
next();
|
||||||
@@ -100,11 +100,11 @@ function initApp (config, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Error handling
|
// Error handling
|
||||||
app.express.get('*', function (req, res) {
|
app.express.get('*', function(req, res) {
|
||||||
res.status(404);
|
res.status(404);
|
||||||
res.render('404');
|
res.render('404');
|
||||||
});
|
});
|
||||||
app.express.use(function (err, req, res, next) {
|
app.express.use(function(err, req, res, next) {
|
||||||
/* jshint unused: false */
|
/* jshint unused: false */
|
||||||
if (err.code === 'ECONNREFUSED') {
|
if (err.code === 'ECONNREFUSED') {
|
||||||
err = new Error('Could not connect to pa11y-webservice');
|
err = new Error('Could not connect to pa11y-webservice');
|
||||||
@@ -117,7 +117,7 @@ function initApp (config, callback) {
|
|||||||
res.render('500');
|
res.render('500');
|
||||||
});
|
});
|
||||||
|
|
||||||
app.server.listen(config.port, function (err) {
|
app.server.listen(config.port, function(err) {
|
||||||
var address = app.server.address();
|
var address = app.server.address();
|
||||||
app.address = 'http://' + address.address + ':' + address.port;
|
app.address = 'http://' + address.address + ':' + address.port;
|
||||||
callback(err, app);
|
callback(err, app);
|
||||||
@@ -126,7 +126,7 @@ function initApp (config, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get default configurations
|
// Get default configurations
|
||||||
function defaultConfig (config) {
|
function defaultConfig(config) {
|
||||||
if (typeof config.noindex !== 'boolean') {
|
if (typeof config.noindex !== 'boolean') {
|
||||||
config.noindex = true;
|
config.noindex = true;
|
||||||
}
|
}
|
||||||
|
@@ -1,24 +1,24 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
/* jshint maxlen: false */
|
// jscs:disable maximumLineLength
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = getStandards;
|
module.exports = getStandards;
|
||||||
|
|
||||||
function getStandards () {
|
function getStandards() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
title: 'Section508',
|
title: 'Section508',
|
||||||
@@ -656,10 +656,12 @@ function getStandards () {
|
|||||||
{
|
{
|
||||||
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H30.2',
|
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H30.2',
|
||||||
description: 'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.'
|
description: 'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.'
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H37',
|
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H37',
|
||||||
description: 'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.'
|
description: 'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.'
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H67.1',
|
name: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H67.1',
|
||||||
description: 'Img element with empty alt text must have absent or empty title attribute.'
|
description: 'Img element with empty alt text must have absent or empty title attribute.'
|
||||||
},
|
},
|
||||||
|
18
index.js
18
index.js
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -18,19 +18,19 @@
|
|||||||
var chalk = require('chalk');
|
var chalk = require('chalk');
|
||||||
var config = require('./config/' + (process.env.NODE_ENV || 'development') + '.json');
|
var config = require('./config/' + (process.env.NODE_ENV || 'development') + '.json');
|
||||||
|
|
||||||
process.on( 'SIGINT', function() {
|
process.on('SIGINT', function() {
|
||||||
console.log( '\nGracefully shutting down from SIGINT (Ctrl-C)' );
|
console.log('\nGracefully shutting down from SIGINT (Ctrl-C)');
|
||||||
process.exit( );
|
process.exit();
|
||||||
});
|
});
|
||||||
|
|
||||||
require('./app')(config, function (err, app) {
|
require('./app')(config, function(err, app) {
|
||||||
|
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log(chalk.underline.magenta('pa11y-dashboard started'));
|
console.log(chalk.underline.magenta('pa11y-dashboard started'));
|
||||||
console.log(chalk.grey('mode: %s'), process.env.NODE_ENV);
|
console.log(chalk.grey('mode: %s'), process.env.NODE_ENV);
|
||||||
console.log(chalk.grey('uri: %s'), app.address);
|
console.log(chalk.grey('uri: %s'), app.address);
|
||||||
|
|
||||||
app.on('route-error', function (err) {
|
app.on('route-error', function(err) {
|
||||||
var stack = (err.stack ? err.stack.split('\n') : [err.message]);
|
var stack = (err.stack ? err.stack.split('\n') : [err.message]);
|
||||||
var msg = chalk.red(stack.shift());
|
var msg = chalk.red(stack.shift());
|
||||||
console.error('');
|
console.error('');
|
||||||
@@ -40,7 +40,7 @@ require('./app')(config, function (err, app) {
|
|||||||
|
|
||||||
// Start the webservice if required
|
// Start the webservice if required
|
||||||
if (typeof config.webservice === 'object') {
|
if (typeof config.webservice === 'object') {
|
||||||
require('pa11y-webservice')(config.webservice, function (err, webservice) {
|
require('pa11y-webservice')(config.webservice, function(err, webservice) {
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log(chalk.underline.cyan('pa11y-webservice started'));
|
console.log(chalk.underline.cyan('pa11y-webservice started'));
|
||||||
console.log(chalk.grey('mode: %s'), process.env.NODE_ENV);
|
console.log(chalk.grey('mode: %s'), process.env.NODE_ENV);
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@ var presentTask = require('../view/presenter/task');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
app.express.get('/', function (req, res, next) {
|
app.express.get('/', function(req, res, next) {
|
||||||
app.webservice.tasks.get({lastres: true}, function (err, tasks) {
|
app.webservice.tasks.get({lastres: true}, function(err, tasks) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
14
route/new.js
14
route/new.js
@@ -20,10 +20,10 @@ var getStandards = require('../data/standards');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/new', function (req, res) {
|
app.express.get('/new', function(req, res) {
|
||||||
var standards = getStandards().map(function (standard) {
|
var standards = getStandards().map(function(standard) {
|
||||||
if (standard.title === 'WCAG2AA') {
|
if (standard.title === 'WCAG2AA') {
|
||||||
standard.selected = true;
|
standard.selected = true;
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ function route (app) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.express.post('/new', function (req, res) {
|
app.express.post('/new', function(req, res) {
|
||||||
var newTask = {
|
var newTask = {
|
||||||
name: req.body.name,
|
name: req.body.name,
|
||||||
url: req.body.url,
|
url: req.body.url,
|
||||||
@@ -45,13 +45,13 @@ function route (app) {
|
|||||||
username: req.body.username,
|
username: req.body.username,
|
||||||
password: req.body.password
|
password: req.body.password
|
||||||
};
|
};
|
||||||
app.webservice.tasks.create(newTask, function (err, task) {
|
app.webservice.tasks.create(newTask, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
var standards = getStandards().map(function (standard) {
|
var standards = getStandards().map(function(standard) {
|
||||||
if (standard.title === newTask.standard) {
|
if (standard.title === newTask.standard) {
|
||||||
standard.selected = true;
|
standard.selected = true;
|
||||||
}
|
}
|
||||||
standard.rules = standard.rules.map(function (rule) {
|
standard.rules = standard.rules.map(function(rule) {
|
||||||
if (newTask.ignore.indexOf(rule.name) !== -1) {
|
if (newTask.ignore.indexOf(rule.name) !== -1) {
|
||||||
rule.ignored = true;
|
rule.ignored = true;
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,67 +20,67 @@ var moment = require('moment');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
function getTaskAndResult (req, res, next) {
|
function getTaskAndResult(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next('route');
|
return next('route');
|
||||||
}
|
}
|
||||||
app.webservice
|
app.webservice
|
||||||
.task(req.params.id)
|
.task(req.params.id)
|
||||||
.result(req.params.rid)
|
.result(req.params.rid)
|
||||||
.get({full: true}, function (err, result) {
|
.get({full: true}, function(err, result) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next('route');
|
return next('route');
|
||||||
}
|
}
|
||||||
res.locals.task = task;
|
res.locals.task = task;
|
||||||
res.locals.result = result;
|
res.locals.result = result;
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDownloadFileName (task, result, extension) {
|
function getDownloadFileName(task, result, extension) {
|
||||||
return [
|
return [
|
||||||
'pa11y',
|
'pa11y',
|
||||||
'--',
|
'--',
|
||||||
task.url
|
task.url
|
||||||
.replace(/^https?:\/\//i, '')
|
.replace(/^https?:\/\//i, '')
|
||||||
.replace(/\/$/, '')
|
.replace(/\/$/, '')
|
||||||
.replace(/[^a-z0-9\.\-\_]+/gi, '-'),
|
.replace(/[^a-z0-9\.\-\_]+/gi, '-'),
|
||||||
'--',
|
'--',
|
||||||
task.standard.toLowerCase(),
|
task.standard.toLowerCase(),
|
||||||
'--',
|
'--',
|
||||||
moment(result.date).format('YYYY-MM-DD'),
|
moment(result.date).format('YYYY-MM-DD'),
|
||||||
'.',
|
'.',
|
||||||
extension
|
extension
|
||||||
].join('');
|
].join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
app.express.get('/:id/:rid.csv', getTaskAndResult, function (req, res) {
|
app.express.get('/:id/:rid.csv', getTaskAndResult, function(req, res) {
|
||||||
var task = res.locals.task;
|
var task = res.locals.task;
|
||||||
var result = res.locals.result;
|
var result = res.locals.result;
|
||||||
var rows = ['"code","message","type"'];
|
var rows = ['"code","message","type"'];
|
||||||
result.results.forEach(function (msg) {
|
result.results.forEach(function(msg) {
|
||||||
rows.push([
|
rows.push([
|
||||||
JSON.stringify(msg.code),
|
JSON.stringify(msg.code),
|
||||||
JSON.stringify(msg.message),
|
JSON.stringify(msg.message),
|
||||||
JSON.stringify(msg.type)
|
JSON.stringify(msg.type)
|
||||||
].join(','));
|
].join(','));
|
||||||
});
|
});
|
||||||
res.attachment(getDownloadFileName(task, result, 'csv'));
|
res.attachment(getDownloadFileName(task, result, 'csv'));
|
||||||
res.send(rows.join('\n'));
|
res.send(rows.join('\n'));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.express.get('/:id/:rid.json', getTaskAndResult, function (req, res) {
|
app.express.get('/:id/:rid.json', getTaskAndResult, function(req, res) {
|
||||||
var task = res.locals.task;
|
var task = res.locals.task;
|
||||||
var result = res.locals.result;
|
var result = res.locals.result;
|
||||||
res.attachment(getDownloadFileName(task, result, 'json'));
|
res.attachment(getDownloadFileName(task, result, 'json'));
|
||||||
delete task.id;
|
delete task.id;
|
||||||
delete result.id;
|
delete result.id;
|
||||||
result.task = task;
|
result.task = task;
|
||||||
res.send(result);
|
res.send(result);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -21,27 +21,27 @@ var presentResult = require('../../view/presenter/result');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/:id/:rid', function (req, res, next) {
|
app.express.get('/:id/:rid', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
app.webservice
|
app.webservice
|
||||||
.task(req.params.id)
|
.task(req.params.id)
|
||||||
.result(req.params.rid)
|
.result(req.params.rid)
|
||||||
.get({full: true}, function (err, result) {
|
.get({full: true}, function(err, result) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
res.render('result', {
|
res.render('result', {
|
||||||
task: presentTask(task),
|
task: presentTask(task),
|
||||||
mainResult: presentResult(result),
|
mainResult: presentResult(result),
|
||||||
isResultPage: true
|
isResultPage: true
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -20,10 +20,10 @@ var presentTask = require('../../view/presenter/task');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/:id/delete', function (req, res, next) {
|
app.express.get('/:id/delete', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
@@ -34,8 +34,8 @@ function route (app) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.express.post('/:id/delete', function (req, res, next) {
|
app.express.post('/:id/delete', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).remove(function (err) {
|
app.webservice.task(req.params.id).remove(function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
@@ -21,18 +21,18 @@ var getStandards = require('../../data/standards');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/:id/edit', function (req, res, next) {
|
app.express.get('/:id/edit', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
var standards = getStandards().map(function (standard) {
|
var standards = getStandards().map(function(standard) {
|
||||||
if (standard.title === task.standard) {
|
if (standard.title === task.standard) {
|
||||||
standard.selected = true;
|
standard.selected = true;
|
||||||
}
|
}
|
||||||
standard.rules = standard.rules.map(function (rule) {
|
standard.rules = standard.rules.map(function(rule) {
|
||||||
if (task.ignore.indexOf(rule.name) !== -1) {
|
if (task.ignore.indexOf(rule.name) !== -1) {
|
||||||
rule.ignored = true;
|
rule.ignored = true;
|
||||||
}
|
}
|
||||||
@@ -49,24 +49,24 @@ function route (app) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.express.post('/:id/edit', function (req, res, next) {
|
app.express.post('/:id/edit', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
req.body.ignore = req.body.ignore || [];
|
req.body.ignore = req.body.ignore || [];
|
||||||
app.webservice.task(req.params.id).edit(req.body, function (err) {
|
app.webservice.task(req.params.id).edit(req.body, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
task.name = req.body.name;
|
task.name = req.body.name;
|
||||||
task.ignore = req.body.ignore;
|
task.ignore = req.body.ignore;
|
||||||
task.timeout = req.body.timeout;
|
task.timeout = req.body.timeout;
|
||||||
task.username = req.body.username;
|
task.username = req.body.username;
|
||||||
task.password = req.body.password;
|
task.password = req.body.password;
|
||||||
var standards = getStandards().map(function (standard) {
|
var standards = getStandards().map(function(standard) {
|
||||||
if (standard.title === task.standard) {
|
if (standard.title === task.standard) {
|
||||||
standard.selected = true;
|
standard.selected = true;
|
||||||
}
|
}
|
||||||
standard.rules = standard.rules.map(function (rule) {
|
standard.rules = standard.rules.map(function(rule) {
|
||||||
if (task.ignore.indexOf(rule.name) !== -1) {
|
if (task.ignore.indexOf(rule.name) !== -1) {
|
||||||
rule.ignored = true;
|
rule.ignored = true;
|
||||||
}
|
}
|
||||||
|
@@ -3,10 +3,10 @@
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.post('/:id/ignore', function (req, res, next) {
|
app.express.post('/:id/ignore', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ function route (app) {
|
|||||||
if (typeof req.body.rule === 'string') {
|
if (typeof req.body.rule === 'string') {
|
||||||
edit.ignore.push(req.body.rule);
|
edit.ignore.push(req.body.rule);
|
||||||
}
|
}
|
||||||
app.webservice.task(req.params.id).edit(edit, function () {
|
app.webservice.task(req.params.id).edit(edit, function() {
|
||||||
res.redirect('/' + req.params.id + '?rule-ignored');
|
res.redirect('/' + req.params.id + '?rule-ignored');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -22,14 +22,14 @@ var presentResultList = require('../../view/presenter/result-list');
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/:id', function (req, res, next) {
|
app.express.get('/:id', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({lastres: true}, function (err, task) {
|
app.webservice.task(req.params.id).get({lastres: true}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
app.webservice.task(req.params.id).results({}, function (err, results) {
|
app.webservice.task(req.params.id).results({}, function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
@@ -18,10 +18,10 @@
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.get('/:id/run', function (req, res, next) {
|
app.express.get('/:id/run', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).run(function (err) {
|
app.webservice.task(req.params.id).run(function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
@@ -3,10 +3,10 @@
|
|||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
function route (app) {
|
function route(app) {
|
||||||
|
|
||||||
app.express.post('/:id/unignore', function (req, res, next) {
|
app.express.post('/:id/unignore', function(req, res, next) {
|
||||||
app.webservice.task(req.params.id).get({}, function (err, task) {
|
app.webservice.task(req.params.id).get({}, function(err, task) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,7 @@ function route (app) {
|
|||||||
if (typeof req.body.rule === 'string' && indexOfRule !== -1) {
|
if (typeof req.body.rule === 'string' && indexOfRule !== -1) {
|
||||||
edit.ignore.splice(indexOfRule, 1);
|
edit.ignore.splice(indexOfRule, 1);
|
||||||
}
|
}
|
||||||
app.webservice.task(req.params.id).edit(edit, function () {
|
app.webservice.task(req.params.id).edit(edit, function() {
|
||||||
res.redirect('/' + req.params.id + '?rule-unignored');
|
res.redirect('/' + req.params.id + '?rule-unignored');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -21,8 +21,8 @@ var request = require('request');
|
|||||||
module.exports = createNavigator;
|
module.exports = createNavigator;
|
||||||
|
|
||||||
// Create a navigate function
|
// Create a navigate function
|
||||||
function createNavigator (baseUrl, store) {
|
function createNavigator(baseUrl, store) {
|
||||||
return function (opts, callback) {
|
return function(opts, callback) {
|
||||||
|
|
||||||
store.body = null;
|
store.body = null;
|
||||||
store.dom = null;
|
store.dom = null;
|
||||||
@@ -38,7 +38,7 @@ function createNavigator (baseUrl, store) {
|
|||||||
json: true,
|
json: true,
|
||||||
qs: opts.query,
|
qs: opts.query,
|
||||||
followAllRedirects: true
|
followAllRedirects: true
|
||||||
}, function (err, res, body) {
|
}, function(err, res, body) {
|
||||||
|
|
||||||
store.body = body;
|
store.body = body;
|
||||||
store.request = res.request;
|
store.request = res.request;
|
||||||
@@ -52,7 +52,7 @@ function createNavigator (baseUrl, store) {
|
|||||||
} else {
|
} else {
|
||||||
jsdom.env(
|
jsdom.env(
|
||||||
store.body,
|
store.body,
|
||||||
function (err, window) {
|
function(err, window) {
|
||||||
store.window = window;
|
store.window = window;
|
||||||
store.dom = window.document;
|
store.dom = window.document;
|
||||||
callback();
|
callback();
|
||||||
|
@@ -20,7 +20,7 @@ var createClient = require('pa11y-webservice-client-node');
|
|||||||
module.exports = createWebserviceClient;
|
module.exports = createWebserviceClient;
|
||||||
|
|
||||||
// Create a webservice client
|
// Create a webservice client
|
||||||
function createWebserviceClient (config) {
|
function createWebserviceClient(config) {
|
||||||
var webserviceUrl = config.webservice;
|
var webserviceUrl = config.webservice;
|
||||||
if (typeof webserviceUrl === 'object') {
|
if (typeof webserviceUrl === 'object') {
|
||||||
webserviceUrl = 'http://' + webserviceUrl.host + ':' + webserviceUrl.port + '/';
|
webserviceUrl = 'http://' + webserviceUrl.host + ':' + webserviceUrl.port + '/';
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /', function () {
|
describe('GET /', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/'
|
endpoint: '/'
|
||||||
@@ -27,17 +27,17 @@ describe('GET /', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display an "Add new URL" button', function () {
|
it('should display an "Add new URL" button', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=add-task]');
|
var elem = this.last.dom.querySelectorAll('[data-test=add-task]');
|
||||||
assert.strictEqual(elem.length, 1);
|
assert.strictEqual(elem.length, 1);
|
||||||
assert.strictEqual(elem[0].getAttribute('href'), '/new');
|
assert.strictEqual(elem[0].getAttribute('href'), '/new');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display all of the expected tasks', function () {
|
it('should display all of the expected tasks', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.strictEqual(tasks.length, 3);
|
assert.strictEqual(tasks.length, 3);
|
||||||
assert.match(tasks[0].textContent, /npg home\s+\(wcag2aa\)/i);
|
assert.match(tasks[0].textContent, /npg home\s+\(wcag2aa\)/i);
|
||||||
@@ -45,47 +45,47 @@ describe('GET /', function () {
|
|||||||
assert.match(tasks[2].textContent, /nature news\s+\(section508\)/i);
|
assert.match(tasks[2].textContent, /nature news\s+\(section508\)/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have links to each task', function () {
|
it('should have links to each task', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001"]').length, 1);
|
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001"]').length, 1);
|
||||||
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002"]').length, 1);
|
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002"]').length, 1);
|
||||||
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003"]').length, 1);
|
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display an "Edit" button for each task', function () {
|
it('should display an "Edit" button for each task', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/edit"]').length, 1);
|
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/edit"]').length, 1);
|
||||||
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/edit"]').length, 1);
|
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/edit"]').length, 1);
|
||||||
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/edit"]').length, 1);
|
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/edit"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Delete" button for each task', function () {
|
it('should display a "Delete" button for each task', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/delete"]').length, 1);
|
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/delete"]').length, 1);
|
||||||
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/delete"]').length, 1);
|
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/delete"]').length, 1);
|
||||||
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/delete"]').length, 1);
|
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/delete"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Run" button for each task', function () {
|
it('should display a "Run" button for each task', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/run"]').length, 1);
|
assert.strictEqual(tasks[0].querySelectorAll('[href="/abc000000000000000000001/run"]').length, 1);
|
||||||
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/run"]').length, 1);
|
assert.strictEqual(tasks[1].querySelectorAll('[href="/abc000000000000000000002/run"]').length, 1);
|
||||||
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/run"]').length, 1);
|
assert.strictEqual(tasks[2].querySelectorAll('[href="/abc000000000000000000003/run"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display the task result counts if the task has been run', function () {
|
it('should display the task result counts if the task has been run', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.match(tasks[0].textContent, /1\s*errors/i);
|
assert.match(tasks[0].textContent, /1\s*errors/i);
|
||||||
assert.match(tasks[0].textContent, /2\s*warnings/i);
|
assert.match(tasks[0].textContent, /2\s*warnings/i);
|
||||||
assert.match(tasks[0].textContent, /3\s*notices/i);
|
assert.match(tasks[0].textContent, /3\s*notices/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a message indicating that there are no results if the task has not been run', function () {
|
it('should display a message indicating that there are no results if the task has not been run', function() {
|
||||||
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
var tasks = this.last.dom.querySelectorAll('[data-test=task]');
|
||||||
assert.match(tasks[2].textContent, /no results/i);
|
assert.match(tasks[2].textContent, /no results/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not display an alert message', function () {
|
it('should not display an alert message', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=alert]').length, 0);
|
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=alert]').length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /new', function () {
|
describe('GET /new', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/new'
|
endpoint: '/new'
|
||||||
@@ -27,62 +27,62 @@ describe('GET /new', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not display an error message', function () {
|
it('should not display an error message', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 0);
|
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have an "Add new URL" form', function () {
|
it('should have an "Add new URL" form', function() {
|
||||||
var form = this.last.dom.querySelectorAll('[data-test=new-url-form]')[0];
|
var form = this.last.dom.querySelectorAll('[data-test=new-url-form]')[0];
|
||||||
assert.isDefined(form);
|
assert.isDefined(form);
|
||||||
assert.strictEqual(form.getAttribute('action'), '/new');
|
assert.strictEqual(form.getAttribute('action'), '/new');
|
||||||
assert.strictEqual(form.getAttribute('method'), 'post');
|
assert.strictEqual(form.getAttribute('method'), 'post');
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('"Add New URL" form', function () {
|
describe('"Add New URL" form', function() {
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function() {
|
||||||
this.form = this.last.dom.querySelectorAll('[data-test=new-url-form]')[0];
|
this.form = this.last.dom.querySelectorAll('[data-test=new-url-form]')[0];
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "name" field', function () {
|
it('should have a "name" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=name]')[0];
|
var field = this.form.querySelectorAll('input[name=name]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), '');
|
assert.strictEqual(field.getAttribute('value'), '');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "url" field', function () {
|
it('should have a "url" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=url]')[0];
|
var field = this.form.querySelectorAll('input[name=url]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'url');
|
assert.strictEqual(field.getAttribute('type'), 'url');
|
||||||
assert.strictEqual(field.getAttribute('value'), '');
|
assert.strictEqual(field.getAttribute('value'), '');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "username" field', function () {
|
it('should have a "username" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=username]')[0];
|
var field = this.form.querySelectorAll('input[name=username]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), '');
|
assert.strictEqual(field.getAttribute('value'), '');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "password" field', function () {
|
it('should have a "password" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=password]')[0];
|
var field = this.form.querySelectorAll('input[name=password]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), '');
|
assert.strictEqual(field.getAttribute('value'), '');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "standard" field', function () {
|
it('should have a "standard" field', function() {
|
||||||
var field = this.form.querySelectorAll('select[name=standard]')[0];
|
var field = this.form.querySelectorAll('select[name=standard]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.querySelectorAll('option').length, 4);
|
assert.strictEqual(field.querySelectorAll('option').length, 4);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have "ignore" fields', function () {
|
it('should have "ignore" fields', function() {
|
||||||
var fields = this.form.querySelectorAll('input[name="ignore[]"]');
|
var fields = this.form.querySelectorAll('input[name="ignore[]"]');
|
||||||
assert.isDefined(fields);
|
assert.isDefined(fields);
|
||||||
assert.notStrictEqual(fields.length, 0);
|
assert.notStrictEqual(fields.length, 0);
|
||||||
@@ -92,11 +92,11 @@ describe('GET /new', function () {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('POST /new', function () {
|
describe('POST /new', function() {
|
||||||
|
|
||||||
describe('with invalid query', function () {
|
describe('with invalid query', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
endpoint: '/new',
|
endpoint: '/new',
|
||||||
@@ -108,19 +108,19 @@ describe('POST /new', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display an error message', function () {
|
it('should display an error message', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with valid query', function () {
|
describe('with valid query', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
endpoint: '/new',
|
endpoint: '/new',
|
||||||
@@ -133,26 +133,26 @@ describe('POST /new', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create the task', function (done) {
|
it('should create the task', function(done) {
|
||||||
this.webservice.tasks.get({}, function (err, tasks) {
|
this.webservice.tasks.get({}, function(err, tasks) {
|
||||||
assert.strictEqual(tasks.length, 4);
|
assert.strictEqual(tasks.length, 4);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should redirect me to the new URL page', function () {
|
it('should redirect me to the new URL page', function() {
|
||||||
assert.match(this.last.request.uri.pathname, /^\/[a-z0-9]{24}$/i);
|
assert.match(this.last.request.uri.pathname, /^\/[a-z0-9]{24}$/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not display an error message', function () {
|
it('should not display an error message', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 0);
|
assert.strictEqual(this.last.dom.querySelectorAll('[data-test=error]').length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a success message', function () {
|
it('should display a success message', function() {
|
||||||
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
||||||
assert.isDefined(alert);
|
assert.isDefined(alert);
|
||||||
assert.match(alert.textContent, /url has been added/i);
|
assert.match(alert.textContent, /url has been added/i);
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>/<result-id>.csv', function () {
|
describe('GET /<task-id>/<result-id>.csv', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/def000000000000000000001.csv',
|
endpoint: '/abc000000000000000000001/def000000000000000000001.csv',
|
||||||
@@ -28,19 +28,19 @@ describe('GET /<task-id>/<result-id>.csv', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should output CSV results', function () {
|
it('should output CSV results', function() {
|
||||||
assert.match(this.last.body, /^"code","message","type"/);
|
assert.match(this.last.body, /^"code","message","type"/);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('GET /<task-id>/<result-id>.json', function () {
|
describe('GET /<task-id>/<result-id>.json', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/def000000000000000000001.json',
|
endpoint: '/abc000000000000000000001/def000000000000000000001.json',
|
||||||
@@ -49,11 +49,11 @@ describe('GET /<task-id>/<result-id>.json', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should output JSON results', function () {
|
it('should output JSON results', function() {
|
||||||
var json = this.last.body;
|
var json = this.last.body;
|
||||||
assert.strictEqual(json.task.name, 'NPG Home');
|
assert.strictEqual(json.task.name, 'NPG Home');
|
||||||
assert.strictEqual(json.task.url, 'nature.com');
|
assert.strictEqual(json.task.url, 'nature.com');
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>/<result-id>', function () {
|
describe('GET /<task-id>/<result-id>', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/def000000000000000000001'
|
endpoint: '/abc000000000000000000001/def000000000000000000001'
|
||||||
@@ -27,39 +27,39 @@ describe('GET /<task-id>/<result-id>', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Download CSV" button', function () {
|
it('should display a "Download CSV" button', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=download-csv]');
|
var elem = this.last.dom.querySelectorAll('[data-test=download-csv]');
|
||||||
assert.strictEqual(elem.length, 1);
|
assert.strictEqual(elem.length, 1);
|
||||||
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000001/def000000000000000000001.csv');
|
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000001/def000000000000000000001.csv');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Download JSON" button', function () {
|
it('should display a "Download JSON" button', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=download-json]');
|
var elem = this.last.dom.querySelectorAll('[data-test=download-json]');
|
||||||
assert.strictEqual(elem.length, 1);
|
assert.strictEqual(elem.length, 1);
|
||||||
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000001/def000000000000000000001.json');
|
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000001/def000000000000000000001.json');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a link back to the task', function () {
|
it('should display a link back to the task', function() {
|
||||||
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]')[0]);
|
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]')[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display errors', function () {
|
it('should display errors', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-errors]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-errors]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /errors \( 1 \)/i);
|
assert.match(elem.textContent, /errors \( 1 \)/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display warnings', function () {
|
it('should display warnings', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-warnings]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-warnings]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /warnings \( 2 \)/i);
|
assert.match(elem.textContent, /warnings \( 2 \)/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display notices', function () {
|
it('should display notices', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-notices]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-notices]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /notices \( 3 \)/i);
|
assert.match(elem.textContent, /notices \( 3 \)/i);
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>/delete', function () {
|
describe('GET /<task-id>/delete', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/delete'
|
endpoint: '/abc000000000000000000001/delete'
|
||||||
@@ -27,26 +27,26 @@ describe('GET /<task-id>/delete', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "Delete URL" form', function () {
|
it('should have a "Delete URL" form', function() {
|
||||||
var form = this.last.dom.querySelectorAll('[data-test=delete-url-form]')[0];
|
var form = this.last.dom.querySelectorAll('[data-test=delete-url-form]')[0];
|
||||||
assert.isDefined(form);
|
assert.isDefined(form);
|
||||||
assert.strictEqual(form.getAttribute('action'), '/abc000000000000000000001/delete');
|
assert.strictEqual(form.getAttribute('action'), '/abc000000000000000000001/delete');
|
||||||
assert.strictEqual(form.getAttribute('method'), 'post');
|
assert.strictEqual(form.getAttribute('method'), 'post');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a link back to the task page', function () {
|
it('should display a link back to the task page', function() {
|
||||||
assert.greaterThan(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]').length, 0);
|
assert.greaterThan(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]').length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('POST /<task-id>/delete', function () {
|
describe('POST /<task-id>/delete', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
endpoint: '/abc000000000000000000001/delete'
|
endpoint: '/abc000000000000000000001/delete'
|
||||||
@@ -54,22 +54,22 @@ describe('POST /<task-id>/delete', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should delete the task', function (done) {
|
it('should delete the task', function(done) {
|
||||||
this.webservice.task('abc000000000000000000001').get({}, function (err) {
|
this.webservice.task('abc000000000000000000001').get({}, function(err) {
|
||||||
assert.strictEqual(err.message, 'Error 404');
|
assert.strictEqual(err.message, 'Error 404');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should redirect me to the home page', function () {
|
it('should redirect me to the home page', function() {
|
||||||
assert.strictEqual(this.last.request.uri.pathname, '/');
|
assert.strictEqual(this.last.request.uri.pathname, '/');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a success message', function () {
|
it('should display a success message', function() {
|
||||||
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
||||||
assert.isDefined(alert);
|
assert.isDefined(alert);
|
||||||
assert.match(alert.textContent, /been deleted/i);
|
assert.match(alert.textContent, /been deleted/i);
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>/edit', function () {
|
describe('GET /<task-id>/edit', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/edit'
|
endpoint: '/abc000000000000000000001/edit'
|
||||||
@@ -27,35 +27,35 @@ describe('GET /<task-id>/edit', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have an "Edit URL" form', function () {
|
it('should have an "Edit URL" form', function() {
|
||||||
var form = this.last.dom.querySelectorAll('[data-test=edit-url-form]')[0];
|
var form = this.last.dom.querySelectorAll('[data-test=edit-url-form]')[0];
|
||||||
assert.isDefined(form);
|
assert.isDefined(form);
|
||||||
assert.strictEqual(form.getAttribute('action'), '/abc000000000000000000001/edit');
|
assert.strictEqual(form.getAttribute('action'), '/abc000000000000000000001/edit');
|
||||||
assert.strictEqual(form.getAttribute('method'), 'post');
|
assert.strictEqual(form.getAttribute('method'), 'post');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a link back to the task page', function () {
|
it('should display a link back to the task page', function() {
|
||||||
assert.greaterThan(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]').length, 0);
|
assert.greaterThan(this.last.dom.querySelectorAll('[href="/abc000000000000000000001"]').length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('"Edit URL" form', function () {
|
describe('"Edit URL" form', function() {
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function() {
|
||||||
this.form = this.last.dom.querySelectorAll('[data-test=edit-url-form]')[0];
|
this.form = this.last.dom.querySelectorAll('[data-test=edit-url-form]')[0];
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "name" field', function () {
|
it('should have a "name" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=name]')[0];
|
var field = this.form.querySelectorAll('input[name=name]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), 'NPG Home');
|
assert.strictEqual(field.getAttribute('value'), 'NPG Home');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a disabled "url" field', function () {
|
it('should have a disabled "url" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=url]')[0];
|
var field = this.form.querySelectorAll('input[name=url]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'url');
|
assert.strictEqual(field.getAttribute('type'), 'url');
|
||||||
@@ -63,27 +63,27 @@ describe('GET /<task-id>/edit', function () {
|
|||||||
assert.isDefined(field.getAttribute('disabled'));
|
assert.isDefined(field.getAttribute('disabled'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a disabled "standard" field', function () {
|
it('should have a disabled "standard" field', function() {
|
||||||
var field = this.form.querySelectorAll('select[name=standard]')[0];
|
var field = this.form.querySelectorAll('select[name=standard]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.isDefined(field.getAttribute('disabled'));
|
assert.isDefined(field.getAttribute('disabled'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "username" field', function () {
|
it('should have a "username" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=username]')[0];
|
var field = this.form.querySelectorAll('input[name=username]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), 'user');
|
assert.strictEqual(field.getAttribute('value'), 'user');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have a "password" field', function () {
|
it('should have a "password" field', function() {
|
||||||
var field = this.form.querySelectorAll('input[name=password]')[0];
|
var field = this.form.querySelectorAll('input[name=password]')[0];
|
||||||
assert.isDefined(field);
|
assert.isDefined(field);
|
||||||
assert.strictEqual(field.getAttribute('type'), 'text');
|
assert.strictEqual(field.getAttribute('type'), 'text');
|
||||||
assert.strictEqual(field.getAttribute('value'), 'access');
|
assert.strictEqual(field.getAttribute('value'), 'access');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have "ignore" fields', function () {
|
it('should have "ignore" fields', function() {
|
||||||
var fields = this.form.querySelectorAll('input[name="ignore[]"]');
|
var fields = this.form.querySelectorAll('input[name="ignore[]"]');
|
||||||
assert.isDefined(fields);
|
assert.isDefined(fields);
|
||||||
assert.notStrictEqual(fields.length, 0);
|
assert.notStrictEqual(fields.length, 0);
|
||||||
@@ -93,9 +93,9 @@ describe('GET /<task-id>/edit', function () {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('POST /<task-id>/edit', function () {
|
describe('POST /<task-id>/edit', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
endpoint: '/abc000000000000000000001/edit',
|
endpoint: '/abc000000000000000000001/edit',
|
||||||
@@ -109,12 +109,12 @@ describe('POST /<task-id>/edit', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should edit the task', function (done) {
|
it('should edit the task', function(done) {
|
||||||
this.webservice.task('abc000000000000000000001').get({}, function (err, task) {
|
this.webservice.task('abc000000000000000000001').get({}, function(err, task) {
|
||||||
assert.strictEqual(task.name, 'foo');
|
assert.strictEqual(task.name, 'foo');
|
||||||
assert.strictEqual(task.username, 'newuser');
|
assert.strictEqual(task.username, 'newuser');
|
||||||
assert.strictEqual(task.password, 'secure');
|
assert.strictEqual(task.password, 'secure');
|
||||||
@@ -123,7 +123,7 @@ describe('POST /<task-id>/edit', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a success message', function () {
|
it('should display a success message', function() {
|
||||||
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
||||||
assert.isDefined(alert);
|
assert.isDefined(alert);
|
||||||
assert.match(alert.textContent, /been saved/i);
|
assert.match(alert.textContent, /been saved/i);
|
||||||
|
@@ -17,11 +17,11 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>', function () {
|
describe('GET /<task-id>', function() {
|
||||||
|
|
||||||
describe('when task has results', function () {
|
describe('when task has results', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001'
|
endpoint: '/abc000000000000000000001'
|
||||||
@@ -29,48 +29,48 @@ describe('GET /<task-id>', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display an "Edit" button', function () {
|
it('should display an "Edit" button', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/edit"]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/edit"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Delete" button', function () {
|
it('should display a "Delete" button', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/delete"]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/delete"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Run" button', function () {
|
it('should display a "Run" button', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/run"]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/run"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Download CSV" button for the latest result', function () {
|
it('should display a "Download CSV" button for the latest result', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001.csv"]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001.csv"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Download JSON" button for the latest result', function () {
|
it('should display a "Download JSON" button for the latest result', function() {
|
||||||
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001.json"]').length, 1);
|
assert.strictEqual(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001.json"]').length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display links to all results', function () {
|
it('should display links to all results', function() {
|
||||||
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001"]')[0]);
|
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000001"]')[0]);
|
||||||
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000003"]')[0]);
|
assert.isDefined(this.last.dom.querySelectorAll('[href="/abc000000000000000000001/def000000000000000000003"]')[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display errors', function () {
|
it('should display errors', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-errors]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-errors]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /errors \( 1 \)/i);
|
assert.match(elem.textContent, /errors \( 1 \)/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display warnings', function () {
|
it('should display warnings', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-warnings]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-warnings]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /warnings \( 2 \)/i);
|
assert.match(elem.textContent, /warnings \( 2 \)/i);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display notices', function () {
|
it('should display notices', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=task-notices]')[0];
|
var elem = this.last.dom.querySelectorAll('[data-test=task-notices]')[0];
|
||||||
assert.isDefined(elem);
|
assert.isDefined(elem);
|
||||||
assert.match(elem.textContent, /notices \( 3 \)/i);
|
assert.match(elem.textContent, /notices \( 3 \)/i);
|
||||||
@@ -78,9 +78,9 @@ describe('GET /<task-id>', function () {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when task has no results', function () {
|
describe('when task has no results', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000003'
|
endpoint: '/abc000000000000000000003'
|
||||||
@@ -88,17 +88,17 @@ describe('GET /<task-id>', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a "Run" button', function () {
|
it('should display a "Run" button', function() {
|
||||||
var elem = this.last.dom.querySelectorAll('[data-test=run-task]');
|
var elem = this.last.dom.querySelectorAll('[data-test=run-task]');
|
||||||
assert.strictEqual(elem.length, 1);
|
assert.strictEqual(elem.length, 1);
|
||||||
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000003/run');
|
assert.strictEqual(elem[0].getAttribute('href'), '/abc000000000000000000003/run');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a message indicating that there are no results', function () {
|
it('should display a message indicating that there are no results', function() {
|
||||||
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
||||||
assert.isDefined(alert);
|
assert.isDefined(alert);
|
||||||
assert.match(alert.textContent, /there are no results to show/i);
|
assert.match(alert.textContent, /there are no results to show/i);
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
var assert = require('proclaim');
|
var assert = require('proclaim');
|
||||||
|
|
||||||
describe('GET /<task-id>/run', function () {
|
describe('GET /<task-id>/run', function() {
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function(done) {
|
||||||
var req = {
|
var req = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
endpoint: '/abc000000000000000000001/run'
|
endpoint: '/abc000000000000000000001/run'
|
||||||
@@ -27,15 +27,15 @@ describe('GET /<task-id>/run', function () {
|
|||||||
this.navigate(req, done);
|
this.navigate(req, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a 200 status', function () {
|
it('should send a 200 status', function() {
|
||||||
assert.strictEqual(this.last.status, 200);
|
assert.strictEqual(this.last.status, 200);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should redirect me to the task page', function () {
|
it('should redirect me to the task page', function() {
|
||||||
assert.strictEqual(this.last.request.uri.pathname, '/abc000000000000000000001');
|
assert.strictEqual(this.last.request.uri.pathname, '/abc000000000000000000001');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a success message', function () {
|
it('should display a success message', function() {
|
||||||
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
var alert = this.last.dom.querySelectorAll('[data-test=alert]')[0];
|
||||||
assert.isDefined(alert);
|
assert.isDefined(alert);
|
||||||
assert.match(alert.textContent, /new results are being generated/i);
|
assert.match(alert.textContent, /new results are being generated/i);
|
||||||
|
@@ -22,24 +22,24 @@ var loadFixtures = require('pa11y-webservice/data/fixture/load');
|
|||||||
var request = require('request');
|
var request = require('request');
|
||||||
|
|
||||||
// Run before all tests
|
// Run before all tests
|
||||||
before(function (done) {
|
before(function(done) {
|
||||||
this.baseUrl = 'http://localhost:' + config.port;
|
this.baseUrl = 'http://localhost:' + config.port;
|
||||||
this.last = {};
|
this.last = {};
|
||||||
this.navigate = createNavigator(this.baseUrl, this.last);
|
this.navigate = createNavigator(this.baseUrl, this.last);
|
||||||
this.webservice = createWebserviceClient(config);
|
this.webservice = createWebserviceClient(config);
|
||||||
assertTestAppIsRunning(this.baseUrl, function () {
|
assertTestAppIsRunning(this.baseUrl, function() {
|
||||||
loadFixtures('test', config.webservice, done);
|
loadFixtures('test', config.webservice, done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Run after each test
|
// Run after each test
|
||||||
afterEach(function (done) {
|
afterEach(function(done) {
|
||||||
loadFixtures('test', config.webservice, done);
|
loadFixtures('test', config.webservice, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check that the test application is running, and exit if not
|
// Check that the test application is running, and exit if not
|
||||||
function assertTestAppIsRunning (url, done) {
|
function assertTestAppIsRunning(url, done) {
|
||||||
request(url, function (err) {
|
request(url, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('Error: Test app not started; run with `NODE_ENV=test node index.js`');
|
console.error('Error: Test app not started; run with `NODE_ENV=test node index.js`');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -19,20 +19,20 @@ var moment = require('moment');
|
|||||||
|
|
||||||
module.exports = helper;
|
module.exports = helper;
|
||||||
|
|
||||||
function helper (register) {
|
function helper(register) {
|
||||||
|
|
||||||
// Format a date with Moment
|
// Format a date with Moment
|
||||||
register('date-format', function (context, block) {
|
register('date-format', function(context, block) {
|
||||||
var format = block.hash.format || 'YYYY-MM-DD HH:mm:ss';
|
var format = block.hash.format || 'YYYY-MM-DD HH:mm:ss';
|
||||||
return moment(context).format(format);
|
return moment(context).format(format);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Get a relative date
|
// Get a relative date
|
||||||
register('date-relative', function (context) {
|
register('date-relative', function(context) {
|
||||||
return moment(context).fromNow();
|
return moment(context).fromNow();
|
||||||
});
|
});
|
||||||
|
|
||||||
register('date-timestamp', function (context) {
|
register('date-timestamp', function(context) {
|
||||||
return moment(context).valueOf();
|
return moment(context).valueOf();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
module.exports = helper;
|
module.exports = helper;
|
||||||
|
|
||||||
function helper (register) {
|
function helper(register) {
|
||||||
|
|
||||||
// Convert a string to lower-case
|
// Convert a string to lower-case
|
||||||
register('lowercase', function (context) {
|
register('lowercase', function(context) {
|
||||||
return context.toLowerCase();
|
return context.toLowerCase();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
|
|
||||||
module.exports = helper;
|
module.exports = helper;
|
||||||
|
|
||||||
function helper (register) {
|
function helper(register) {
|
||||||
|
|
||||||
// Simplify url by removing (eg http://, https://, trailing slashes) from url
|
// Simplify url by removing (eg http://, https://, trailing slashes) from url
|
||||||
register('simplify-url', function (context) {
|
register('simplify-url', function(context) {
|
||||||
return context.replace(/^https?:\/\//i, '').replace(/\/$/, '').toLowerCase();
|
return context.replace(/^https?:\/\//i, '').replace(/\/$/, '').toLowerCase();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,21 +20,21 @@ var rules = createStandardDescriptionMap(standardsArray);
|
|||||||
|
|
||||||
module.exports = presentIgnoreRules;
|
module.exports = presentIgnoreRules;
|
||||||
|
|
||||||
function presentIgnoreRules (ignore) {
|
function presentIgnoreRules(ignore) {
|
||||||
return ignore.map(function (name) {
|
return ignore.map(function(name) {
|
||||||
return {
|
return {
|
||||||
name: name,
|
name: name,
|
||||||
description: rules[name]
|
description: rules[name]
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function createStandardDescriptionMap (standards) {
|
function createStandardDescriptionMap(standards) {
|
||||||
var map = {};
|
var map = {};
|
||||||
standards.forEach(function (standard) {
|
standards.forEach(function(standard) {
|
||||||
standard.rules.forEach(function (rule) {
|
standard.rules.forEach(function(rule) {
|
||||||
map[rule.name] = rule.description;
|
map[rule.name] = rule.description;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,13 +20,13 @@ var moment = require('moment');
|
|||||||
|
|
||||||
module.exports = presentResultList;
|
module.exports = presentResultList;
|
||||||
|
|
||||||
function presentResultList (results) {
|
function presentResultList(results) {
|
||||||
var resultsByDay = _.groupBy(results, function (result) {
|
var resultsByDay = _.groupBy(results, function(result) {
|
||||||
return moment(result.date).format('YYYY-MM-DD');
|
return moment(result.date).format('YYYY-MM-DD');
|
||||||
});
|
});
|
||||||
var uniqueDayResults = [];
|
var uniqueDayResults = [];
|
||||||
_.keys(resultsByDay).forEach(function (day) {
|
_.keys(resultsByDay).forEach(function(day) {
|
||||||
uniqueDayResults.push(resultsByDay[day][0]);
|
uniqueDayResults.push(resultsByDay[day][0]);
|
||||||
});
|
});
|
||||||
return uniqueDayResults;
|
return uniqueDayResults;
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
// This file is part of pa11y-dashboard.
|
// This file is part of pa11y-dashboard.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
// pa11y-dashboard is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// pa11y-dashboard is distributed in the hope that it will be useful,
|
// pa11y-dashboard is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
// along with pa11y-dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,33 +20,33 @@ var presentIgnoreRules = require('./ignore');
|
|||||||
|
|
||||||
module.exports = presentResult;
|
module.exports = presentResult;
|
||||||
|
|
||||||
function presentResult (result) {
|
function presentResult(result) {
|
||||||
|
|
||||||
// Add additional info
|
// Add additional info
|
||||||
result.href = '/' + result.task + '/' + result.id;
|
result.href = '/' + result.task + '/' + result.id;
|
||||||
result.hrefCsv = '/' + result.task + '/' + result.id + '.csv';
|
result.hrefCsv = '/' + result.task + '/' + result.id + '.csv';
|
||||||
result.hrefJson = '/' + result.task + '/' + result.id + '.json';
|
result.hrefJson = '/' + result.task + '/' + result.id + '.json';
|
||||||
|
|
||||||
// Parse date
|
// Parse date
|
||||||
result.date = new Date(result.date);
|
result.date = new Date(result.date);
|
||||||
|
|
||||||
// Enhance the ignored rules
|
// Enhance the ignored rules
|
||||||
result.ignore = presentIgnoreRules(result.ignore);
|
result.ignore = presentIgnoreRules(result.ignore);
|
||||||
|
|
||||||
// Split out message types
|
// Split out message types
|
||||||
if (result.results) {
|
if (result.results) {
|
||||||
var groupedByType = _.groupBy(result.results, 'type');
|
var groupedByType = _.groupBy(result.results, 'type');
|
||||||
['error', 'warning', 'notice'].forEach(function (type) {
|
['error', 'warning', 'notice'].forEach(function(type) {
|
||||||
var pluralType = type + 's';
|
var pluralType = type + 's';
|
||||||
var results = groupedByType[type] || [];
|
var results = groupedByType[type] || [];
|
||||||
var groupedByCode = _.groupBy(results, 'code');
|
var groupedByCode = _.groupBy(results, 'code');
|
||||||
result[pluralType] = _.keys(groupedByCode).map(function (group) {
|
result[pluralType] = _.keys(groupedByCode).map(function(group) {
|
||||||
var firstMessage = groupedByCode[group][0];
|
var firstMessage = groupedByCode[group][0];
|
||||||
firstMessage.count = groupedByCode[group].length;
|
firstMessage.count = groupedByCode[group].length;
|
||||||
return firstMessage;
|
return firstMessage;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -20,25 +20,25 @@ var presentResult = require('./result');
|
|||||||
|
|
||||||
module.exports = presentTask;
|
module.exports = presentTask;
|
||||||
|
|
||||||
function presentTask (task) {
|
function presentTask(task) {
|
||||||
|
|
||||||
// Add additional info
|
// Add additional info
|
||||||
task.href = '/' + task.id;
|
task.href = '/' + task.id;
|
||||||
task.hrefDelete = '/' + task.id + '/delete';
|
task.hrefDelete = '/' + task.id + '/delete';
|
||||||
task.hrefRun = '/' + task.id + '/run';
|
task.hrefRun = '/' + task.id + '/run';
|
||||||
task.hrefJson = '/' + task.id + '.json';
|
task.hrefJson = '/' + task.id + '.json';
|
||||||
task.hrefEdit = '/' + task.id + '/edit';
|
task.hrefEdit = '/' + task.id + '/edit';
|
||||||
task.hrefIgnore = '/' + task.id + '/ignore';
|
task.hrefIgnore = '/' + task.id + '/ignore';
|
||||||
task.hrefUnignore = '/' + task.id + '/unignore';
|
task.hrefUnignore = '/' + task.id + '/unignore';
|
||||||
|
|
||||||
// Enhance the ignored rules
|
// Enhance the ignored rules
|
||||||
task.ignore = presentIgnoreRules(task.ignore);
|
task.ignore = presentIgnoreRules(task.ignore);
|
||||||
|
|
||||||
// Present the last result if present
|
// Present the last result if present
|
||||||
if (task.last_result) {
|
if (task.last_result) {
|
||||||
task.lastResult = presentResult(task.last_result);
|
task.lastResult = presentResult(task.last_result);
|
||||||
delete task.last_result;
|
delete task.last_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return task;
|
return task;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user