diff --git a/index.js b/index.js
index 67fc2c7..f733c62 100644
--- a/index.js
+++ b/index.js
@@ -28,6 +28,10 @@ app.use(bodyParser.urlencoded({ extended: true }));
// enable the Twig template engine
app.set('view engine', 'twig');
+app.set('twig options', {
+ allowAsync: true,
+ strict_variables: false
+});
// enable serving static files
app.use(express.static('public'));
diff --git a/src/models/index.js b/src/models/index.js
index 10d384d..0a8f232 100644
--- a/src/models/index.js
+++ b/src/models/index.js
@@ -5,8 +5,16 @@ const sequelize = new Sequelize({
storage: 'data/leviathan.db'
});
-const Project = require('./project')(sequelize);
const Hardware = require('./hardware')(sequelize);
const Benchmark = require('./benchmark')(sequelize);
+const Test = require('./test')(sequelize);
+
+// Hardware/Test one-to-many
+Hardware.hasMany(Test);
+Test.belongsTo(Hardware);
+
+// Benchmark/Test many-to-many
+Benchmark.belongsToMany(Test, { through: 'tests_benchmarks' });
+Test.belongsToMany(Benchmark, { through: 'tests_benchmarks' });
module.exports = sequelize;
diff --git a/src/models/project.js b/src/models/project.js
deleted file mode 100644
index 049970b..0000000
--- a/src/models/project.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const { Sequelize } = require("sequelize");
-
-module.exports = (sequelize) => {
- const Project = sequelize.define('Project', {
- title: {
- type: Sequelize.STRING,
- null: false
- },
- description: {
- type: Sequelize.TEXT,
- },
- },
- {
- tableName: 'projects'
- });
- return Project;
-};
diff --git a/src/models/test.js b/src/models/test.js
new file mode 100644
index 0000000..79077d3
--- /dev/null
+++ b/src/models/test.js
@@ -0,0 +1,18 @@
+const { Sequelize } = require("sequelize");
+
+module.exports = (sequelize) => {
+ const Test = sequelize.define('Test', {
+ dateTag: {
+ type: Sequelize.STRING,
+ null: false,
+ },
+ description: {
+ type: Sequelize.STRING,
+ null: true,
+ }
+ },
+ {
+ tableName: 'tests'
+ });
+ return Test;
+};
diff --git a/src/routes/index.js b/src/routes/index.js
index 3073b6b..0a9294e 100644
--- a/src/routes/index.js
+++ b/src/routes/index.js
@@ -1,6 +1,6 @@
// load routes
const topRoutes = require('./toplevel');
-const projectRoutes = require('./project');
+const testRoutes = require('./test');
const hardwareRoutes = require('./hardware');
const benchmarkRoutes = require('./benchmark');
@@ -9,13 +9,6 @@ module.exports = function(app) {
// top-level routes
app.get('/', topRoutes.getIndex);
- // project routes
- app.get('/project', projectRoutes.getIndex);
- app.get('/project/list', projectRoutes.getList);
- app.get('/project/add', projectRoutes.getAdd);
- app.post('/project/add', projectRoutes.postAdd);
- app.get('/project/:project_id', projectRoutes.getView);
-
// hardware routes
app.get('/hardware', hardwareRoutes.getIndex);
app.get('/hardware/list', hardwareRoutes.getList);
@@ -30,4 +23,11 @@ module.exports = function(app) {
app.post('/benchmark/add', benchmarkRoutes.postAdd);
app.get('/benchmark/:benchmark_id', benchmarkRoutes.getView);
+ // test routes
+ app.get('/test', testRoutes.getIndex);
+ app.get('/test/list', testRoutes.getList);
+ app.get('/test/add', testRoutes.getAdd);
+ app.post('/test/add', testRoutes.postAdd);
+ app.get('/test/:test_id', testRoutes.getView);
+
};
diff --git a/src/routes/project.js b/src/routes/project.js
deleted file mode 100644
index 3a00e36..0000000
--- a/src/routes/project.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const Project = require('../models').models.Project;
-
-// GET /project - redirects to project list
-exports.getIndex = async function(req, res) {
- res.redirect('/project/list');
-};
-
-// GET /project/list - list of projects
-exports.getList = async function(req, res) {
- var projects = await Project.findAll();
- res.render('project/list', {
- projects: projects
- });
-};
-
-// GET /project/:project_id - view information about a project
-exports.getView = async function(req, res) {
- var project = await Project.findAll({
- where: {
- id: req.params.project_id
- }
- });
- res.render('project/view', {
- project: project[0]
- });
-};
-
-// GET /project/add - add a new project
-exports.getAdd = async function(req, res) {
- res.render('project/add');
-};
-
-// POST /project/add - add the project to the database
-exports.postAdd = async function(req, res) {
- var project = await Project.create({
- title: req.body.project_title,
- description: req.body.project_description
- });
-
- res.redirect('/project');
-};
diff --git a/src/routes/test.js b/src/routes/test.js
new file mode 100644
index 0000000..b5b1f56
--- /dev/null
+++ b/src/routes/test.js
@@ -0,0 +1,59 @@
+const Test = require('../models').models.Test;
+const Hardware = require('../models').models.Hardware;
+const Benchmark = require('../models').models.Benchmark;
+
+// GET /test - redirects to test list
+exports.getIndex = async function(req, res) {
+ res.redirect('/test/list');
+};
+
+// GET /test/list - list of tests
+exports.getList = async function(req, res) {
+ var tests = await Test.findAll();
+ res.render('test/list', {
+ tests: tests
+ });
+};
+
+// GET /test/:test_id - view information about a test
+exports.getView = async function(req, res) {
+ var test = await Test.findAll({
+ where: {
+ id: req.params.test_id
+ }
+ });
+ res.render('test/view', {
+ test: test[0]
+ });
+};
+
+// GET /test/add - add a new test
+exports.getAdd = async function(req, res) {
+ var hardware = await Hardware.findAll();
+ var benchmarks = await Benchmark.findAll();
+
+ res.render('test/add', {
+ hardware: hardware,
+ benchmarks: benchmarks
+ });
+};
+
+// POST /test/add - add the test to the database
+exports.postAdd = async function(req, res) {
+ var test = await Test.create({
+ dateTag: req.body.test_date_tag,
+ description: req.body.test_description,
+ });
+
+ // add link to hardware
+ let hardware = await Hardware.findByPk(req.body.test_hardware);
+ test.setHardware(hardware);
+
+ // add links to benchmarks
+ for (let b = 0; b < req.body.test_benchmarks.length; b++) {
+ let benchmark = await Benchmark.findByPk(req.body.test_benchmarks[b]);
+ test.addBenchmark(benchmark);
+ }
+
+ res.redirect('/test/' + test.id);
+};
diff --git a/src/routes/toplevel.js b/src/routes/toplevel.js
index 28fa14a..6869f9f 100644
--- a/src/routes/toplevel.js
+++ b/src/routes/toplevel.js
@@ -1,9 +1,9 @@
-const Project = require('../models').models.Project;
+const Test = require('../models').models.Test;
// GET / - primary app dashboard
exports.getIndex = async function(req, res) {
- var projects = await Project.findAll();
+ var tests = await Test.findAll();
res.render('index/dashboard', {
- projects: projects
+ tests: tests
});
};
diff --git a/views/index/dashboard.twig b/views/index/dashboard.twig
index 04f73d0..daafed2 100644
--- a/views/index/dashboard.twig
+++ b/views/index/dashboard.twig
@@ -4,7 +4,7 @@
{% block content %}
-
Recently updated projects:
+
Recently updated tests:
@@ -13,9 +13,9 @@
- {% for p in projects %}
+ {% for p in tests %}
- {{ p.title }} |
+ {{ p.date_tag }} |
{{ p.updatedAt | date('m/d/Y g:ia') }} |
{% endfor %}
diff --git a/views/partials/navbar.twig b/views/partials/navbar.twig
index 999ca9d..65cc48d 100644
--- a/views/partials/navbar.twig
+++ b/views/partials/navbar.twig
@@ -3,9 +3,9 @@
Leviathan
-
\ No newline at end of file
+
diff --git a/views/project/add.twig b/views/project/add.twig
deleted file mode 100644
index bafc183..0000000
--- a/views/project/add.twig
+++ /dev/null
@@ -1,27 +0,0 @@
-{% extends 'layouts/default.twig' %}
-
-{% block title %}Add a Project{% endblock %}
-
-{% block content %}
-
-{% endblock %}
diff --git a/views/project/list.twig b/views/project/list.twig
deleted file mode 100644
index b2edda9..0000000
--- a/views/project/list.twig
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends 'layouts/default.twig' %}
-
-{% block title %}List of Projects{% endblock %}
-
-{% block content %}
-
-
Projects
-
Add a project
-
-
-
-
- Title |
- Created at |
- Last updated |
-
-
-
- {% for p in projects %}
-
- {{ p.title }} |
- {{ p.createdAt | date('m/d/Y g:ia') }} |
- {{ p.updatedAt | date('m/d/Y g:ia') }} |
-
- {% endfor %}
-
-
-
-{% endblock %}
diff --git a/views/project/view.twig b/views/project/view.twig
deleted file mode 100644
index 51a30dd..0000000
--- a/views/project/view.twig
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends 'layouts/default.twig' %}
-
-{% block title %}{{ project.title }}{% endblock %}
-
-{% block content %}
-
-
{{ project.title }}
-
-
{{ project.description }}
-
-
-
-
Back
-
-{% endblock %}
diff --git a/views/test/add.twig b/views/test/add.twig
new file mode 100644
index 0000000..2f70d25
--- /dev/null
+++ b/views/test/add.twig
@@ -0,0 +1,53 @@
+{% extends 'layouts/default.twig' %}
+
+{% block title %}Add a Test{% endblock %}
+
+{% block content %}
+
+
Add a test
+
+
+
+{% endblock %}
diff --git a/views/test/list.twig b/views/test/list.twig
new file mode 100644
index 0000000..cdeeb45
--- /dev/null
+++ b/views/test/list.twig
@@ -0,0 +1,29 @@
+{% extends 'layouts/default.twig' %}
+
+{% block title %}List of Tests{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/views/test/view.twig b/views/test/view.twig
new file mode 100644
index 0000000..ab53ab3
--- /dev/null
+++ b/views/test/view.twig
@@ -0,0 +1,21 @@
+{% extends 'layouts/default.twig' %}
+
+{% block title %}Test: {{ test.getHardware().name }} - {{ test.dateTag }}{% endblock %}
+
+{% block content %}
+
+
Test: {{ test.getHardware().name }} - {{ test.dateTag }}
+
+
+
+ {% for b in test.getBenchmarks() %}
+ - {{ b.name }}
+ {% endfor %}
+
+
+
+
+
+
Back
+
+{% endblock %}