diff --git a/CHANGELOG.md b/CHANGELOG.md index c7fea933..92f80d7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Replace HTML tables with markdown tables in README files. - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION` and `UPDATE_NOTIFICATION_MODULE` to Finnish translations. - Run `npm test` on Travis automatically +- Show the splash screen image even when is reboot or halted. +- Added some missing translaton strings in the sv.json file. ### Added - Add loaded function to modules, providing an async callback. @@ -30,6 +32,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Enable ability to set configuration file by the enviroment variable called MM_CONFIG_FILE. - Option to give each calendar a different color - Option for colored min-temp and max-temp +- Add test e2e helloworld +- Add test e2e enviroment ### Fixed - Update .gitignore to not ignore default modules folder. @@ -38,6 +42,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fix an issue where the analog clock looked scrambled. ([#611](https://github.com/MichMich/MagicMirror/issues/611)) - If units is set to imperial, the showRainAmount option of weatherforecast will show the correct unit. - Module currentWeather: check if temperature received from api is defined. +- Fix an issue with module hidden status changing to `true` although lock string prevented showing it ## [2.1.0] - 2016-12-31 diff --git a/index.html b/index.html index 86a69a4a..606f5aac 100644 --- a/index.html +++ b/index.html @@ -33,7 +33,7 @@
- + diff --git a/js/app.js b/js/app.js index 9f992b29..6466fe3f 100644 --- a/js/app.js +++ b/js/app.js @@ -49,7 +49,7 @@ var App = function() { // For this check proposed to TestSuite // https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8 var configFilename = path.resolve(global.root_path + "/config/config.js"); - if (typeof(global.configuration_file) === "undefined" ) { + if (typeof(global.configuration_file) !== "undefined") { configFilename = path.resolve(global.configuration_file); } diff --git a/js/main.js b/js/main.js index 325a7efe..fde5564d 100644 --- a/js/main.js +++ b/js/main.js @@ -232,6 +232,8 @@ var MM = (function() { return; } + module.hidden = false; + // If forced show, clean current lockstrings. if (module.lockStrings.length !== 0 && options.force === true) { Log.log("Force show of module: " + module.name); @@ -504,7 +506,7 @@ var MM = (function() { * argument options object - Optional settings for the hide method. */ showModule: function(module, speed, callback, options) { - module.hidden = false; + // do not change module.hidden yet, only if we really show it later showModule(module, speed, callback, options); } }; diff --git a/js/server.js b/js/server.js index f1de2420..e7050021 100644 --- a/js/server.js +++ b/js/server.js @@ -37,6 +37,7 @@ var Server = function(config, callback) { app.use("/modules", express.static(path.resolve(global.root_path + "/modules"))); app.use("/vendor", express.static(path.resolve(global.root_path + "/vendor"))); app.use("/translations", express.static(path.resolve(global.root_path + "/translations"))); + app.use("/tests/confs", express.static(path.resolve(global.root_path + "/tests/confs"))); app.get("/version", function(req,res) { res.send(global.version); @@ -46,6 +47,12 @@ var Server = function(config, callback) { var html = fs.readFileSync(path.resolve(global.root_path + "/index.html"), {encoding: "utf8"}); html = html.replace("#VERSION#", global.version); + configFile = "config/config.js"; + if (typeof(global.configuration_file) !== "undefined") { + configFile = global.configuration_file; + } + html = html.replace("#CONFIG_FILE#", configFile); + res.send(html); }); diff --git a/package.json b/package.json index 9d94a012..92202936 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha tests --recursive" + "test": "./node_modules/mocha/bin/mocha $(find tests -path '*js*' ! -ipath '*e2e*')", + "test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive" }, "repository": { "type": "git", @@ -36,6 +37,7 @@ "grunt-stylelint": "latest", "grunt-yamllint": "latest", "mocha": "^3.2.0", + "spectron": "^3.4.1", "stylelint-config-standard": "latest", "time-grunt": "latest" }, diff --git a/splashscreen/MagicMirror.script b/splashscreen/MagicMirror.script index 9b614389..6e2f5643 100644 --- a/splashscreen/MagicMirror.script +++ b/splashscreen/MagicMirror.script @@ -1,7 +1,15 @@ screen_width = Window.GetWidth(); screen_height = Window.GetHeight(); -theme_image = Image("splash.png"); +if (Plymouth.GetMode() != "shutdown") +{ + theme_image = Image("splash.png"); +} +else +{ + theme_image = Image("splash_halt.png"); +} + image_width = theme_image.GetWidth(); image_height = theme_image.GetHeight(); @@ -30,11 +38,8 @@ else image_y = (screen_height - image_height) / 2; } -if (Plymouth.GetMode() != "shutdown") -{ - sprite = Sprite (resized_image); - sprite.SetPosition (image_x, image_y, -100); -} +sprite = Sprite (resized_image); +sprite.SetPosition (image_x, image_y, -100); message_sprite = Sprite(); message_sprite.SetPosition(screen_width * 0.1, screen_height * 0.9, 10000); diff --git a/splashscreen/splash_halt.png b/splashscreen/splash_halt.png new file mode 100644 index 00000000..dcf9d8be Binary files /dev/null and b/splashscreen/splash_halt.png differ diff --git a/tests/confs/env.js b/tests/confs/env.js new file mode 100644 index 00000000..252934d7 --- /dev/null +++ b/tests/confs/env.js @@ -0,0 +1,25 @@ +/* Magic Mirror Test config sample enviroment + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/confs/helloworld.js b/tests/confs/helloworld.js new file mode 100644 index 00000000..6b617cf2 --- /dev/null +++ b/tests/confs/helloworld.js @@ -0,0 +1,32 @@ +/* Magic Mirror Test config sample module hello world + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ + +var config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + }, + }, + + modules: [ + { + module: "helloworld", + position: "bottom_bar", + config: { + text: "Test HelloWorld Module" + } + } + ] +}; + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") {module.exports = config;} diff --git a/tests/e2e/env.js b/tests/e2e/env.js new file mode 100644 index 00000000..41386499 --- /dev/null +++ b/tests/e2e/env.js @@ -0,0 +1,49 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +// Set config sample for use in test +process.env.MM_CONFIG_FILE = "tests/confs/env.js"; + +var electronPath = path.join(__dirname, "../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Test enviroment app electron", function () { + this.timeout(10000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + + it("open a window app and test if is open", function () { + return app.client.waitUntilWindowLoaded() + .getWindowCount().should.eventually.equal(1); + }); + + it("tests the title", function () { + return app.client.waitUntilWindowLoaded() + .getTitle().should.eventually.equal("Magic Mirror"); + }); + +}); diff --git a/tests/e2e/modules/helloworld.js b/tests/e2e/modules/helloworld.js new file mode 100644 index 00000000..ebf8a8d1 --- /dev/null +++ b/tests/e2e/modules/helloworld.js @@ -0,0 +1,42 @@ +const Application = require("spectron").Application; +const path = require("path"); +const chai = require("chai"); +const chaiAsPromised = require("chai-as-promised"); + +// Set config sample for use in test +process.env.MM_CONFIG_FILE = "tests/confs/helloworld.js"; + +var electronPath = path.join(__dirname, "../../../", "node_modules", ".bin", "electron"); + +if (process.platform === "win32") { + electronPath += ".cmd"; +} + +var appPath = path.join(__dirname, "../../../js/electron.js"); + +var app = new Application({ + path: electronPath, + args: [appPath] +}); + +global.before(function () { + chai.should(); + chai.use(chaiAsPromised); +}); + +describe("Test helloworld module", function () { + this.timeout(10000); + + beforeEach(function (done) { + app.start().then(function() { done(); } ); + }); + + afterEach(function (done) { + app.stop().then(function() { done(); }); + }); + + it("Test message helloworld module", function () { + return app.client.waitUntilWindowLoaded() + .getText(".helloworld").should.eventually.equal("Test HelloWorld Module"); + }); +}); diff --git a/translations/sv.json b/translations/sv.json index 9643a07b..8a1440f0 100644 --- a/translations/sv.json +++ b/translations/sv.json @@ -5,6 +5,7 @@ /* CALENDAR */ "TODAY": "Idag", "TOMORROW": "Imorgon", + "DAYAFTERTOMORROW": "Iövermorgon", "RUNNING": "Slutar", "EMPTY": "Inga kommande händelser.", @@ -24,5 +25,10 @@ "W": "V", "WNW": "VNV", "NW": "NV", - "NNW": "NNV" + "NNW": "NNV", + + /* UPDATE INFO */ + "UPDATE_NOTIFICATION": "MagicMirror² uppdatering finns tillgänglig.", + "UPDATE_NOTIFICATION_MODULE": "Uppdatering finns tillgänglig av MODULE_NAME modulen.", + "UPDATE_INFO": "Denna installation ligger COMMIT_COUNT steg bakom BRANCH_NAME grenen." }