Revised both function and test for getExperimentBranch.
This commit is contained in:
Родитель
302d3f7be9
Коммит
b5e4d34715
|
@ -33,10 +33,11 @@ function hasUserSignedUpForRelay(user) {
|
|||
return false;
|
||||
}
|
||||
|
||||
function getExperimentBranch(req, language, sorterNum) {
|
||||
function getExperimentBranch(req, sorterNum = false, language = false) {
|
||||
|
||||
if (!sorterNum) {
|
||||
if (sorterNum === false) {
|
||||
sorterNum = Math.floor(Math.random() * 100);
|
||||
log.debug("No coinflip number provided. Coinflip number is ", sorterNum);
|
||||
}
|
||||
|
||||
if (req.session.excludeFromExperiment && !req.query.experimentBranch) {
|
||||
|
@ -46,17 +47,19 @@ function getExperimentBranch(req, language, sorterNum) {
|
|||
|
||||
// If we cannot parse req.headers["accept-language"], we should not
|
||||
// enroll users in the experiment.
|
||||
if (!language || !req.headers || !req.headers["accept-language"]){
|
||||
if (language && !req.headers || language && !req.headers["accept-language"]){
|
||||
log.debug("No headers or accept-language information present.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the user doesn't have an English variant langauge selected as their primary language,
|
||||
// If the user doesn't have the requested variant langauge selected as their primary language,
|
||||
// we do not enroll them in the experiment.
|
||||
const lang = req.headers["accept-language"].split(",");
|
||||
if (language && !lang[0].includes(language)) {
|
||||
log.debug("Preferred language is not English variant: ", lang[0]);
|
||||
return false;
|
||||
if (language) {
|
||||
const lang = req.headers["accept-language"].split(",");
|
||||
if (language && !lang[0].includes(language)) {
|
||||
log.debug(`Preferred language is not ${language} variant: ${lang[0]}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// If URL param has experimentBranch entry, use that branch;
|
||||
|
|
|
@ -2,10 +2,24 @@
|
|||
|
||||
const AppConstants = require("../../app-constants");
|
||||
const home = require("../../controllers/home");
|
||||
const { getExperimentBranch } = require("../../controllers/utils");
|
||||
const { scanResult } = require("../../scan-results");
|
||||
|
||||
let mockRequest = { fluentFormat: jest.fn(), csrfToken: jest.fn() };
|
||||
|
||||
function mockRequestSessionReset(mockRequest) {
|
||||
mockRequest.session = {
|
||||
excludeFromExperiment: false,
|
||||
experimentBranch: false,
|
||||
};
|
||||
|
||||
mockRequest.headers = {
|
||||
"accept-language": "en",
|
||||
};
|
||||
|
||||
return mockRequest;
|
||||
}
|
||||
|
||||
function addBreachesToMockRequest(mockRequest) {
|
||||
const mockBreaches = [
|
||||
{Name: "Test"},
|
||||
|
@ -60,3 +74,61 @@ test("notFound set status 404 and renders 404", () => {
|
|||
expect(mockStatusCallArgs[0]).toBe(404);
|
||||
expect(mockRenderCallArgs[0]).toBe("subpage");
|
||||
});
|
||||
|
||||
test("Experiment 3 Cohort Assignment Unit Test", () => {
|
||||
|
||||
// Resets session and language after each test
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// Set accept-language headers to German for first test.
|
||||
mockRequest.headers = {
|
||||
"accept-language": "de",
|
||||
};
|
||||
|
||||
// The session is excluded from the experiment because the set language is German.
|
||||
let experimentBranch = getExperimentBranch(mockRequest, false, "en");
|
||||
expect(experimentBranch).toBeFalsy();
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is assigned to the control group when the coin flip is 0;
|
||||
let experimentNumber = 0;
|
||||
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBe("va");
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is assigned to the control group when the coin flip is 29;
|
||||
experimentNumber = 29;
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBe("va");
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is assigned to the treatment group when the coin flip is 30;
|
||||
experimentNumber = 30;
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBe("vb");
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is assigned to the treatment group when the coin flip is 59;
|
||||
experimentNumber = 59;
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBe("vb");
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is assigned to the treatment group when the coin flip is 60
|
||||
experimentNumber = 60;
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBeFalsy();
|
||||
|
||||
mockRequestSessionReset(mockRequest);
|
||||
|
||||
// The session is excluded from the experiment when the coin flip is 99
|
||||
experimentNumber = 99;
|
||||
experimentBranch = getExperimentBranch(mockRequest, experimentNumber);
|
||||
expect(experimentBranch).toBeFalsy();
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче