From 6c9ee2d722d8f64916b5f5a9f0a71794f2db8fa4 Mon Sep 17 00:00:00 2001 From: James Seppi Date: Thu, 29 Dec 2016 13:51:32 -0600 Subject: [PATCH] test that dependencies actually exist (#136) --- spec/backend/checklistSpec.js | 63 ++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/spec/backend/checklistSpec.js b/spec/backend/checklistSpec.js index a264521..f21a97e 100644 --- a/spec/backend/checklistSpec.js +++ b/spec/backend/checklistSpec.js @@ -4,21 +4,54 @@ var path = require('path'); var checklistsDir = path.join('checklists'); -describe('checklists are valid', function () { - it('all have a "dayZero" item', function (done) { - fs.readdir(checklistsDir, function (err, files) { - files.forEach(function (file) { - var chklist = JSON.parse( - fs.readFileSync(path.join(checklistsDir, file), 'utf8') - ); - expect(chklist.checklistName).toBeDefined(); - expect(chklist.checklistDescription).toBeDefined(); - expect(chklist.items).toBeDefined(); - expect(chklist.items instanceof Object).toBeTruthy(); - expect(chklist.items.dayZero).toBeDefined(); - expect(chklist.items.dayZero.daysToComplete).toBe(0); - expect(chklist.items.dayZero.dependsOn instanceof Array).toBeTruthy(); - expect(chklist.items.dayZero.dependsOn.length).toBe(0); +function forEachChecklist(fn) { + fs.readdir(checklistsDir, function (err, files) { + files.forEach(function (file) { + var chklist = JSON.parse( + fs.readFileSync(path.join(checklistsDir, file), 'utf8') + ); + fn(chklist, file); + }); + }); +} + + +forEachChecklist(function (chklist, file) { + describe('Valid ' + file, function () { + it('has a "dayZero" item', function (done) { + expect(chklist.checklistName).toBeDefined(); + expect(chklist.checklistDescription).toBeDefined(); + expect(chklist.items).toBeDefined(); + expect(chklist.items instanceof Object).toBeTruthy(); + expect(chklist.items.dayZero).toBeDefined(); + expect(chklist.items.dayZero.daysToComplete).toBe(0); + expect(chklist.items.dayZero.dependsOn instanceof Array).toBeTruthy(); + expect(chklist.items.dayZero.dependsOn.length).toBe(0); + done(); + }); + + it('has dependencies that exist', function (done) { + var itemNames = Object.keys(chklist.items); + itemNames.forEach(function (name) { + var item = chklist.items[name]; + if (item.prompt) { + item.possibleResponses.forEach(function (response) { + var responseItemNames = Object.keys(response.items); + responseItemNames.forEach(function (responseItemName) { + var responseItem = response.items[responseItemName]; + responseItem.dependsOn.forEach(function (dependency) { + expect([].concat(itemNames).concat(responseItemNames)) + .toContain(dependency); + }); + }); + }); + } + if (item.dependsOn) { + expect(item.dependsOn instanceof Array).toBeTruthy(); + item.dependsOn.forEach(function (dependency) { + expect(itemNames).toContain(dependency); + }); + } }); done(); });