Skip to content

Commit

Permalink
Unified fixtures usage
Browse files Browse the repository at this point in the history
  • Loading branch information
schipiga committed Nov 21, 2018
1 parent a154a54 commit e72bf80
Show file tree
Hide file tree
Showing 9 changed files with 157 additions and 108 deletions.
2 changes: 1 addition & 1 deletion lib/globals/chunk.js
Expand Up @@ -87,7 +87,7 @@ const chunk = (name, opts, func) => {
* @ignore
*/
const _chunkCb = (name, chunkId, opts, func) => function () {
expect(CONF.test.curCase).to.exist;
expect(CONF.test.curCase, "Oops! Chunk is used outside of test").to.exist;
CONF.test.curCase.addChunk(name);
CONF.chunk.curId = chunkId;

Expand Down
31 changes: 16 additions & 15 deletions lib/globals/forEachLanguage.js
Expand Up @@ -56,25 +56,26 @@ const forEachLanguage = (name, opts, fixtures, func) => {

const _langCb = (name, fixtures, func) => lang => {
name = name || "for language";
const _fixtures = [langFixture(lang)].concat(fixtures);

scope(`${name} "${lang}"`, () => {
let oldLang;
scope(`${name} "${lang}"`, null, _fixtures, () => {
func(lang);
});
};

before(() => {
if (CONF.test.curCase) {
oldLang = CONF.test.curCase.testParams.language;
CONF.test.curCase.testParams.language = lang;
}
});
const beforeCb = lang => ctx => () => {
if (!CONF.test.curCase) return;
ctx.oldLang = CONF.test.curCase.testParams.language;
CONF.test.curCase.testParams.language = lang;
};

U.wrap(fixtures, () => func(lang))();
const afterCb = ctx => () => {
if (!CONF.test.curCase) return;
CONF.test.curCase.testParams.language = ctx.oldLang;
};

after(() => {
if (CONF.test.curCase) {
CONF.test.curCase.testParams.language = oldLang;
}
});
});
const langFixture = lang => {
return U.makeFixture({ before: beforeCb(lang), after: afterCb });
};

module.exports = forEachLanguage;
7 changes: 3 additions & 4 deletions lib/globals/session.js
@@ -1,7 +1,6 @@
"use strict";

const _ = require("lodash");
const U = require("glace-utils");

const CONF = require("../config");

Expand Down Expand Up @@ -51,15 +50,15 @@ const session = (name, fixtures, func) => {
fixtures = fixtures || [];
CONF.session.errors = [];

suite(name, sessCb(name, fixtures, func));
suite(name, null, fixtures, sessCb(name, fixtures, func));
};

/**
* Session callback.
* @ignore
*/
const sessCb = (name, fixtures, func) => () => {
U.wrap(fixtures, func)();
func();
after(afterCb(name, fixtures, func));
};

Expand All @@ -72,7 +71,7 @@ const afterCb = (name, fixtures, func) => () => {
if (_.isEmpty(CONF.retry.chunkIds)) return;
CONF.retry.id++;
CONF.test.id = 0;
suite(name, sessCb(name, fixtures, func));
suite(name, null, fixtures, sessCb(name, fixtures, func));
};

module.exports = session;
35 changes: 21 additions & 14 deletions lib/globals/test.js
Expand Up @@ -101,7 +101,7 @@ const baseTest = (names => {
}
} else {
o.testCase = CONF.test.cases.filter(t => t.id === CONF.test.id)[0];
expect(o.testCase).to.exist;
expect(o.testCase, "Oops! Testcase isn't found by id").to.exist;
}

if (o.testCase.status === TestCase.SKIPPED) return;
Expand All @@ -114,27 +114,34 @@ const baseTest = (names => {
})([]);

const testFunc = o => {
scope_(new ScopeType(o.name).setType("test"), o.testOpts, () => {
before(beforeCb(o));
U.wrap(o.fixtures, o.func)();
after(afterCb(o));
const scopeType = new ScopeType(o.name).setType("test");
const fixtures = [initTestFixture(o)].concat(o.fixtures);
const func = o.func;

scope_(scopeType, o.testOpts, fixtures, () => {
func();
});
};

const beforeCb = o => () => {
o.testCase.reset();
o.testCase.start();
CONF.test.curCase = o.testCase;
const initTestFixture = o => {
return U.makeFixture({ before: beforeCb(o.testCase), after: afterCb });
};

const beforeCb = testCase => ctx => () => {
ctx.testCase = testCase;
ctx.testCase.reset();
ctx.testCase.start();
CONF.test.curCase = ctx.testCase;
CONF.report.testDir = path.resolve(
CONF.report.dir, "tests", U.toKebab(o.testCase.name));
CONF.report.dir, "tests", U.toKebab(ctx.testCase.name));
setLog(); // Current test case is started, need to reinit log
};

const afterCb = o => () => {
if (o.testCase.errors.length) {
o.testCase.end(TestCase.FAILED);
const afterCb = ctx => () => {
if (ctx.testCase.errors.length) {
ctx.testCase.end(TestCase.FAILED);
} else {
o.testCase.end(TestCase.PASSED);
ctx.testCase.end(TestCase.PASSED);
}
};

Expand Down
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -69,7 +69,7 @@
"colors": "1.3.2",
"cross-spawn": "6.0.5",
"fs-extra": "7.0.1",
"glace-utils": "1.3.1",
"glace-utils": "1.3.2",
"is-promise": "2.1.0",
"lodash": "4.17.11",
"mocha": "5.2.0",
Expand Down
119 changes: 69 additions & 50 deletions tests/unit/testGlobalsForEachLanguage.js
Expand Up @@ -68,19 +68,30 @@ suite("globals/forEachLanguage", () => {
});

test("_langCb()", () => {
let _langCb;
let _langCb, langFixture;

beforeChunk(() => {
_langCb = forEachLanguage.__get__("_langCb");

langFixture = sinon.stub();
forEachLanguage.__set__("langFixture", langFixture);
});

chunk("uses default name", () => {
const scope_ = sinon.stub();
forEachLanguage.__set__("scope", scope_);

_langCb(null, [], () => {})("ru");
const cb = sinon.stub();
_langCb(null, [], cb)("ru");
expect(scope_).to.be.calledOnce;
expect(scope_.args[0][0]).to.be.equal("for language \"ru\"");
expect(scope_.args[0][2]).to.have.length(1);

expect(langFixture).to.be.calledOnce;
expect(langFixture.args[0][0]).to.be.equal("ru");

scope_.args[0][3]();
expect(cb).to.be.calledOnce;
expect(cb.args[0][0]).to.be.equal("ru");
});

chunk("passes custom name", () => {
Expand All @@ -91,70 +102,78 @@ suite("globals/forEachLanguage", () => {
expect(scope_).to.be.calledOnce;
expect(scope_.args[0][0]).to.be.equal("with language \"ru\"");
});
});

chunk("doesn't change language in test params", () => {
forEachLanguage.__set__("scope", (name, cb) => cb());

const before_ = sinon.spy(cb => cb());
forEachLanguage.__set__("before", before_);
test("langFixture()", () => {
let langFixture, u;

const after_ = sinon.spy(cb => cb());
forEachLanguage.__set__("after", after_);
beforeChunk(() => {
langFixture = forEachLanguage.__get__("langFixture");

const u = { wrap: sinon.stub().returns(() => {}) };
u = {
makeFixture: sinon.stub(),
};
forEachLanguage.__set__("U", u);

conf.test = {
curCase: {
testParams: {
language: "en",
},
},
};
forEachLanguage.__set__("beforeCb", o => o);
forEachLanguage.__set__("afterCb", "after");
});

const cb = sinon.stub();
_langCb(null, ["my fixture"], cb)("ru");
chunk("makes new fixture", () => {
langFixture("ru");
expect(u.makeFixture).to.be.calledOnce;
expect(u.makeFixture.args[0][0]).to.be.eql({ before: "ru", after: "after" });
});
});

expect(before_).to.be.calledOnce;
expect(after_).to.be.calledOnce;
test("beforeCb()", () => {
let beforeCb, conf;

expect(u.wrap).to.be.calledOnce;
expect(u.wrap.args[0][0]).to.be.eql(["my fixture"]);
beforeChunk(() => {
beforeCb = forEachLanguage.__get__("beforeCb");

u.wrap.args[0][1]();
expect(cb).to.be.calledOnce;
expect(cb.args[0][0]).to.be.equal("ru");
expect(conf.test.curCase.testParams.language).to.be.equal("en");
conf = {};
forEachLanguage.__set__("CONF", conf);
});

chunk("changes language in test params", () => {
forEachLanguage.__set__("scope", (name, cb) => cb());

const before_ = sinon.spy(cb => cb());
forEachLanguage.__set__("before", before_);

const after_ = sinon.spy(cb => cb());
forEachLanguage.__set__("after", after_);
chunk("does nothing if no test case", () => {
conf.test = {};
const ctx = {};
beforeCb("ru")(ctx)();
expect(ctx.oldLang).to.not.exist;
});

const u = { wrap: sinon.stub().returns(() => {}) };
forEachLanguage.__set__("U", u);
chunk("sets language to test case", () => {
conf.test = { curCase: { testParams: { language: "en" }}};
const ctx = {};
beforeCb("ru")(ctx)();
expect(ctx.oldLang).to.be.equal("en");
expect(conf.test.curCase.testParams.language).to.be.equal("ru");
});
});

conf.test = {
curCase: null,
};
test("afterCb()", () => {
let afterCb, conf;

const cb = sinon.stub();
_langCb(null, ["my fixture"], cb)("ru");
beforeChunk(() => {
afterCb = forEachLanguage.__get__("afterCb");

expect(before_).to.be.calledOnce;
expect(after_).to.be.calledOnce;
conf = {};
forEachLanguage.__set__("CONF", conf);
});

expect(u.wrap).to.be.calledOnce;
expect(u.wrap.args[0][0]).to.be.eql(["my fixture"]);
chunk("does nothing if no test case", () => {
conf.test = {};
const ctx = {};
afterCb(ctx)();
expect(conf.test.curCase).to.not.exist;
});

u.wrap.args[0][1]();
expect(cb).to.be.calledOnce;
expect(cb.args[0][0]).to.be.equal("ru");
chunk("resets language to original", () => {
conf.test = { curCase: { testParams: { language: "en" }}};
const ctx = { oldLang: "ru" };
afterCb(ctx)();
expect(conf.test.curCase.testParams.language).to.be.equal("ru");
});
});
});

0 comments on commit e72bf80

Please sign in to comment.