@@ -3,11 +3,15 @@ import { NAME_CURVE } from '../mocks';
33import { base64ToBytes , bytesToBase64 } from '../encoding/base64' ;
44import { EventType } from '../callbackManager' ;
55import { sdkWindow , UID2 } from '../uid2Sdk' ;
6+ import { EUID } from '../euidSdk' ;
67
78let uid2 : UID2 ;
9+ let euid : EUID ;
10+ let uid2OrEuid : UID2 | EUID ;
811let xhrMock : any ;
912let serverKeyPair : CryptoKeyPair ;
10- let serverPublicKey : string ;
13+ let serverPublicKeyUid2 : string ;
14+ let serverPublicKeyEuid : string ;
1115
1216mocks . setupFakeTime ( ) ;
1317
@@ -22,62 +26,120 @@ beforeAll(async () => {
2226 ) ;
2327
2428 const serverPubKeyArray = await crypto . subtle . exportKey ( 'spki' , serverKeyPair . publicKey ) ;
25- serverPublicKey = `UID2-X-L-` + bytesToBase64 ( new Uint8Array ( serverPubKeyArray ) ) ;
29+ serverPublicKeyUid2 = `UID2-X-L-` + bytesToBase64 ( new Uint8Array ( serverPubKeyArray ) ) ;
30+ serverPublicKeyEuid = `EUID-X-L-` + bytesToBase64 ( new Uint8Array ( serverPubKeyArray ) ) ;
2631} ) ;
2732
2833beforeEach ( ( ) => {
2934 xhrMock = new mocks . XhrMock ( sdkWindow ) ;
3035 mocks . setCookieMock ( sdkWindow . document ) ;
3136 removeUid2LocalStorage ( ) ;
37+ removeEuidLocalStorage ( ) ;
3238} ) ;
3339
3440afterEach ( ( ) => {
3541 mocks . resetFakeTime ( ) ;
3642} ) ;
3743
3844const removeUid2LocalStorage = mocks . removeUid2LocalStorage ;
45+ const removeEuidLocalStorage = mocks . removeEuidLocalStorage ;
3946
4047describe ( 'Client-side token generation Tests' , ( ) => {
4148 const scenarios = [
4249 {
4350 name : 'setIdentityFromEmail' ,
44- setInvalidIdentity : ( ) => uid2 . setIdentityFromEmail ( 'test.com' , mocks . makeCstgOption ( ) ) ,
51+ identityType : 'uid2' ,
52+ setInvalidIdentity : ( ) => uid2 . setIdentityFromEmail ( 'test.com' , mocks . makeUid2CstgOption ( ) ) ,
4553 setIdentity : ( serverPublicKey ?: string ) =>
46- uid2 . setIdentityFromEmail ( '[email protected] ' , mocks . makeCstgOption ( { serverPublicKey
} ) ) , 54+ uid2 . setIdentityFromEmail (
55+ 56+ mocks . makeUid2CstgOption ( { serverPublicKey } )
57+ ) ,
4758 } ,
4859 {
4960 name : 'setIdentityFromEmailHash' ,
61+ identityType : 'uid2' ,
5062 setInvalidIdentity : ( ) =>
51- uid2 . setIdentityFromEmailHash ( '[email protected] ' , mocks . makeCstgOption ( ) ) , 63+ uid2 . setIdentityFromEmailHash ( '[email protected] ' , mocks . makeUid2CstgOption ( ) ) , 5264 setIdentity : ( serverPublicKey ?: string ) =>
5365 uid2 . setIdentityFromEmailHash (
5466 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=' ,
55- mocks . makeCstgOption ( { serverPublicKey } )
67+ mocks . makeUid2CstgOption ( { serverPublicKey } )
5668 ) ,
5769 } ,
5870 {
5971 name : 'setIdentityFromPhone' ,
60- setInvalidIdentity : ( ) => uid2 . setIdentityFromPhone ( '12345678910' , mocks . makeCstgOption ( ) ) ,
72+ identityType : 'uid2' ,
73+ setInvalidIdentity : ( ) =>
74+ uid2 . setIdentityFromPhone ( '12345678910' , mocks . makeUid2CstgOption ( ) ) ,
6175 setIdentity : ( serverPublicKey ?: string ) =>
62- uid2 . setIdentityFromPhone ( '+12345678910' , mocks . makeCstgOption ( { serverPublicKey } ) ) ,
76+ uid2 . setIdentityFromPhone ( '+12345678910' , mocks . makeUid2CstgOption ( { serverPublicKey } ) ) ,
6377 } ,
6478 {
6579 name : 'setIdentityFromPhoneHash' ,
80+ identityType : 'uid2' ,
6681 setInvalidIdentity : ( ) =>
67- uid2 . setIdentityFromPhoneHash ( '+12345678910' , mocks . makeCstgOption ( ) ) ,
82+ uid2 . setIdentityFromPhoneHash ( '+12345678910' , mocks . makeUid2CstgOption ( ) ) ,
6883 setIdentity : ( serverPublicKey ?: string ) =>
6984 uid2 . setIdentityFromPhoneHash (
7085 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=' ,
71- mocks . makeCstgOption ( { serverPublicKey } )
86+ mocks . makeUid2CstgOption ( { serverPublicKey } )
87+ ) ,
88+ } ,
89+ {
90+ name : 'setIdentityFromEmail' ,
91+ identityType : 'euid' ,
92+ setInvalidIdentity : ( ) => euid . setIdentityFromEmail ( 'test.com' , mocks . makeEuidCstgOption ( ) ) ,
93+ setIdentity : ( serverPublicKey ?: string ) =>
94+ euid . setIdentityFromEmail (
95+ 96+ mocks . makeEuidCstgOption ( { serverPublicKey } )
97+ ) ,
98+ } ,
99+ {
100+ name : 'setIdentityFromEmailHash' ,
101+ identityType : 'euid' ,
102+ setInvalidIdentity : ( ) =>
103+ euid . setIdentityFromEmailHash ( '[email protected] ' , mocks . makeEuidCstgOption ( ) ) , 104+ setIdentity : ( serverPublicKey ?: string ) =>
105+ euid . setIdentityFromEmailHash (
106+ 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=' ,
107+ mocks . makeEuidCstgOption ( { serverPublicKey } )
108+ ) ,
109+ } ,
110+ {
111+ name : 'setIdentityFromPhone' ,
112+ identityType : 'euid' ,
113+ setInvalidIdentity : ( ) =>
114+ euid . setIdentityFromPhone ( '12345678910' , mocks . makeEuidCstgOption ( ) ) ,
115+ setIdentity : ( serverPublicKey ?: string ) =>
116+ euid . setIdentityFromPhone ( '+12345678910' , mocks . makeEuidCstgOption ( { serverPublicKey } ) ) ,
117+ } ,
118+ {
119+ name : 'setIdentityFromPhoneHash' ,
120+ identityType : 'euid' ,
121+ setInvalidIdentity : ( ) =>
122+ euid . setIdentityFromPhoneHash ( '+12345678910' , mocks . makeEuidCstgOption ( ) ) ,
123+ setIdentity : ( serverPublicKey ?: string ) =>
124+ euid . setIdentityFromPhoneHash (
125+ 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=' ,
126+ mocks . makeEuidCstgOption ( { serverPublicKey } )
72127 ) ,
73128 } ,
74129 ] ;
75130
76131 scenarios . forEach ( ( scenario ) => {
77132 describe ( scenario . name , ( ) => {
78133 beforeEach ( ( ) => {
79- uid2 = new UID2 ( ) ;
80- uid2 . init ( { } ) ;
134+ if ( scenario . identityType === 'uid2' ) {
135+ uid2 = new UID2 ( ) ;
136+ uid2 . init ( { } ) ;
137+ uid2OrEuid = uid2 ;
138+ } else if ( scenario . identityType === 'euid' ) {
139+ euid = new EUID ( ) ;
140+ euid . init ( { } ) ;
141+ uid2OrEuid = euid ;
142+ }
81143 } ) ;
82144
83145 describe ( 'When invalid identity is provided' , ( ) => {
@@ -107,35 +169,47 @@ describe('Client-side token generation Tests', () => {
107169 } ) ;
108170
109171 test ( 'should invoke the callback when token is generated' , ( done ) => {
110- uid2 . callbacks . push ( ( eventType , payload ) => {
172+ uid2OrEuid . callbacks . push ( ( eventType , payload ) => {
111173 if ( eventType === EventType . IdentityUpdated ) {
112174 expect ( payload . identity ) . toEqual ( cstgToken ) ;
113175 done ( ) ;
114176 }
115177 } ) ;
116- scenario . setIdentity ( serverPublicKey ) ;
178+ scenario . setIdentity (
179+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
180+ ) ;
117181 } ) ;
118182
119183 test ( 'should set identity to storage' , async ( ) => {
120- await scenario . setIdentity ( serverPublicKey ) ;
121- expect ( mocks . getUid2 ( ) ) . toEqual ( cstgToken ) ;
184+ await scenario . setIdentity (
185+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
186+ ) ;
187+ scenario . identityType === 'uid2'
188+ ? expect ( mocks . getUid2 ( ) ) . toEqual ( cstgToken )
189+ : expect ( mocks . getEuid ( ) ) . toEqual ( cstgToken ) ;
122190 } ) ;
123191
124- test ( 'UID2 should be in available state' , async ( ) => {
125- await scenario . setIdentity ( serverPublicKey ) ;
126- ( expect ( uid2 ) as any ) . toBeInAvailableState ( cstgToken . advertising_token ) ;
192+ test ( 'UID2 or EUID should be in available state' , async ( ) => {
193+ await scenario . setIdentity (
194+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
195+ ) ;
196+ ( expect ( uid2OrEuid ) as any ) . toBeInAvailableState ( cstgToken . advertising_token ) ;
127197 } ) ;
128198
129199 test ( 'should refresh token when generated token requires a refresh' , async ( ) => {
130- await scenario . setIdentity ( serverPublicKey ) ;
200+ await scenario . setIdentity (
201+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
202+ ) ;
131203 const refreshedToken = {
132204 ...mocks . makeIdentityV2 ( ) ,
133205 advertising_token : 'refreshed_token' ,
134206 } ;
135207 jest . setSystemTime ( refreshFrom ) ;
136208 jest . runOnlyPendingTimers ( ) ;
137209 xhrMock . sendIdentityInEncodedResponse ( refreshedToken , cstgToken . refresh_response_key ) ;
138- expect ( await uid2 ! . getAdvertisingTokenAsync ( ) ) . toBe ( refreshedToken . advertising_token ) ;
210+ expect ( await uid2OrEuid ! . getAdvertisingTokenAsync ( ) ) . toBe (
211+ refreshedToken . advertising_token
212+ ) ;
139213 } ) ;
140214 } ) ;
141215
@@ -152,16 +226,22 @@ describe('Client-side token generation Tests', () => {
152226 } ) ;
153227 } ) ;
154228 test ( 'should not set identity' , async ( ) => {
155- await expect ( scenario . setIdentity ( serverPublicKey ) ) . rejects . toEqual (
156- 'Client error: Here is a client error'
157- ) ;
158- expect ( mocks . getUid2 ( ) ) . toBeNull ( ) ;
229+ await expect (
230+ scenario . setIdentity (
231+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
232+ )
233+ ) . rejects . toEqual ( 'Client error: Here is a client error' ) ;
234+ scenario . identityType === 'uid2'
235+ ? expect ( mocks . getUid2 ( ) ) . toBeNull ( )
236+ : expect ( mocks . getEuid ( ) ) . toBeNull ( ) ;
159237 } ) ;
160238 test ( 'should be in unavailable state' , async ( ) => {
161- await expect ( scenario . setIdentity ( serverPublicKey ) ) . rejects . toEqual (
162- 'Client error: Here is a client error'
163- ) ;
164- ( expect ( uid2 ) as any ) . toBeInUnavailableState ( ) ;
239+ await expect (
240+ scenario . setIdentity (
241+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
242+ )
243+ ) . rejects . toEqual ( 'Client error: Here is a client error' ) ;
244+ ( expect ( uid2OrEuid ) as any ) . toBeInUnavailableState ( ) ;
165245 } ) ;
166246 } ) ;
167247
@@ -178,28 +258,34 @@ describe('Client-side token generation Tests', () => {
178258 ) ;
179259 } ) ;
180260 } ) ;
181- test ( 'UID2 should be in optout state' , async ( ) => {
182- await scenario . setIdentity ( serverPublicKey ) ;
183- ( expect ( uid2 ) as any ) . toBeInOptoutState ( ) ;
261+ test ( 'UID2 or EUID should be in optout state' , async ( ) => {
262+ await scenario . setIdentity (
263+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
264+ ) ;
265+ ( expect ( uid2OrEuid ) as any ) . toBeInOptoutState ( ) ;
184266 } ) ;
185267
186268 test ( 'The callback should be called with no identity' , ( done ) => {
187- uid2 . callbacks . push ( ( eventType , payload ) => {
269+ uid2OrEuid . callbacks . push ( ( eventType , payload ) => {
188270 if ( eventType === EventType . IdentityUpdated ) {
189271 expect ( payload . identity ) . toBeNull ( ) ;
190272 done ( ) ;
191273 }
192274 } ) ;
193- scenario . setIdentity ( serverPublicKey ) ;
275+ scenario . setIdentity (
276+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
277+ ) ;
194278 } ) ;
195279
196280 test ( 'The callback should be called with an optout event' , ( done ) => {
197- uid2 . callbacks . push ( ( eventType , payload ) => {
281+ uid2OrEuid . callbacks . push ( ( eventType , payload ) => {
198282 if ( eventType === EventType . OptoutReceived ) {
199283 done ( ) ;
200284 }
201285 } ) ;
202- scenario . setIdentity ( serverPublicKey ) ;
286+ scenario . setIdentity (
287+ scenario . identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid
288+ ) ;
203289 } ) ;
204290 } ) ;
205291 } ) ;
0 commit comments