diff --git a/browsertest.js b/browsertest.js index 3500adc..39d0842 100644 --- a/browsertest.js +++ b/browsertest.js @@ -24,9 +24,11 @@ const port = Array app.set("port", port); app.use(express.static(__dirname)); -app.use(express.static(path.join(__dirname, 'assets'))); -app.use(express.static(path.join(__dirname, 'static'))); +app.use(express.static(path.join(__dirname, 'images'))); +app.use(express.static(path.join(__dirname, 'fonts'))); app.use(express.static(path.join(__dirname, 'views'))); +app.use(express.static(path.join(__dirname, 'scripts'))); +app.use(express.static(path.join(__dirname, 'stylesheets'))); app.use(express.static(path.join(__dirname, 'spec'))); app.get("/tests",function(request, response){ @@ -65,4 +67,4 @@ if(openBrowser) { } else { open("http://localhost:" + port + "/tests"); } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 9d4a092..7700468 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "start": "node server.js", - "test": "jasmine && node browsertest.js openBrowser socket", - "test:unit": "jasmine", - "test:e2e": "node browsertest.js" + "test": "jasmine", + "test:all": "jasmine && node browsertest.js openBrowser socket" }, "author": "", "license": "ISC", diff --git a/server.js b/server.js index 74e173c..8dd2756 100644 --- a/server.js +++ b/server.js @@ -5,7 +5,7 @@ const socketIO = require('socket.io'); const app = express(); const server = http.Server(app); const io = socketIO(server); -const ServerHelper = require('./server-helper'); +const ServerHelper = require('server-helper.js'); const secure = require('express-force-https'); app.use(secure); diff --git a/spec/SpecHelper.js b/spec/SpecHelper.js deleted file mode 100644 index bc046a8..0000000 --- a/spec/SpecHelper.js +++ /dev/null @@ -1,93 +0,0 @@ -let socket; - -// Jasmine lifecycle hooks - -beforeEach(() => { - cleanupPlayground(); - // jasmine.addMatchers({ /* provide matcher function here if you want to, I guess */}); -}); - -beforeAll(() => { - if(window.location.search.includes("socket=true")) { - socket = io(); - } -}); - -afterEach(() => { - /* - if(socket !== undefined) { - socket.emit("test result",parseTestResults()); - } - - How to get only the newest result? No clue right now. - - */ -}); - -afterAll(() => { - resportResultsOnSocket(); -}); - - -// Utility functions - -const parseTestResults = function() { - const resultsElement = document.querySelector("span.jasmine-overall-result.jasmine-bar"); - - if(resultsElement !== null) { - const results = /.*(\d+) specs.*(\d+) failure.*(\d+).*/.exec(resultsElement.textContent); - const total = parseInt(results[1]); - const failures = parseInt(results[2]); - const pending = parseInt(results[3]); - return Promise.resolve({ - "totalCount": total, - "failureCount": failures, - "pendingCount": pending - }); - } else { - let maxRetries = 60; - return new Promise((resolve, reject) => { - const resultsInterval = setInterval(() => { - maxRetries--; - const resultsElem = document.querySelector("span.jasmine-overall-result.jasmine-bar"); - - if (maxRetries === 0) { - reject("Required results element not found."); - } else { - if (resultsElem !== null) { - const results = /.*(\d+) spec.*(\d+) failure.*(\d+).*/.exec(resultsElem.textContent); - const pendingResults = /.*(\d+) pending.*/.exec(resultsElem.textContent); - const total = parseInt(results[1]); - const failures = parseInt(results[2]); - const pending = pendingResults ? parseInt(pendingResults[1]) : 0; - clearInterval(resultsInterval); - resolve({ - "totalCount": total, - "failureCount": failures, - "pendingCount": pending - }); - } - } - }, 500); - }); - } -}; - -export const addStubElement = function(element) { - document.getElementById("playground").appendChild(element); -}; - -export const cleanupPlayground = function() { - document.getElementById("playground").innerHTML = ""; -}; - -export const resportResultsOnSocket = function() { - - if(socket === undefined) { - socket = io(); - } - - parseTestResults().then((results) => { - socket.emit("all-results",results); - }).catch((e) => {console.error(e);}); -}; diff --git a/spec/e2e/SetupSpec.js b/spec/e2e/SetupSpec.js deleted file mode 100644 index 3ad16b2..0000000 --- a/spec/e2e/SetupSpec.js +++ /dev/null @@ -1,37 +0,0 @@ -import { addStubElement } from "../SpecHelper.js" -import { setup } from "../../static/setup.js" - -describe("Home page", function() { - - beforeEach(function() { - - }); - - it("should render the set of standard and custom roles", function() { - - // arrange - let goodCards = document.createElement("div"); - goodCards.setAttribute("id", "card-select-good"); - - let evilCards = document.createElement("div"); - evilCards.setAttribute("id", "card-select-evil"); - - let roles = document.createElement("div"); - roles.setAttribute("id", "roles"); - - let customRoles = document.createElement("div"); - customRoles.setAttribute("id", "custom-roles"); - - addStubElement(goodCards); - addStubElement(evilCards); - addStubElement(roles); - addStubElement(customRoles); - - // act - setup.renderAvailableCards(false); - - //assert - expect(document.getElementById("card-0")).toBeDefined(); - }); - -}); diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json index 10716bd..f004bf2 100644 --- a/spec/support/jasmine.json +++ b/spec/support/jasmine.json @@ -1,5 +1,5 @@ { - "spec_dir": "spec/unit/", + "spec_dir": "spec/unit", "spec_files": [ "**/*[sS]pec.js" ], @@ -8,4 +8,4 @@ ], "stopSpecOnExpectationFailure": false, "random": true -} +} \ No newline at end of file diff --git a/static/modules/logger.js b/static/modules/logger.js deleted file mode 100644 index c49a1f4..0000000 --- a/static/modules/logger.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = function(debugMode = false){ - return { - log(message = "") { - const now = new Date(); - console.log('LOG ', now.toGMTString(), ': ', message); - }, - - debug(message = "") { - if (!debugMode) return; - const now = new Date(); - console.debug('DEBUG ', now.toGMTString(), ': ', message); - }, - - error(message = "") { - if (!debugMode) return; - const now = new Date(); - console.error('ERROR ', now.toGMTString(), ': ', message); - } - }; -}; diff --git a/static/setup.js b/static/setup.js index e6df4ed..7dd1766 100644 --- a/static/setup.js +++ b/static/setup.js @@ -21,64 +21,57 @@ const fullDeck = []; let gameSize = 0; let atLeastOnePlayer = false; -export class Setup { - constructor() { - // render all of the available cards to the user - window.onload = function() { - // register event listeners on buttons - document.getElementById("reset-btn").addEventListener("click", resetCardQuantities); - document.getElementById("create-btn").addEventListener("click", createGame); - document.getElementById("role-view-changer-gallery").addEventListener("click", function() { toggleViewChanger(false) }); - document.getElementById("role-view-changer-list").addEventListener("click", function() { toggleViewChanger(true) }); - document.getElementById("role-btn").addEventListener("click", function() { displayModal("role-modal", undefined) }); - document.getElementById("edit-role-btn").addEventListener("click", function() { displayModal("edit-custom-roles-modal", undefined) }); - document.getElementById("custom-role-form").addEventListener("submit", function(e) { - addCustomCardToRoles(e); - }); - Array.from(document.getElementsByClassName("close")).forEach(function(element) { - element.addEventListener('click', closeModal); - }); +// register event listeners on buttons +document.getElementById("reset-btn").addEventListener("click", resetCardQuantities); +document.getElementById("create-btn").addEventListener("click", createGame); +document.getElementById("role-view-changer-gallery").addEventListener("click", function() { toggleViewChanger(false) }); +document.getElementById("role-view-changer-list").addEventListener("click", function() { toggleViewChanger(true) }); +document.getElementById("role-btn").addEventListener("click", function() { displayModal("role-modal", undefined) }); +document.getElementById("edit-role-btn").addEventListener("click", function() { displayModal("edit-custom-roles-modal", undefined) }); +document.getElementById("custom-role-form").addEventListener("submit", function(e) { + addCustomCardToRoles(e); +}); +Array.from(document.getElementsByClassName("close")).forEach(function(element) { + element.addEventListener('click', closeModal); +}); - readInUserCustomRoles(); - setup.renderAvailableCards(false); - }; - } -} - -export const setup = { - - renderAvailableCards(isCondensed) { - cards.sort(function(a, b) { - return a.role.toUpperCase().localeCompare(b.role); - }); - document.getElementById("card-select-good").innerHTML = ""; - document.getElementById("card-select-evil").innerHTML = ""; - document.getElementById("roles").innerHTML = ""; - document.getElementById("custom-roles").innerHTML = ""; - - for (let i = 0; i < cards.length; i ++) { - cards[i].team === "good" - ? renderGoodRole(cards[i], i, isCondensed) - : renderEvilRole(cards[i], i, isCondensed); - } - - if (document.getElementById("custom-roles").getElementsByClassName("custom-role-edit").length === 0) { - document.getElementById("custom-roles").innerHTML = "