153 lines
4.3 KiB
JavaScript
153 lines
4.3 KiB
JavaScript
import { AWScreenUtils } from "modules/AWScreenUtils.sys.mjs";
|
|
import { GlobalOverrider } from "asrouter/tests/unit/utils";
|
|
import { ASRouter } from "asrouter/modules/ASRouter.sys.mjs";
|
|
|
|
describe("AWScreenUtils", () => {
|
|
let sandbox;
|
|
let globals;
|
|
|
|
beforeEach(() => {
|
|
globals = new GlobalOverrider();
|
|
globals.set({
|
|
ASRouter,
|
|
ASRouterTargeting: {
|
|
Environment: {},
|
|
},
|
|
});
|
|
|
|
sandbox = sinon.createSandbox();
|
|
});
|
|
afterEach(() => {
|
|
sandbox.restore();
|
|
globals.restore();
|
|
});
|
|
describe("removeScreens", () => {
|
|
it("should run callback function once for each array element", async () => {
|
|
const callback = sandbox.stub().resolves(false);
|
|
const arr = ["foo", "bar"];
|
|
await AWScreenUtils.removeScreens(arr, callback);
|
|
assert.calledTwice(callback);
|
|
});
|
|
it("should remove screen when passed function evaluates true", async () => {
|
|
const callback = sandbox.stub().resolves(true);
|
|
const arr = ["foo", "bar"];
|
|
await AWScreenUtils.removeScreens(arr, callback);
|
|
assert.deepEqual(arr, []);
|
|
});
|
|
});
|
|
describe("evaluateScreenTargeting", () => {
|
|
it("should return the eval result if the eval succeeds", async () => {
|
|
const evalStub = sandbox.stub(ASRouter, "evaluateExpression").resolves({
|
|
evaluationStatus: {
|
|
success: true,
|
|
result: false,
|
|
},
|
|
});
|
|
const result =
|
|
await AWScreenUtils.evaluateScreenTargeting("test expression");
|
|
assert.calledOnce(evalStub);
|
|
assert.equal(result, false);
|
|
});
|
|
it("should return true if the targeting eval fails", async () => {
|
|
const evalStub = sandbox.stub(ASRouter, "evaluateExpression").resolves({
|
|
evaluationStatus: {
|
|
success: false,
|
|
result: false,
|
|
},
|
|
});
|
|
const result =
|
|
await AWScreenUtils.evaluateScreenTargeting("test expression");
|
|
assert.calledOnce(evalStub);
|
|
assert.equal(result, true);
|
|
});
|
|
});
|
|
describe("evaluateTargetingAndRemoveScreens", () => {
|
|
it("should manipulate an array of screens", async () => {
|
|
const screens = [
|
|
{
|
|
id: "first",
|
|
targeting: true,
|
|
},
|
|
{
|
|
id: "second",
|
|
targeting: false,
|
|
},
|
|
];
|
|
|
|
const expectedScreens = [
|
|
{
|
|
id: "first",
|
|
targeting: true,
|
|
},
|
|
];
|
|
sandbox.stub(ASRouter, "evaluateExpression").callsFake(targeting => {
|
|
return {
|
|
evaluationStatus: {
|
|
success: true,
|
|
result: targeting.expression,
|
|
},
|
|
};
|
|
});
|
|
const evaluatedStrings =
|
|
await AWScreenUtils.evaluateTargetingAndRemoveScreens(screens);
|
|
assert.deepEqual(evaluatedStrings, expectedScreens);
|
|
});
|
|
it("should not remove screens with no targeting", async () => {
|
|
const screens = [
|
|
{
|
|
id: "first",
|
|
},
|
|
{
|
|
id: "second",
|
|
targeting: false,
|
|
},
|
|
];
|
|
|
|
const expectedScreens = [
|
|
{
|
|
id: "first",
|
|
},
|
|
];
|
|
sandbox
|
|
.stub(AWScreenUtils, "evaluateScreenTargeting")
|
|
.callsFake(targeting => {
|
|
if (targeting === undefined) {
|
|
return true;
|
|
}
|
|
return targeting;
|
|
});
|
|
const evaluatedStrings =
|
|
await AWScreenUtils.evaluateTargetingAndRemoveScreens(screens);
|
|
assert.deepEqual(evaluatedStrings, expectedScreens);
|
|
});
|
|
});
|
|
|
|
describe("addScreenImpression", () => {
|
|
it("Should call addScreenImpression with provided screen ID", () => {
|
|
const addScreenImpressionStub = sandbox.stub(
|
|
ASRouter,
|
|
"addScreenImpression"
|
|
);
|
|
const testScreen = { id: "test" };
|
|
AWScreenUtils.addScreenImpression(testScreen);
|
|
|
|
assert.calledOnce(addScreenImpressionStub);
|
|
assert.equal(addScreenImpressionStub.firstCall.args[0].id, testScreen.id);
|
|
});
|
|
});
|
|
describe("getUnhandledCampaignAction", () => {
|
|
it("Should call evaluateExpression", () => {
|
|
const evaluateExpressionStub = sandbox.stub(
|
|
ASRouter,
|
|
"evaluateExpression"
|
|
);
|
|
AWScreenUtils.getUnhandledCampaignAction();
|
|
|
|
assert.calledOnce(evaluateExpressionStub);
|
|
assert.equal(
|
|
evaluateExpressionStub.firstCall.args[0].expression,
|
|
"unhandledCampaignAction"
|
|
);
|
|
});
|
|
});
|
|
});
|