Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | 1x | import type {
TestSegment,
Condition,
TestResult,
TestResultAssertion,
TestResultAssertionError,
} from "@featurevisor/types";
import { allConditionsAreMatched } from "@featurevisor/sdk";
import { Datasource } from "../datasource";
export async function testSegment(
datasource: Datasource,
test: TestSegment,
_options: { verbose?: boolean; quiet?: boolean } = {},
): Promise<TestResult> {
void _options;
const testStartTime = Date.now();
const segmentKey = test.segment;
const testResult: TestResult = {
type: "segment",
key: segmentKey,
// to be updated later
notFound: false,
duration: 0,
passed: true,
assertions: [],
};
const segmentExists = await datasource.segmentExists(segmentKey);
if (!segmentExists) {
testResult.notFound = true;
testResult.passed = false;
return testResult;
}
const parsedSegment = await datasource.readSegment(segmentKey);
const conditions = parsedSegment.conditions as Condition | Condition[];
test.assertions.forEach(function (assertion) {
const assertionStartTime = Date.now();
const testResultAssertion: TestResultAssertion = {
description: assertion.description as string,
duration: 0,
passed: true,
errors: [],
};
const expected = assertion.expectedToMatch;
const actual = allConditionsAreMatched(conditions, assertion.context);
const passed = actual === expected;
if (!passed) {
const testResultAssertionError: TestResultAssertionError = {
type: "segment",
expected,
actual,
};
(testResultAssertion.errors as TestResultAssertionError[]).push(testResultAssertionError);
testResult.passed = false;
testResultAssertion.passed = passed;
}
testResult.assertions.push(testResultAssertion);
testResultAssertion.duration = Date.now() - assertionStartTime;
});
testResult.duration = Date.now() - testStartTime;
return testResult;
}
|