Skip to content

Commit

Permalink
Merge pull request MagicMirrorOrg#674 from morozgrafix/test_branch
Browse files Browse the repository at this point in the history
Restructured Test Suite
  • Loading branch information
MichMich authored Jan 31, 2017
2 parents 049d249 + fc2a554 commit b02920c
Show file tree
Hide file tree
Showing 13 changed files with 217 additions and 15 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Show the splash screen image even when is reboot or halted.
- Added some missing translaton strings in the sv.json file.
- Run task jsonlint to check translation files.
- Restructured Test Suite

### Added
- Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673))
Expand All @@ -39,6 +40,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Add test e2e helloworld
- Add test e2e enviroment
- Add `chai-as-promised` npm module to devDependencies
- Basic set of tests for clock module

### Fixed
- Update .gitignore to not ignore default modules folder.
Expand Down
2 changes: 1 addition & 1 deletion js/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +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.use("/tests/configs", express.static(path.resolve(global.root_path + "/tests/configs")));

app.get("/version", function(req,res) {
res.send(global.version);
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"scripts": {
"start": "sh run-start.sh",
"postinstall": "sh installers/postinstall/postinstall.sh",
"test": "./node_modules/mocha/bin/mocha $(find tests -path '*js*' ! -ipath '*e2e*')",
"test": "./node_modules/mocha/bin/mocha tests/unit --recursive",
"test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive",
"test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive"
},
"repository": {
Expand Down
File renamed without changes.
29 changes: 29 additions & 0 deletions tests/configs/modules/clock/clock_12hr.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/* Magic Mirror Test config for default clock module
*
* By Sergey Morozov
* MIT Licensed.
*/

var config = {
port: 8080,
ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"],

language: "en",
timeFormat: 12,
units: "metric",
electronOptions: {
webPreferences: {
nodeIntegration: true,
},
},

modules: [
{
module: "clock",
position: "middle_center"
}
]
};

/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== "undefined") {module.exports = config;}
29 changes: 29 additions & 0 deletions tests/configs/modules/clock/clock_24hr.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/* Magic Mirror Test config for default clock module
*
* By Sergey Morozov
* 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: "clock",
position: "middle_center"
}
]
};

/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== "undefined") {module.exports = config;}
32 changes: 32 additions & 0 deletions tests/configs/modules/clock/clock_showPeriodUpper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/* Magic Mirror Test config for default clock module
*
* By Sergey Morozov
* MIT Licensed.
*/

var config = {
port: 8080,
ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"],

language: "en",
timeFormat: 12,
units: "metric",
electronOptions: {
webPreferences: {
nodeIntegration: true,
},
},

modules: [
{
module: "clock",
position: "middle_center",
config: {
showPeriodUpper: true
}
}
]
};

/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== "undefined") {module.exports = config;}
File renamed without changes.
14 changes: 8 additions & 6 deletions tests/e2e/env.js → tests/e2e/env_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ 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") {
Expand All @@ -24,9 +21,14 @@ global.before(function () {
chai.use(chaiAsPromised);
});

describe("Test enviroment app electron", function () {
describe("Electron app environment", function () {
this.timeout(10000);

before(function() {
// Set config sample for use in test
process.env.MM_CONFIG_FILE = "tests/configs/env.js";
});

beforeEach(function (done) {
app.start().then(function() { done(); } );
});
Expand All @@ -36,12 +38,12 @@ describe("Test enviroment app electron", function () {
});


it("open a window app and test if is open", function () {
it("is set to open new app window", function () {
return app.client.waitUntilWindowLoaded()
.getWindowCount().should.eventually.equal(1);
});

it("tests the title", function () {
it("sets correct window title", function () {
return app.client.waitUntilWindowLoaded()
.getTitle().should.eventually.equal("Magic Mirror");
});
Expand Down
103 changes: 103 additions & 0 deletions tests/e2e/modules/clock_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
const Application = require("spectron").Application;
const path = require("path");
const chai = require("chai");
const chaiAsPromised = require("chai-as-promised");



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("Clock module", function () {
this.timeout(10000);

describe("with default 24hr clock config", function() {
before(function() {
// Set config sample for use in test
process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_24hr.js";
});

beforeEach(function (done) {
app.start().then(function() { done(); } );
});

afterEach(function (done) {
app.stop().then(function() { done(); });
});

it("shows date with correct format", function () {
const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/;
return app.client.waitUntilWindowLoaded()
.getText(".clock .date").should.eventually.match(dateRegex);
});

it("shows time in 24hr format", function() {
const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/
return app.client.waitUntilWindowLoaded()
.getText(".clock .time").should.eventually.match(timeRegex);
});
});

describe("with default 12hr clock config", function() {
before(function() {
// Set config sample for use in test
process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_12hr.js";
});

beforeEach(function (done) {
app.start().then(function() { done(); } );
});

afterEach(function (done) {
app.stop().then(function() { done(); });
});

it("shows date with correct format", function () {
const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/;
return app.client.waitUntilWindowLoaded()
.getText(".clock .date").should.eventually.match(dateRegex);
});

it("shows time in 12hr format", function() {
const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/;
return app.client.waitUntilWindowLoaded()
.getText(".clock .time").should.eventually.match(timeRegex);
});
});

describe("with showPeriodUpper config enabled", function() {
before(function() {
// Set config sample for use in test
process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showPeriodUpper.js";
});

beforeEach(function (done) {
app.start().then(function() { done(); } );
});

afterEach(function (done) {
app.stop().then(function() { done(); });
});

it("shows 12hr time with upper case AM/PM", function() {
const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/;
return app.client.waitUntilWindowLoaded()
.getText(".clock .time").should.eventually.match(timeRegex);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ 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");

Expand All @@ -27,6 +26,11 @@ global.before(function () {
describe("Test helloworld module", function () {
this.timeout(10000);

before(function() {
// Set config sample for use in test
process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld.js";
});

beforeEach(function (done) {
app.start().then(function() { done(); } );
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var chai = require("chai");
var expect = chai.expect;
var classMM = require("../../js/class.js"); // require for load module.js
var moduleMM = require("../../js/module.js")
var classMM = require("../../../js/class.js"); // require for load module.js
var moduleMM = require("../../../js/module.js")

describe("Test function cmpVersions in js/module.js", function() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ var path = require("path");
var chai = require("chai");
var expect = chai.expect;

describe("Test global.root_path, set in js/app.js", function() {
var appMM = require("../../js/app.js")
describe("'global.root_path' set in js/app.js", function() {
var appMM = require("../../../js/app.js")

var expectedSubPaths = [
"modules",
Expand All @@ -17,7 +17,7 @@ describe("Test global.root_path, set in js/app.js", function() {
];

expectedSubPaths.forEach(subpath => {
it(`should contain a file/folder "${subpath}"`, function() {
it(`contains a file/folder "${subpath}"`, function() {
expect(fs.existsSync(path.join(global.root_path, subpath))).to.equal(true);
});
});
Expand Down

0 comments on commit b02920c

Please sign in to comment.