unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
105 lines • 5.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = void 0;
const fast_check_1 = __importDefault(require("fast-check"));
const arbitraries_test_1 = require("../../../test/arbitraries.test");
const validate_1 = require("../validate");
const playground_feature_schema_1 = require("./playground-feature-schema");
const playground_strategy_schema_1 = require("./playground-strategy-schema");
const playgroundStrategyConstraint = () => fast_check_1.default
.tuple(fast_check_1.default.boolean(), (0, arbitraries_test_1.strategyConstraint)())
.map(([result, constraint]) => ({
...constraint,
result,
}));
const playgroundStrategyConstraints = () => fast_check_1.default.array(playgroundStrategyConstraint());
const playgroundSegment = () => fast_check_1.default.record({
name: fast_check_1.default.string({ minLength: 1 }),
id: fast_check_1.default.nat(),
result: fast_check_1.default.boolean(),
constraints: playgroundStrategyConstraints(),
});
const playgroundStrategy = (name, parameters) => fast_check_1.default.record({
id: fast_check_1.default.uuid(),
name: fast_check_1.default.constant(name),
result: fast_check_1.default.oneof(fast_check_1.default.record({
evaluationStatus: fast_check_1.default.constant(playground_strategy_schema_1.playgroundStrategyEvaluation.evaluationComplete),
enabled: fast_check_1.default.boolean(),
}), fast_check_1.default.record({
evaluationStatus: fast_check_1.default.constant(playground_strategy_schema_1.playgroundStrategyEvaluation.evaluationIncomplete),
enabled: fast_check_1.default.constantFrom(playground_strategy_schema_1.playgroundStrategyEvaluation.unknownResult, false),
})),
parameters,
constraints: playgroundStrategyConstraints(),
segments: fast_check_1.default.array(playgroundSegment()),
});
const playgroundStrategies = () => fast_check_1.default.array(fast_check_1.default.oneof(playgroundStrategy('default', fast_check_1.default.constant({})), playgroundStrategy('flexibleRollout', fast_check_1.default.record({
groupId: fast_check_1.default.lorem({ maxCount: 1 }),
rollout: fast_check_1.default.nat({ max: 100 }).map(String),
stickiness: fast_check_1.default.constantFrom('default', 'userId', 'sessionId'),
})), playgroundStrategy('applicationHostname', fast_check_1.default.record({
hostNames: fast_check_1.default
.uniqueArray(fast_check_1.default.domain())
.map((domains) => domains.join(',')),
})), playgroundStrategy('userWithId', fast_check_1.default.record({
userIds: fast_check_1.default
.uniqueArray(fast_check_1.default.emailAddress())
.map((ids) => ids.join(',')),
})), playgroundStrategy('remoteAddress', fast_check_1.default.record({
IPs: fast_check_1.default.uniqueArray(fast_check_1.default.ipV4()).map((ips) => ips.join(',')),
}))));
const generate = () => fast_check_1.default
.tuple((0, arbitraries_test_1.variants)(), fast_check_1.default.nat(), fast_check_1.default.record({
isEnabledInCurrentEnvironment: fast_check_1.default.boolean(),
projectId: (0, arbitraries_test_1.urlFriendlyString)(),
name: (0, arbitraries_test_1.urlFriendlyString)(),
strategies: playgroundStrategies(),
}))
.map(([generatedVariants, activeVariantIndex, feature]) => {
const strategyResult = () => {
const { strategies } = feature;
if (strategies.some((strategy) => strategy.result.enabled === true)) {
return true;
}
if (strategies.some((strategy) => strategy.result.enabled === 'unknown')) {
return 'unknown';
}
return false;
};
const isEnabled = feature.isEnabledInCurrentEnvironment &&
strategyResult() === true;
// the active variant is the disabled variant if the feature is
// disabled or has no variants.
let activeVariant = { name: 'disabled', enabled: false };
if (generatedVariants.length && isEnabled) {
const targetVariant = generatedVariants[activeVariantIndex % generatedVariants.length];
const targetPayload = targetVariant.payload
? targetVariant.payload
: undefined;
activeVariant = {
enabled: true,
name: targetVariant.name,
payload: targetPayload,
};
}
return {
...feature,
isEnabled,
strategies: {
result: strategyResult(),
data: feature.strategies,
},
variants: generatedVariants,
variant: activeVariant,
};
});
exports.generate = generate;
test('playgroundFeatureSchema', () => fast_check_1.default.assert(fast_check_1.default.property((0, exports.generate)(), fast_check_1.default.context(), (data, ctx) => {
const results = (0, validate_1.validateSchema)(playground_feature_schema_1.playgroundFeatureSchema.$id, data);
ctx.log(JSON.stringify(results));
return results === undefined;
})));
//# sourceMappingURL=playground-feature-schema.test.js.map