signal-desktop/ts/test-both/RemoteConfig_test.ts
Fedor Indutny 366b875fd2 Introduce Service Id Types
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2023-08-21 09:30:32 -07:00

98 lines
2.4 KiB
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { normalizeAci } from '../types/ServiceId';
import {
getCountryCodeValue,
getBucketValue,
innerIsBucketValueEnabled,
} from '../RemoteConfig';
describe('RemoteConfig', () => {
const uuid = normalizeAci('15b9729c-51ea-4ddb-b516-652befe78062', 'test');
describe('#innerIsBucketValueEnabled', () => {
// Note: bucketValue is 497941 for 'desktop.stories2' key
it('returns true for 100% wildcard', () => {
assert.strictEqual(
innerIsBucketValueEnabled(
'desktop.stories2',
'*:1000000',
'+12125550000',
uuid
),
true
);
});
it('returns true for 50% on country code 1', () => {
assert.strictEqual(
innerIsBucketValueEnabled(
'desktop.stories2',
'1:500000',
'+12125550000',
uuid
),
true
);
});
it('returns false for 40% on country code 1', () => {
assert.strictEqual(
innerIsBucketValueEnabled(
'desktop.stories2',
'1:400000',
'+12125550000',
uuid
),
false
);
});
});
describe('#getCountryCodeValue', () => {
it('returns undefined for empty value', () => {
assert.strictEqual(getCountryCodeValue(1, '', 'flagName'), undefined);
});
it('throws for malformed flag', () => {
assert.throws(
() => getCountryCodeValue(1, 'hi:::', 'flagName'),
"invalid number ''"
);
});
it('throws for non-integer value', () => {
assert.throws(
() => getCountryCodeValue(1, '1:cd', 'flagName'),
"invalid number 'cd'"
);
});
it('returns wildcard value if no other codes', () => {
assert.strictEqual(getCountryCodeValue(1, '*:56,2:74', 'flagName'), 56);
});
it('returns value for specific codes, instead of wildcard', () => {
assert.strictEqual(getCountryCodeValue(1, '*:56,1:74', 'flagName'), 74);
});
it('returns undefined if no wildcard or specific value', () => {
assert.strictEqual(
getCountryCodeValue(1, '2:56,3:74', 'flagName'),
undefined
);
});
});
describe('#getBucketValue', () => {
it('returns undefined for empty value', () => {
const flagName = 'research.megaphone.1';
assert.strictEqual(getBucketValue(uuid, flagName), 243315);
});
});
});