File tree Expand file tree Collapse file tree 3 files changed +87
-0
lines changed
ab-testing/scripts/validation Expand file tree Collapse file tree 3 files changed +87
-0
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import { ABTests } from '../../abTest.ts';
22import { ABTest } from '../../types.ts' ;
33import { limitServerSideTests } from './limitServerSide.ts' ;
44import { allExpirationsValid } from './validExpiration.ts' ;
5+ import { validSizeOffset } from './validSizeOffset.ts' ;
56import { noVariantOverlap } from './variantOverlap.ts' ;
67
78type ValidationFunction = ( tests : ABTest [ ] ) => boolean ;
@@ -10,6 +11,7 @@ const rules: ValidationFunction[] = [
1011 noVariantOverlap ,
1112 limitServerSideTests ,
1213 allExpirationsValid ,
14+ validSizeOffset ,
1315] ;
1416
1517function validateTests ( testList : ABTest [ ] ) {
Original file line number Diff line number Diff line change 1+ import { assertThrows , assertEquals } from 'jsr:@std/assert' ;
2+ import { ABTest } from '../../types.ts' ;
3+ import { validSizeOffset } from './validSizeOffset.ts' ;
4+
5+ const baseTest : ABTest = {
6+ name : 'commercial-future' ,
7+ description : 'End on a weekday' ,
8+ 9+ status : 'ON' ,
10+ expirationDate : new Date ( ) ,
11+ type : 'client' ,
12+ highImpact : false ,
13+ audienceSize : 10 / 100 ,
14+ groups : [ 'control' , 'variant' ] ,
15+ } ;
16+ Deno . test (
17+ 'validSizeOffset - passes when audienceSize is between 0 and 1' ,
18+ ( ) => {
19+ const test : ABTest = {
20+ ...baseTest ,
21+ audienceSize : 0.5 ,
22+ } ;
23+
24+ assertEquals ( validSizeOffset ( [ test ] ) , true ) ;
25+ } ,
26+ ) ;
27+
28+ Deno . test ( 'validSizeOffset - throws when audienceSize is less than 0' , ( ) => {
29+ const test : ABTest = {
30+ ...baseTest ,
31+ audienceSize : - 0.1 ,
32+ } ;
33+
34+ assertThrows (
35+ ( ) => validSizeOffset ( [ test ] ) ,
36+ Error ,
37+ `Invalid audienceSize for test ${ test . name } ` ,
38+ ) ;
39+ } ) ;
40+
41+ Deno . test (
42+ 'validSizeOffset - throws when audienceSize is greater than 1' ,
43+ ( ) => {
44+ const test : ABTest = {
45+ ...baseTest ,
46+ audienceSize : 1.1 ,
47+ } ;
48+
49+ assertThrows (
50+ ( ) => validSizeOffset ( [ test ] ) ,
51+ Error ,
52+ `Invalid audienceSize for test ${ test . name } ` ,
53+ ) ;
54+ } ,
55+ ) ;
Original file line number Diff line number Diff line change 1+ import { ABTest } from '../../types.ts' ;
2+
3+ const _validSizeOffset = ( test : ABTest ) : boolean => {
4+ // Check if audienceSize is defined and is a number between 0 and 1
5+ if (
6+ typeof test . audienceSize !== 'number' ||
7+ test . audienceSize < 0 ||
8+ test . audienceSize > 1
9+ ) {
10+ throw new Error ( `Invalid audienceSize for test ${ test . name } ` ) ;
11+ }
12+
13+ // Check if audienceOffset is defined and is a number between 0 and 1
14+ if (
15+ test . audienceOffset !== undefined &&
16+ ( typeof test . audienceOffset !== 'number' ||
17+ test . audienceOffset < 0 ||
18+ test . audienceOffset > 1 )
19+ ) {
20+ throw new Error ( `Invalid audienceOffset for test ${ test . name } ` ) ;
21+ }
22+
23+ return true ;
24+ } ;
25+
26+ const validSizeOffset = ( tests : ABTest [ ] ) : boolean => {
27+ return tests . every ( _validSizeOffset ) ;
28+ } ;
29+
30+ export { validSizeOffset } ;
You can’t perform that action at this time.
0 commit comments