@featurevisor/core 1.35.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +0 -6
  3. package/coverage/clover.xml +321 -237
  4. package/coverage/coverage-final.json +8 -8
  5. package/coverage/lcov-report/index.html +77 -47
  6. package/coverage/lcov-report/lib/builder/allocator.js.html +14 -14
  7. package/coverage/lcov-report/lib/builder/index.html +16 -16
  8. package/coverage/lcov-report/lib/builder/revision.js.html +3 -3
  9. package/coverage/lcov-report/lib/builder/traffic.js.html +90 -63
  10. package/coverage/lcov-report/lib/list/index.html +116 -0
  11. package/coverage/lcov-report/lib/{tester → list}/matrix.js.html +90 -66
  12. package/coverage/lcov-report/lib/tester/helpers.js.html +295 -0
  13. package/coverage/lcov-report/lib/tester/index.html +20 -35
  14. package/coverage/lcov-report/src/builder/allocator.ts.html +2 -2
  15. package/coverage/lcov-report/src/builder/index.html +15 -15
  16. package/coverage/lcov-report/src/builder/revision.ts.html +1 -1
  17. package/coverage/lcov-report/src/builder/traffic.ts.html +101 -23
  18. package/coverage/lcov-report/src/list/index.html +116 -0
  19. package/coverage/lcov-report/src/{tester → list}/matrix.ts.html +87 -21
  20. package/coverage/lcov-report/src/tester/helpers.ts.html +313 -0
  21. package/coverage/lcov-report/src/tester/index.html +20 -35
  22. package/coverage/lcov.info +592 -436
  23. package/lib/assess-distribution/index.d.ts +1 -1
  24. package/lib/assess-distribution/index.js +102 -162
  25. package/lib/assess-distribution/index.js.map +1 -1
  26. package/lib/benchmark/index.js +87 -143
  27. package/lib/benchmark/index.js.map +1 -1
  28. package/lib/builder/allocator.d.ts +1 -1
  29. package/lib/builder/allocator.js +12 -12
  30. package/lib/builder/allocator.js.map +1 -1
  31. package/lib/builder/allocator.spec.js +22 -22
  32. package/lib/builder/allocator.spec.js.map +1 -1
  33. package/lib/builder/buildDatafile.d.ts +4 -3
  34. package/lib/builder/buildDatafile.js +311 -388
  35. package/lib/builder/buildDatafile.js.map +1 -1
  36. package/lib/builder/buildProject.d.ts +2 -1
  37. package/lib/builder/buildProject.js +96 -183
  38. package/lib/builder/buildProject.js.map +1 -1
  39. package/lib/builder/convertToV1.d.ts +10 -0
  40. package/lib/builder/convertToV1.js +119 -0
  41. package/lib/builder/convertToV1.js.map +1 -0
  42. package/lib/builder/getFeatureRanges.d.ts +1 -1
  43. package/lib/builder/getFeatureRanges.js +32 -105
  44. package/lib/builder/getFeatureRanges.js.map +1 -1
  45. package/lib/builder/hashes.d.ts +4 -0
  46. package/lib/builder/hashes.js +70 -0
  47. package/lib/builder/hashes.js.map +1 -0
  48. package/lib/builder/revision.js +2 -2
  49. package/lib/builder/revision.js.map +1 -1
  50. package/lib/builder/revision.spec.js +1 -1
  51. package/lib/builder/revision.spec.js.map +1 -1
  52. package/lib/builder/traffic.d.ts +1 -1
  53. package/lib/builder/traffic.js +57 -48
  54. package/lib/builder/traffic.js.map +1 -1
  55. package/lib/builder/traffic.spec.js +14 -14
  56. package/lib/builder/traffic.spec.js.map +1 -1
  57. package/lib/cli/cli.js +60 -129
  58. package/lib/cli/cli.js.map +1 -1
  59. package/lib/cli/plugins.js +14 -16
  60. package/lib/cli/plugins.js.map +1 -1
  61. package/lib/config/parsers.js +1 -1
  62. package/lib/config/parsers.js.map +1 -1
  63. package/lib/config/projectConfig.d.ts +8 -6
  64. package/lib/config/projectConfig.js +31 -72
  65. package/lib/config/projectConfig.js.map +1 -1
  66. package/lib/datasource/adapter.d.ts +1 -1
  67. package/lib/datasource/adapter.js +2 -5
  68. package/lib/datasource/adapter.js.map +1 -1
  69. package/lib/datasource/datasource.d.ts +2 -1
  70. package/lib/datasource/datasource.js +107 -148
  71. package/lib/datasource/datasource.js.map +1 -1
  72. package/lib/datasource/filesystemAdapter.d.ts +1 -1
  73. package/lib/datasource/filesystemAdapter.js +224 -360
  74. package/lib/datasource/filesystemAdapter.js.map +1 -1
  75. package/lib/evaluate/index.d.ts +1 -1
  76. package/lib/evaluate/index.js +120 -188
  77. package/lib/evaluate/index.js.map +1 -1
  78. package/lib/find-duplicate-segments/findDuplicateSegments.d.ts +1 -1
  79. package/lib/find-duplicate-segments/findDuplicateSegments.js +40 -128
  80. package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
  81. package/lib/find-duplicate-segments/index.js +27 -82
  82. package/lib/find-duplicate-segments/index.js.map +1 -1
  83. package/lib/find-usage/index.d.ts +7 -5
  84. package/lib/find-usage/index.js +333 -507
  85. package/lib/find-usage/index.js.map +1 -1
  86. package/lib/generate-code/index.js +36 -91
  87. package/lib/generate-code/index.js.map +1 -1
  88. package/lib/generate-code/typescript.js +117 -157
  89. package/lib/generate-code/typescript.js.map +1 -1
  90. package/lib/index.d.ts +0 -1
  91. package/lib/index.js +0 -1
  92. package/lib/index.js.map +1 -1
  93. package/lib/info/index.js +45 -133
  94. package/lib/info/index.js.map +1 -1
  95. package/lib/init/index.d.ts +1 -1
  96. package/lib/init/index.js +16 -64
  97. package/lib/init/index.js.map +1 -1
  98. package/lib/linter/attributeSchema.d.ts +21 -6
  99. package/lib/linter/attributeSchema.js +18 -4
  100. package/lib/linter/attributeSchema.js.map +1 -1
  101. package/lib/linter/checkCircularDependency.d.ts +1 -1
  102. package/lib/linter/checkCircularDependency.js +22 -80
  103. package/lib/linter/checkCircularDependency.js.map +1 -1
  104. package/lib/linter/checkPercentageExceedingSlot.d.ts +1 -1
  105. package/lib/linter/checkPercentageExceedingSlot.js +36 -76
  106. package/lib/linter/checkPercentageExceedingSlot.js.map +1 -1
  107. package/lib/linter/conditionSchema.d.ts +1 -1
  108. package/lib/linter/conditionSchema.js +89 -41
  109. package/lib/linter/conditionSchema.js.map +1 -1
  110. package/lib/linter/featureSchema.d.ts +345 -197
  111. package/lib/linter/featureSchema.js +313 -172
  112. package/lib/linter/featureSchema.js.map +1 -1
  113. package/lib/linter/groupSchema.js +6 -6
  114. package/lib/linter/groupSchema.js.map +1 -1
  115. package/lib/linter/lintProject.js +306 -480
  116. package/lib/linter/lintProject.js.map +1 -1
  117. package/lib/linter/printError.js +7 -7
  118. package/lib/linter/printError.js.map +1 -1
  119. package/lib/linter/segmentSchema.js +2 -2
  120. package/lib/linter/segmentSchema.js.map +1 -1
  121. package/lib/linter/testSchema.d.ts +155 -3
  122. package/lib/linter/testSchema.js +47 -17
  123. package/lib/linter/testSchema.js.map +1 -1
  124. package/lib/list/index.d.ts +1 -0
  125. package/lib/list/index.js +349 -517
  126. package/lib/list/index.js.map +1 -1
  127. package/lib/{tester → list}/matrix.d.ts +1 -1
  128. package/lib/{tester → list}/matrix.js +50 -42
  129. package/lib/list/matrix.js.map +1 -0
  130. package/lib/{tester → list}/matrix.spec.js +7 -7
  131. package/lib/list/matrix.spec.js.map +1 -0
  132. package/lib/site/exportSite.js +25 -71
  133. package/lib/site/exportSite.js.map +1 -1
  134. package/lib/site/generateHistory.d.ts +1 -1
  135. package/lib/site/generateHistory.js +26 -82
  136. package/lib/site/generateHistory.js.map +1 -1
  137. package/lib/site/generateSiteSearchIndex.d.ts +1 -1
  138. package/lib/site/generateSiteSearchIndex.js +182 -259
  139. package/lib/site/generateSiteSearchIndex.js.map +1 -1
  140. package/lib/site/getLastModifiedFromHistory.d.ts +1 -1
  141. package/lib/site/getLastModifiedFromHistory.js +2 -2
  142. package/lib/site/getLastModifiedFromHistory.js.map +1 -1
  143. package/lib/site/getOwnerAndRepoFromUrl.js +6 -6
  144. package/lib/site/getOwnerAndRepoFromUrl.js.map +1 -1
  145. package/lib/site/getRelativePaths.js +7 -7
  146. package/lib/site/getRelativePaths.js.map +1 -1
  147. package/lib/site/getRepoDetails.js +20 -20
  148. package/lib/site/getRepoDetails.js.map +1 -1
  149. package/lib/site/index.js +25 -73
  150. package/lib/site/index.js.map +1 -1
  151. package/lib/site/serveSite.js +10 -10
  152. package/lib/site/serveSite.js.map +1 -1
  153. package/lib/tester/helpers.d.ts +2 -0
  154. package/lib/tester/helpers.js +71 -0
  155. package/lib/tester/helpers.js.map +1 -0
  156. package/lib/tester/helpers.spec.js +115 -0
  157. package/lib/tester/helpers.spec.js.map +1 -0
  158. package/lib/tester/index.d.ts +0 -1
  159. package/lib/tester/index.js +0 -1
  160. package/lib/tester/index.js.map +1 -1
  161. package/lib/tester/prettyDuration.js +11 -11
  162. package/lib/tester/prettyDuration.js.map +1 -1
  163. package/lib/tester/printTestResult.d.ts +1 -1
  164. package/lib/tester/printTestResult.js +35 -15
  165. package/lib/tester/printTestResult.js.map +1 -1
  166. package/lib/tester/testFeature.d.ts +4 -2
  167. package/lib/tester/testFeature.js +264 -226
  168. package/lib/tester/testFeature.js.map +1 -1
  169. package/lib/tester/testProject.d.ts +3 -7
  170. package/lib/tester/testProject.js +145 -246
  171. package/lib/tester/testProject.js.map +1 -1
  172. package/lib/tester/testSegment.d.ts +5 -2
  173. package/lib/tester/testSegment.js +65 -102
  174. package/lib/tester/testSegment.js.map +1 -1
  175. package/lib/utils/extractKeys.d.ts +2 -1
  176. package/lib/utils/extractKeys.js +57 -12
  177. package/lib/utils/extractKeys.js.map +1 -1
  178. package/lib/utils/git.d.ts +1 -1
  179. package/lib/utils/git.js +23 -23
  180. package/lib/utils/git.js.map +1 -1
  181. package/lib/utils/pretty.js +2 -4
  182. package/lib/utils/pretty.js.map +1 -1
  183. package/package.json +5 -6
  184. package/src/assess-distribution/index.ts +3 -2
  185. package/src/benchmark/index.ts +3 -3
  186. package/src/builder/allocator.spec.ts +1 -1
  187. package/src/builder/allocator.ts +1 -1
  188. package/src/builder/buildDatafile.ts +161 -124
  189. package/src/builder/buildProject.ts +6 -3
  190. package/src/builder/convertToV1.ts +166 -0
  191. package/src/builder/getFeatureRanges.ts +1 -1
  192. package/src/builder/hashes.ts +109 -0
  193. package/src/builder/traffic.ts +41 -15
  194. package/src/cli/cli.ts +1 -1
  195. package/src/cli/plugins.ts +0 -2
  196. package/src/config/projectConfig.ts +13 -10
  197. package/src/datasource/adapter.ts +1 -1
  198. package/src/datasource/datasource.ts +23 -2
  199. package/src/datasource/filesystemAdapter.ts +11 -12
  200. package/src/evaluate/index.ts +7 -6
  201. package/src/find-duplicate-segments/findDuplicateSegments.ts +1 -1
  202. package/src/find-usage/index.ts +111 -44
  203. package/src/generate-code/index.ts +1 -3
  204. package/src/generate-code/typescript.ts +7 -29
  205. package/src/index.ts +0 -1
  206. package/src/info/index.ts +2 -2
  207. package/src/init/index.ts +2 -2
  208. package/src/linter/attributeSchema.ts +18 -2
  209. package/src/linter/checkCircularDependency.ts +1 -1
  210. package/src/linter/checkPercentageExceedingSlot.ts +28 -8
  211. package/src/linter/conditionSchema.ts +66 -10
  212. package/src/linter/featureSchema.ts +312 -116
  213. package/src/linter/lintProject.ts +9 -4
  214. package/src/linter/testSchema.ts +42 -3
  215. package/src/list/index.ts +18 -30
  216. package/src/{tester → list}/matrix.ts +33 -11
  217. package/src/site/exportSite.ts +2 -4
  218. package/src/site/generateHistory.ts +1 -1
  219. package/src/site/generateSiteSearchIndex.ts +58 -50
  220. package/src/site/getLastModifiedFromHistory.ts +1 -1
  221. package/src/tester/helpers.spec.ts +149 -0
  222. package/src/tester/helpers.ts +76 -0
  223. package/src/tester/index.ts +0 -1
  224. package/src/tester/printTestResult.ts +25 -3
  225. package/src/tester/testFeature.ts +270 -124
  226. package/src/tester/testProject.ts +28 -49
  227. package/src/tester/testSegment.ts +48 -40
  228. package/src/utils/extractKeys.ts +58 -1
  229. package/src/utils/git.ts +1 -1
  230. package/tsconfig.cjs.json +1 -0
  231. package/coverage/lcov-report/lib/tester/checkIfObjectsAreEqual.js.html +0 -151
  232. package/coverage/lcov-report/src/tester/checkIfObjectsAreEqual.ts.html +0 -157
  233. package/lib/restore/index.d.ts +0 -4
  234. package/lib/restore/index.js +0 -91
  235. package/lib/restore/index.js.map +0 -1
  236. package/lib/tester/checkIfArraysAreEqual.d.ts +0 -1
  237. package/lib/tester/checkIfArraysAreEqual.js +0 -18
  238. package/lib/tester/checkIfArraysAreEqual.js.map +0 -1
  239. package/lib/tester/checkIfObjectsAreEqual.d.ts +0 -1
  240. package/lib/tester/checkIfObjectsAreEqual.js +0 -23
  241. package/lib/tester/checkIfObjectsAreEqual.js.map +0 -1
  242. package/lib/tester/checkIfObjectsAreEqual.spec.js +0 -26
  243. package/lib/tester/checkIfObjectsAreEqual.spec.js.map +0 -1
  244. package/lib/tester/matrix.js.map +0 -1
  245. package/lib/tester/matrix.spec.js.map +0 -1
  246. package/src/restore/index.ts +0 -42
  247. package/src/tester/checkIfArraysAreEqual.ts +0 -16
  248. package/src/tester/checkIfObjectsAreEqual.spec.ts +0 -31
  249. package/src/tester/checkIfObjectsAreEqual.ts +0 -24
  250. /package/lib/{tester → list}/matrix.spec.d.ts +0 -0
  251. /package/lib/tester/{checkIfObjectsAreEqual.spec.d.ts → helpers.spec.d.ts} +0 -0
  252. /package/src/{tester → list}/matrix.spec.ts +0 -0
@@ -1,8 +1,10 @@
1
- import { TestFeature, TestResult } from "@featurevisor/types";
1
+ import type { TestFeature, TestResult } from "@featurevisor/types";
2
2
  import { Datasource } from "../datasource";
3
3
  import { ProjectConfig } from "../config";
4
4
  import type { DatafileContentByEnvironment } from "./testProject";
5
5
  export declare function testFeature(datasource: Datasource, projectConfig: ProjectConfig, test: TestFeature, options: {
6
6
  verbose?: boolean;
7
+ quiet?: boolean;
7
8
  showDatafile?: boolean;
8
- }, patterns: any, datafileContentByEnvironment: DatafileContentByEnvironment): Promise<TestResult>;
9
+ [key: string]: any;
10
+ }, datafileContentByEnvironment: DatafileContentByEnvironment): Promise<TestResult>;
@@ -1,233 +1,271 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
3
  exports.testFeature = testFeature;
40
- var sdk_1 = require("@featurevisor/sdk");
41
- var checkIfArraysAreEqual_1 = require("./checkIfArraysAreEqual");
42
- var checkIfObjectsAreEqual_1 = require("./checkIfObjectsAreEqual");
43
- var matrix_1 = require("./matrix");
44
- function testFeature(datasource_1, projectConfig_1, test_1) {
45
- return __awaiter(this, arguments, void 0, function (datasource, projectConfig, test, options, patterns, datafileContentByEnvironment) {
46
- var testStartTime, featureKey, testResult, aIndex, assertions, _loop_1, bIndex, state_1;
47
- if (options === void 0) { options = {}; }
48
- return __generator(this, function (_a) {
49
- switch (_a.label) {
50
- case 0:
51
- testStartTime = Date.now();
52
- featureKey = test.feature;
53
- testResult = {
54
- type: "feature",
55
- key: featureKey,
56
- // to be updated later
57
- notFound: false,
58
- duration: 0,
59
- passed: true,
60
- assertions: [],
61
- };
62
- aIndex = 0;
63
- _a.label = 1;
64
- case 1:
65
- if (!(aIndex < test.assertions.length)) return [3 /*break*/, 6];
66
- assertions = (0, matrix_1.getFeatureAssertionsFromMatrix)(aIndex, test.assertions[aIndex]);
67
- _loop_1 = function (bIndex) {
68
- var assertionStartTime, assertion, testResultAssertion, datafileContent, sdk, feature, isEnabled, variation;
69
- return __generator(this, function (_b) {
70
- switch (_b.label) {
71
- case 0:
72
- assertionStartTime = Date.now();
73
- assertion = assertions[bIndex];
74
- testResultAssertion = {
75
- description: assertion.description,
76
- duration: 0,
77
- passed: true,
78
- errors: [],
79
- };
80
- if (patterns.assertionPattern && !patterns.assertionPattern.test(assertion.description)) {
81
- return [2 /*return*/, "continue"];
82
- }
83
- datafileContent = datafileContentByEnvironment.get(assertion.environment || false);
84
- if (options.showDatafile) {
85
- console.log("");
86
- console.log(JSON.stringify(datafileContent, null, 2));
87
- console.log("");
88
- }
89
- sdk = (0, sdk_1.createInstance)({
90
- datafile: datafileContent,
91
- configureBucketValue: function () {
92
- return assertion.at * (sdk_1.MAX_BUCKETED_NUMBER / 100);
93
- },
94
- });
95
- if (options.verbose) {
96
- sdk.setLogLevels(["debug", "info", "warn", "error"]);
97
- }
98
- return [4 /*yield*/, datasource.readFeature(featureKey)];
99
- case 1:
100
- feature = _b.sent();
101
- if (!feature) {
102
- testResult.notFound = true;
103
- testResult.passed = false;
104
- return [2 /*return*/, { value: testResult }];
105
- }
106
- // isEnabled
107
- if ("expectedToBeEnabled" in assertion) {
108
- isEnabled = sdk.isEnabled(featureKey, assertion.context);
109
- if (isEnabled !== assertion.expectedToBeEnabled) {
110
- testResult.passed = false;
111
- testResultAssertion.passed = false;
112
- testResultAssertion.errors.push({
113
- type: "flag",
114
- expected: assertion.expectedToBeEnabled,
115
- actual: isEnabled,
116
- });
117
- }
118
- }
119
- // variation
120
- if ("expectedVariation" in assertion) {
121
- variation = sdk.getVariation(featureKey, assertion.context);
122
- if (variation !== assertion.expectedVariation) {
123
- testResult.passed = false;
124
- testResultAssertion.passed = false;
125
- testResultAssertion.errors.push({
126
- type: "variation",
127
- expected: assertion.expectedVariation,
128
- actual: variation,
129
- });
130
- }
131
- }
132
- // variables
133
- if (typeof assertion.expectedVariables === "object") {
134
- Object.keys(assertion.expectedVariables).forEach(function (variableKey) {
135
- var _a;
136
- var expectedValue = assertion.expectedVariables && assertion.expectedVariables[variableKey];
137
- var actualValue = sdk.getVariable(featureKey, variableKey, assertion.context);
138
- var passed;
139
- var variableSchema = (_a = feature.variablesSchema) === null || _a === void 0 ? void 0 : _a.find(function (v) { return v.key === variableKey; });
140
- if (!variableSchema) {
141
- testResult.passed = false;
142
- testResultAssertion.passed = false;
143
- testResultAssertion.errors.push({
144
- type: "variable",
145
- expected: assertion.expectedVariation,
146
- actual: undefined,
147
- message: "schema for variable \"".concat(variableKey, "\" not found in feature"),
148
- });
149
- return;
150
- }
151
- if (variableSchema.type === "json") {
152
- // JSON type
153
- var parsedExpectedValue = typeof expectedValue === "string"
154
- ? JSON.parse(expectedValue)
155
- : expectedValue;
156
- if (Array.isArray(actualValue)) {
157
- passed = (0, checkIfArraysAreEqual_1.checkIfArraysAreEqual)(parsedExpectedValue, actualValue);
158
- }
159
- else if (typeof actualValue === "object") {
160
- passed = (0, checkIfObjectsAreEqual_1.checkIfObjectsAreEqual)(parsedExpectedValue, actualValue);
161
- }
162
- else {
163
- passed = JSON.stringify(parsedExpectedValue) === JSON.stringify(actualValue);
164
- }
165
- if (!passed) {
166
- testResult.passed = false;
167
- testResultAssertion.passed = false;
168
- testResultAssertion.errors.push({
169
- type: "variable",
170
- expected: typeof expectedValue !== "string" ? JSON.stringify(expectedValue) : expectedValue,
171
- actual: typeof actualValue !== "string" ? JSON.stringify(actualValue) : actualValue,
172
- details: {
173
- variableKey: variableKey,
174
- },
175
- });
176
- }
177
- }
178
- else {
179
- // other types
180
- if (typeof expectedValue === "object") {
181
- passed = (0, checkIfObjectsAreEqual_1.checkIfObjectsAreEqual)(expectedValue, actualValue);
182
- }
183
- else if (Array.isArray(expectedValue)) {
184
- passed = (0, checkIfArraysAreEqual_1.checkIfArraysAreEqual)(expectedValue, actualValue);
185
- }
186
- else {
187
- passed = expectedValue === actualValue;
188
- }
189
- if (!passed) {
190
- testResult.passed = false;
191
- testResultAssertion.passed = false;
192
- testResultAssertion.errors.push({
193
- type: "variable",
194
- expected: expectedValue,
195
- actual: actualValue,
196
- details: {
197
- variableKey: variableKey,
198
- },
199
- });
200
- }
201
- }
202
- });
203
- }
204
- testResultAssertion.duration = Date.now() - assertionStartTime;
205
- testResult.assertions.push(testResultAssertion);
206
- return [2 /*return*/];
207
- }
4
+ const sdk_1 = require("@featurevisor/sdk");
5
+ const helpers_1 = require("./helpers");
6
+ async function testFeature(datasource, projectConfig, test, options = {}, datafileContentByEnvironment) {
7
+ const testStartTime = Date.now();
8
+ const featureKey = test.feature;
9
+ const testResult = {
10
+ type: "feature",
11
+ key: featureKey,
12
+ // to be updated later
13
+ notFound: false,
14
+ duration: 0,
15
+ passed: true,
16
+ assertions: [],
17
+ };
18
+ for (let aIndex = 0; aIndex < test.assertions.length; aIndex++) {
19
+ const assertionStartTime = Date.now();
20
+ const assertion = test.assertions[aIndex];
21
+ const testResultAssertion = {
22
+ description: assertion.description,
23
+ duration: 0,
24
+ passed: true,
25
+ errors: [],
26
+ };
27
+ const datafileContent = datafileContentByEnvironment.get(assertion.environment || false);
28
+ if (options.showDatafile) {
29
+ console.log("");
30
+ console.log(JSON.stringify(datafileContent, null, 2));
31
+ console.log("");
32
+ }
33
+ let logLevel = "warn";
34
+ if (options.verbose) {
35
+ logLevel = "debug";
36
+ }
37
+ else if (options.quiet) {
38
+ logLevel = "fatal";
39
+ }
40
+ const sdk = (0, sdk_1.createInstance)({
41
+ datafile: datafileContent,
42
+ sticky: assertion.sticky ? assertion.sticky : {},
43
+ hooks: [
44
+ {
45
+ name: "tester",
46
+ bucketValue: ({ bucketValue }) => {
47
+ if (typeof assertion.at !== "undefined") {
48
+ return assertion.at * (sdk_1.MAX_BUCKETED_NUMBER / 100);
49
+ }
50
+ return bucketValue;
51
+ },
52
+ },
53
+ ],
54
+ logLevel,
55
+ });
56
+ const feature = await datasource.readFeature(featureKey);
57
+ if (!feature) {
58
+ testResult.notFound = true;
59
+ testResult.passed = false;
60
+ return testResult;
61
+ }
62
+ if (assertion.context) {
63
+ sdk.setContext(assertion.context);
64
+ }
65
+ /**
66
+ * expectedToBeEnabled
67
+ */
68
+ function testExpectedToBeEnabled(sdk, assertion, details = {}) {
69
+ const isEnabled = sdk.isEnabled(featureKey, assertion.context || {});
70
+ if (isEnabled !== assertion.expectedToBeEnabled) {
71
+ testResult.passed = false;
72
+ testResultAssertion.passed = false;
73
+ testResultAssertion.errors.push({
74
+ type: "flag",
75
+ expected: assertion.expectedToBeEnabled,
76
+ actual: isEnabled,
77
+ details,
78
+ });
79
+ }
80
+ }
81
+ if ("expectedToBeEnabled" in assertion) {
82
+ testExpectedToBeEnabled(sdk, assertion);
83
+ }
84
+ /**
85
+ * expectedVariation
86
+ */
87
+ function testExpectedVariation(sdk, assertion, details = {}) {
88
+ const overrideOptions = {};
89
+ if (assertion.defaultVariationValue) {
90
+ overrideOptions.defaultVariationValue = assertion.defaultVariationValue;
91
+ }
92
+ const variation = sdk.getVariation(featureKey, assertion.context || {}, overrideOptions);
93
+ if (variation !== assertion.expectedVariation) {
94
+ testResult.passed = false;
95
+ testResultAssertion.passed = false;
96
+ testResultAssertion.errors.push({
97
+ type: "variation",
98
+ expected: assertion.expectedVariation,
99
+ actual: variation,
100
+ details,
101
+ });
102
+ }
103
+ }
104
+ if ("expectedVariation" in assertion) {
105
+ testExpectedVariation(sdk, assertion);
106
+ }
107
+ /**
108
+ * expectedVariables
109
+ */
110
+ function testExpectedVariables(sdk, assertion, details = {}) {
111
+ Object.keys(assertion.expectedVariables).forEach(function (variableKey) {
112
+ const expectedValue = assertion.expectedVariables && assertion.expectedVariables[variableKey];
113
+ const overrideOptions = {};
114
+ if (assertion.defaultVariableValues && assertion.defaultVariableValues[variableKey]) {
115
+ overrideOptions.defaultVariableValue = assertion.defaultVariableValues[variableKey];
116
+ }
117
+ const actualValue = sdk.getVariable(featureKey, variableKey, assertion.context || {}, overrideOptions);
118
+ let passed;
119
+ const variableSchema = feature.variablesSchema?.[variableKey];
120
+ if (!variableSchema) {
121
+ testResult.passed = false;
122
+ testResultAssertion.passed = false;
123
+ testResultAssertion.errors.push({
124
+ type: "variable",
125
+ expected: assertion.expectedVariation,
126
+ actual: undefined,
127
+ message: `schema for variable "${variableKey}" not found in feature`,
128
+ });
129
+ return;
130
+ }
131
+ if (variableSchema.type === "json") {
132
+ // JSON type
133
+ const parsedExpectedValue = typeof expectedValue === "string" ? JSON.parse(expectedValue) : expectedValue;
134
+ if (Array.isArray(actualValue)) {
135
+ passed = (0, helpers_1.checkIfArraysAreEqual)(parsedExpectedValue, actualValue);
136
+ }
137
+ else if (typeof actualValue === "object") {
138
+ passed = (0, helpers_1.checkIfObjectsAreEqual)(parsedExpectedValue, actualValue);
139
+ }
140
+ else {
141
+ passed = JSON.stringify(parsedExpectedValue) === JSON.stringify(actualValue);
142
+ }
143
+ if (!passed) {
144
+ testResult.passed = false;
145
+ testResultAssertion.passed = false;
146
+ testResultAssertion.errors.push({
147
+ type: "variable",
148
+ expected: typeof expectedValue !== "string" ? JSON.stringify(expectedValue) : expectedValue,
149
+ actual: typeof actualValue !== "string" ? JSON.stringify(actualValue) : actualValue,
150
+ details: {
151
+ ...details,
152
+ variableKey,
153
+ },
154
+ });
155
+ }
156
+ }
157
+ else {
158
+ // other types
159
+ if (typeof expectedValue === "object") {
160
+ passed = (0, helpers_1.checkIfObjectsAreEqual)(expectedValue, actualValue);
161
+ }
162
+ else if (Array.isArray(expectedValue)) {
163
+ passed = (0, helpers_1.checkIfArraysAreEqual)(expectedValue, actualValue);
164
+ }
165
+ else {
166
+ passed = expectedValue === actualValue;
167
+ }
168
+ if (!passed) {
169
+ testResult.passed = false;
170
+ testResultAssertion.passed = false;
171
+ testResultAssertion.errors.push({
172
+ type: "variable",
173
+ expected: expectedValue,
174
+ actual: actualValue,
175
+ details: {
176
+ ...details,
177
+ variableKey,
178
+ },
208
179
  });
209
- };
210
- bIndex = 0;
211
- _a.label = 2;
212
- case 2:
213
- if (!(bIndex < assertions.length)) return [3 /*break*/, 5];
214
- return [5 /*yield**/, _loop_1(bIndex)];
215
- case 3:
216
- state_1 = _a.sent();
217
- if (typeof state_1 === "object")
218
- return [2 /*return*/, state_1.value];
219
- _a.label = 4;
220
- case 4:
221
- bIndex++;
222
- return [3 /*break*/, 2];
223
- case 5:
224
- aIndex++;
225
- return [3 /*break*/, 1];
226
- case 6:
227
- testResult.duration = Date.now() - testStartTime;
228
- return [2 /*return*/, testResult];
180
+ }
181
+ }
182
+ });
183
+ }
184
+ if (typeof assertion.expectedVariables === "object") {
185
+ testExpectedVariables(sdk, assertion);
186
+ }
187
+ /**
188
+ * expectedEvaluations
189
+ */
190
+ function testExpectedEvaluations(sdk, assertion, rootDetails = {}) {
191
+ function testEvaluation(type, evaluation, expected, details = {}) {
192
+ for (const [key, value] of Object.entries(expected)) {
193
+ if (evaluation[key] !== value) {
194
+ testResult.passed = false;
195
+ testResultAssertion.passed = false;
196
+ testResultAssertion.errors.push({
197
+ type: "evaluation",
198
+ expected: value,
199
+ actual: evaluation[key],
200
+ details: {
201
+ ...rootDetails,
202
+ ...details,
203
+ evaluationType: type,
204
+ evaluationKey: key,
205
+ },
206
+ });
207
+ }
208
+ }
229
209
  }
230
- });
231
- });
210
+ if (assertion.expectedEvaluations.flag) {
211
+ const evaluation = sdk.evaluateFlag(featureKey, assertion.context || {});
212
+ testEvaluation("flag", evaluation, assertion.expectedEvaluations.flag);
213
+ }
214
+ if (assertion.expectedEvaluations.variation) {
215
+ const evaluation = sdk.evaluateVariation(featureKey, assertion.context || {});
216
+ testEvaluation("variation", evaluation, assertion.expectedEvaluations.variation);
217
+ }
218
+ if (assertion.expectedEvaluations.variables) {
219
+ const variableKeys = Object.keys(assertion.expectedEvaluations.variables);
220
+ for (const variableKey of variableKeys) {
221
+ const evaluation = sdk.evaluateVariable(featureKey, variableKey, assertion.context || {});
222
+ testEvaluation("variable", evaluation, assertion.expectedEvaluations.variables[variableKey], { variableKey });
223
+ }
224
+ }
225
+ }
226
+ if (assertion.expectedEvaluations) {
227
+ testExpectedEvaluations(sdk, assertion);
228
+ }
229
+ /**
230
+ * children
231
+ */
232
+ if (Array.isArray(assertion.children)) {
233
+ let childIndex = 0;
234
+ for (const child of assertion.children) {
235
+ const childSdk = sdk.spawn(child.context || {}, {
236
+ sticky: assertion.sticky || {},
237
+ });
238
+ // expectedToBeEnabled
239
+ if (typeof child.expectedToBeEnabled !== "undefined") {
240
+ testExpectedToBeEnabled(childSdk, child, {
241
+ childIndex,
242
+ });
243
+ }
244
+ // expectedVariation
245
+ if (typeof child.expectedVariation !== "undefined") {
246
+ testExpectedVariation(childSdk, child, {
247
+ childIndex,
248
+ });
249
+ }
250
+ // expectedVariables
251
+ if (typeof child.expectedVariables === "object") {
252
+ testExpectedVariables(childSdk, child, {
253
+ childIndex,
254
+ });
255
+ }
256
+ // expectedEvaluations
257
+ if (typeof child.expectedEvaluations === "object") {
258
+ testExpectedEvaluations(childSdk, child, {
259
+ childIndex,
260
+ });
261
+ }
262
+ childIndex++;
263
+ }
264
+ }
265
+ testResultAssertion.duration = Date.now() - assertionStartTime;
266
+ testResult.assertions.push(testResultAssertion);
267
+ }
268
+ testResult.duration = Date.now() - testStartTime;
269
+ return testResult;
232
270
  }
233
271
  //# sourceMappingURL=testFeature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testFeature.js","sourceRoot":"","sources":["../../src/tester/testFeature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testFeature.js","sourceRoot":"","sources":["../../src/tester/testFeature.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DatafileContent } from "@featurevisor/types";
1
+ import type { Test, DatafileContent } from "@featurevisor/types";
2
2
  import { Dependencies } from "../dependencies";
3
3
  import { Plugin } from "../cli";
4
4
  export interface TestProjectOptions {
@@ -10,10 +10,6 @@ export interface TestProjectOptions {
10
10
  schemaVersion?: string;
11
11
  inflate?: number;
12
12
  }
13
- export interface TestPatterns {
14
- keyPattern?: RegExp;
15
- assertionPattern?: RegExp;
16
- }
17
13
  export interface ExecutionResult {
18
14
  passed: boolean;
19
15
  assertionsCount: {
@@ -22,6 +18,6 @@ export interface ExecutionResult {
22
18
  };
23
19
  }
24
20
  export type DatafileContentByEnvironment = Map<string | false, DatafileContent>;
25
- export declare function executeTest(testFile: string, deps: Dependencies, options: TestProjectOptions, patterns: TestPatterns, datafileContentByEnvironment: DatafileContentByEnvironment): Promise<ExecutionResult | undefined>;
26
- export declare function testProject(deps: Dependencies, options?: TestProjectOptions): Promise<boolean>;
21
+ export declare function executeTest(test: Test, deps: Dependencies, options: TestProjectOptions, datafileContentByEnvironment: DatafileContentByEnvironment): Promise<ExecutionResult | undefined>;
22
+ export declare function testProject(deps: Dependencies, testOptions?: TestProjectOptions): Promise<boolean>;
27
23
  export declare const testPlugin: Plugin;