@@ -6,59 +6,104 @@ const API_KEY = 'server-qz35UwzJ5akieoAdIgzM4m9MIiOLXLoz';
66
77const testUser : ExperimentUser = { user_id : 'test_user' } ;
88
9- test ( 'ExperimentClient.fetch, success' , async ( ) => {
10- const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
11- const variants = await client . fetch ( testUser ) ;
12- const variant = variants [ 'sdk-ci-test' ] ;
13- delete variant . metadata ;
14- expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
15- } ) ;
9+ describe ( 'ExperimentClient.fetch' , ( ) => {
10+ beforeEach ( ( ) => {
11+ jest . clearAllMocks ( ) ;
12+ jest . resetAllMocks ( ) ;
13+ jest . restoreAllMocks ( ) ;
14+ } ) ;
1615
17- test ( 'ExperimentClient.fetch, no retries, timeout failure' , async ( ) => {
18- const client = new RemoteEvaluationClient ( API_KEY , {
19- fetchRetries : 0 ,
20- fetchTimeoutMillis : 0 ,
16+ test ( 'ExperimentClient.fetch, success' , async ( ) => {
17+ const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
18+ const variants = await client . fetch ( testUser ) ;
19+ const variant = variants [ 'sdk-ci-test' ] ;
20+ delete variant . metadata ;
21+ expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
2122 } ) ;
22- const variants = await client . fetch ( testUser ) ;
23- expect ( variants ) . toEqual ( { } ) ;
24- } ) ;
2523
26- test ( 'ExperimentClient.fetch, no retries, timeout failure, retry success' , async ( ) => {
27- const client = new RemoteEvaluationClient ( API_KEY , {
28- fetchRetries : 1 ,
29- fetchTimeoutMillis : 0 ,
24+ test ( 'ExperimentClient.fetch, no retries, timeout failure' , async ( ) => {
25+ const client = new RemoteEvaluationClient ( API_KEY , {
26+ fetchRetries : 0 ,
27+ fetchTimeoutMillis : 0 ,
28+ } ) ;
29+ const variants = await client . fetch ( testUser ) ;
30+ expect ( variants ) . toEqual ( { } ) ;
3031 } ) ;
31- const variants = await client . fetch ( testUser ) ;
32- const variant = variants [ 'sdk-ci-test' ] ;
33- delete variant . metadata ;
34- expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
35- } ) ;
3632
37- test ( 'ExperimentClient.fetch, retry once, timeout first then succeed with 0 backoff' , async ( ) => {
38- const client = new RemoteEvaluationClient ( API_KEY , {
39- fetchTimeoutMillis : 0 ,
40- fetchRetries : 1 ,
41- fetchRetryBackoffMinMillis : 0 ,
42- fetchRetryTimeoutMillis : 10_000 ,
33+ test ( 'ExperimentClient.fetch, no retries, timeout failure, retry success' , async ( ) => {
34+ const client = new RemoteEvaluationClient ( API_KEY , {
35+ fetchRetries : 1 ,
36+ fetchTimeoutMillis : 0 ,
37+ } ) ;
38+ const variants = await client . fetch ( testUser ) ;
39+ const variant = variants [ 'sdk-ci-test' ] ;
40+ delete variant . metadata ;
41+ expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
4342 } ) ;
44- const variants = await client . fetch ( testUser ) ;
45- const variant = variants [ 'sdk-ci-test' ] ;
46- delete variant . metadata ;
47- expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
48- } ) ;
4943
50- test ( 'ExperimentClient.fetch, v1 off returns undefined' , async ( ) => {
51- const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
52- const variant = ( await client . fetch ( { } ) ) [ 'sdk-ci-test' ] ;
53- expect ( variant ) . toBeUndefined ( ) ;
54- } ) ;
44+ test ( 'ExperimentClient.fetch, retry once, timeout first then succeed with 0 backoff' , async ( ) => {
45+ const client = new RemoteEvaluationClient ( API_KEY , {
46+ fetchTimeoutMillis : 0 ,
47+ fetchRetries : 1 ,
48+ fetchRetryBackoffMinMillis : 0 ,
49+ fetchRetryTimeoutMillis : 10_000 ,
50+ } ) ;
51+ const variants = await client . fetch ( testUser ) ;
52+ const variant = variants [ 'sdk-ci-test' ] ;
53+ delete variant . metadata ;
54+ expect ( variant ) . toEqual ( { key : 'on' , value : 'on' , payload : 'payload' } ) ;
55+ } ) ;
56+
57+ test ( 'ExperimentClient.fetch, v1 off returns undefined' , async ( ) => {
58+ const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
59+ const variant = ( await client . fetch ( { } ) ) [ 'sdk-ci-test' ] ;
60+ expect ( variant ) . toBeUndefined ( ) ;
61+ } ) ;
62+
63+ test ( 'ExperimentClient.fetch, v2 off returns default variant' , async ( ) => {
64+ const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
65+ const variant = ( await client . fetchV2 ( { } ) ) [ 'sdk-ci-test' ] ;
66+ expect ( variant . key ) . toEqual ( 'off' ) ;
67+ expect ( variant . value ) . toBeUndefined ( ) ;
68+ expect ( variant . metadata . default ) . toEqual ( true ) ;
69+ } ) ;
70+
71+ test ( 'ExperimentClient.fetch, v2 no tracksAssignment and no tracksExposure' , async ( ) => {
72+ const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
73+ const getVariantsSpy = jest . spyOn (
74+ ( client as any ) . evaluationApi ,
75+ 'getVariants' ,
76+ ) ;
77+ const variants = await client . fetchV2 ( testUser ) ;
78+ expect ( variants [ 'sdk-ci-test' ] . key ) . toEqual ( 'on' ) ;
79+ expect ( getVariantsSpy ) . toHaveBeenCalledWith (
80+ expect . objectContaining ( testUser ) ,
81+ expect . not . objectContaining ( {
82+ trackingOption : expect . any ( String ) ,
83+ exposureTrackingOption : expect . any ( String ) ,
84+ } ) ,
85+ ) ;
86+ } ) ;
5587
56- test ( 'ExperimentClient.fetch, v2 off returns default variant' , async ( ) => {
57- const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
58- const variant = ( await client . fetchV2 ( { } ) ) [ 'sdk-ci-test' ] ;
59- expect ( variant . key ) . toEqual ( 'off' ) ;
60- expect ( variant . value ) . toBeUndefined ( ) ;
61- expect ( variant . metadata . default ) . toEqual ( true ) ;
88+ test ( 'ExperimentClient.fetch, v2 tracksAssignment and tracksExposure' , async ( ) => {
89+ const client = new RemoteEvaluationClient ( API_KEY , { } ) ;
90+ const getVariantsSpy = jest . spyOn (
91+ ( client as any ) . evaluationApi ,
92+ 'getVariants' ,
93+ ) ;
94+ const variants = await client . fetchV2 ( testUser , {
95+ tracksAssignment : true ,
96+ tracksExposure : true ,
97+ } ) ;
98+ expect ( variants [ 'sdk-ci-test' ] . key ) . toEqual ( 'on' ) ;
99+ expect ( getVariantsSpy ) . toHaveBeenCalledWith (
100+ expect . objectContaining ( testUser ) ,
101+ expect . objectContaining ( {
102+ trackingOption : 'track' ,
103+ exposureTrackingOption : 'track' ,
104+ } ) ,
105+ ) ;
106+ } ) ;
62107} ) ;
63108
64109describe ( 'ExperimentClient.fetch, retry with different response codes' , ( ) => {
0 commit comments