1+ const { SplitFactory } = require ( '../' ) ;
2+ const { fetchMock } = require ( './utils/fetchMock' ) ;
3+
4+ const splitChangesMock1 = require ( './mocks/splitchanges.since.-1.json' ) ;
5+ const splitChangesMock2 = require ( './mocks/splitchanges.since.1457552620999.json' ) ;
6+
7+
8+ describe ( 'Evaluator Integration (Online Mode)' , ( ) => {
9+ const apiKey = 'sdk-test-api-key' ;
10+ const testUrls = {
11+ sdk : 'https://sdk.baseurl' ,
12+ events : 'https://events.baseurl' ,
13+ auth : 'https://auth.baseurl' ,
14+ telemetry : 'https://telemetry.baseurl' ,
15+ } ;
16+
17+ fetchMock . get ( testUrls . sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1' , { status : 200 , body : splitChangesMock1 } ) ;
18+ fetchMock . get ( testUrls . sdk + '/splitChanges?s=1.3&since=1457552620999&rbSince=100' , { status : 200 , body : splitChangesMock2 } ) ;
19+ fetchMock . get ( testUrls . auth + '/v2/auth?s=1.3' , 200 ) ;
20+ fetchMock . getOnce ( testUrls . sdk + '/segmentChanges/employees?since=-1' , { status : 200 , body : { name : 'employees' , added : [ ] , removed : [ ] , since : - 1 , till : 100 } } ) ;
21+ fetchMock . getOnce ( testUrls . sdk + '/segmentChanges/splitters?since=-1' , { status : 200 , body : { name : 'splitters' , added : [ ] , removed : [ ] , since : - 1 , till : 100 } } ) ;
22+ fetchMock . getOnce ( testUrls . sdk + '/segmentChanges/developers?since=-1' , { status : 200 , body : { name : 'developers' , added : [ ] , removed : [ ] , since : - 1 , till : 100 } } ) ;
23+ fetchMock . get ( testUrls . sdk + '/segmentChanges/employees?since=100' , { status : 200 , body : { name : 'employees' , added : [ ] , removed : [ ] , since : 100 , till : 100 } } ) ;
24+ fetchMock . get ( testUrls . sdk + '/segmentChanges/splitters?since=100' , { status : 200 , body : { name : 'splitters' , added : [ ] , removed : [ ] , since : 100 , till : 100 } } ) ;
25+ fetchMock . get ( testUrls . sdk + '/segmentChanges/developers?since=100' , { status : 200 , body : { name : 'developers' , added : [ ] , removed : [ ] , since : 100 , till : 100 } } ) ;
26+ fetchMock . postOnce ( testUrls . events + '/testImpressions/bulk' , 200 ) ;
27+ fetchMock . postOnce ( testUrls . events + '/testImpressions/count' , 200 ) ;
28+ fetchMock . get ( testUrls . sdk + '/segmentChanges/segment_excluded_by_rbs?since=-1' , { status : 200 , body : { added : [ 'emi@split.io' ] , removed : [ ] , since : - 1 , till : 1 } } ) ;
29+ fetchMock . get ( testUrls . sdk + '/segmentChanges/segment_excluded_by_rbs?since=1' , { status : 200 , body : { added : [ ] , removed : [ ] , since : 1 , till : 1 } } ) ;
30+ fetchMock . post ( testUrls . events + '/testImpressions/bulk' , 200 ) ;
31+ fetchMock . post ( testUrls . events + '/testImpressions/count' , 200 ) ;
32+ fetchMock . post ( testUrls . telemetry + '/v1/metrics/config' , 200 ) ;
33+ fetchMock . post ( testUrls . telemetry + '/v1/metrics/usage' , 200 ) ;
34+
35+ afterAll ( ( ) => {
36+ fetchMock . reset ( ) ;
37+ } ) ;
38+
39+ test ( 'Full Lifecycle: Init -> Download -> Evaluate -> Destroy' , async ( ) => {
40+ const factory = SplitFactory ( {
41+ core : { authorizationKey : apiKey } ,
42+ startup : { readyTimeout : 2 } ,
43+ urls : testUrls ,
44+ } ) ;
45+ const client = factory . client ( ) ;
46+
47+ await new Promise ( ( resolve , reject ) => {
48+ client . on ( client . Event . SDK_READY , resolve ) ;
49+ client . on ( client . Event . SDK_READY_TIMED_OUT , ( ) => reject ( new Error ( 'Timeout waiting for SDK_READY' ) ) ) ;
50+ } ) ;
51+
52+ // 2. Verify Evaluation (Storage working)
53+ const treatment = client . getTreatment ( 'user1' , 'always_on' ) ;
54+ expect ( treatment ) . toBe ( 'on' ) ;
55+
56+ // 3. Verify Cleanup
57+ await client . destroy ( ) ;
58+ } ) ;
59+ } ) ;
0 commit comments