feat: replace chb with consent groups and preserve runtime config (api#317, #17)
deploy-preland / deploy zoomstage.online (push) Successful in 42s
deploy-preland / deploy zoomstage.online (push) Successful in 42s
This commit is contained in:
1 parent
188b78a115
commit
89cc16eb4a
12 files changed
+208
-9
No files matched your search
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/** preland#17: concrete cons независим от random-весов, старый chb не управляет переходом. */
|
||||
declare(strict_types=1);
|
||||
|
||||
$file = dirname(__DIR__) . '/components/cons-utm.php';
|
||||
if (!is_file($file)) {
|
||||
fwrite(STDERR, "FAIL: нормализация cons ещё не реализована.\n");
|
||||
exit(1);
|
||||
}
|
||||
require $file;
|
||||
$checks = 0;
|
||||
$expect = static function (bool $ok, string $message) use (&$checks): void {
|
||||
if (!$ok) throw new RuntimeException($message);
|
||||
$checks++;
|
||||
};
|
||||
$fixture = ['host'=>'api.example.test','utm'=>['theme'=>['default'=>'dark','weights'=>['dark'=>3]],'chb'=>['default'=>'a','weights'=>['a'=>1]]]];
|
||||
$normalized = prelandNormalizeConsConfig($fixture);
|
||||
$expect(!isset($normalized['utm']['chb']), 'Старый chb должен быть удалён из runtime-копии конфига.');
|
||||
$expect($normalized['host'] === $fixture['host'] && $normalized['utm']['theme'] === $fixture['utm']['theme'], 'Соседние поля должны сохраняться.');
|
||||
$expect($fixture['utm']['chb']['default'] === 'a', 'Нормализация не должна менять исходный массив.');
|
||||
$settings = $normalized['utm']['cons'];
|
||||
$expect(prelandResolveCons(null, $settings) === '2', 'Отсутствующее значение должно получить default2.');
|
||||
foreach (['1','2','3','99'] as $value) $expect(prelandResolveCons($value, $settings) === $value, 'Concrete cons должен приниматься независимо от весов: '.$value);
|
||||
foreach (['0','-1','a','1x','',[],['1']] as $value) $expect(prelandResolveCons($value, $settings) === '2', 'Неверное значение должно получить default2.');
|
||||
for ($i=0; $i<1000; $i++) $expect(prelandResolveCons('rnd', $settings) === '1', 'rnd обязан выбрать только группу1.');
|
||||
$settings = ['default'=>'2','weights'=>['2'=>0,'1'=>100]];
|
||||
for ($i=0; $i<1000; $i++) $expect(prelandResolveCons('rnd', $settings) === '1', 'Нулевой вес не должен случайно попасть в выборку.');
|
||||
$query = prelandNormalizeConsQuery(['chb'=>'a','cons'=>'3','utm_source'=>'ad','subid'=>'42'], $settings);
|
||||
$expect($query === ['cons'=>'3','utm_source'=>'ad','subid'=>'42'], 'Query должен удалить только chb и нормализовать cons.');
|
||||
$query = prelandNormalizeConsQuery(['chb'=>['b'],'utm_source'=>'ad'], $settings);
|
||||
$expect(!isset($query['chb']) && $query['cons'] === '2' && $query['utm_source'] === 'ad', 'Array legacy chb не должен влиять на fallback.');
|
||||
echo "PASS: cons resolver {$checks} checks\n";
|
||||
Reference in new issue
Block a user