1+ /* eslint-disable sonarjs/no-duplicate-string */
12// cSpell:ignore kora subhandles
23/* eslint-disable no-magic-numbers */
34/* eslint-disable camelcase */
45import { Cardano , HandleResolution } from '@cardano-sdk/core' ;
56import { KoraLabsHandleProvider } from '@cardano-sdk/cardano-services-client' ;
7+ import MockAdapter from 'axios-mock-adapter' ;
8+ import axios from 'axios' ;
69
710const handlePolicyId = 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ;
811
@@ -11,6 +14,180 @@ const config = {
1114 serverUrl : 'https://preprod.api.handle.me/'
1215} ;
1316
17+ const test_handle_1 = {
18+ bg_asset : 'e517b38693b633f1bc0dd3eb69cb1ad0f0c198c67188405901ae63a3001bc28068616e646c65735f6e61747572652d6c616b65' ,
19+ bg_image : 'ipfs://zdj7Wjfr1dZz7Kao2ADZSF3xttBm7AJewWH5sARvG6XkmaprT' ,
20+ characters : 'letters,numbers,special' ,
21+ created_slot_number : 35_479_476 ,
22+ default_in_wallet : 'cde' ,
23+ handle_type : 'handle' ,
24+ has_datum : false ,
25+ hex : '000de140746573745f68616e646c655f31' ,
26+ holder : 'stake_test1uract9p2rvczsaxzdmvhlplj4ngduhfztdsru0hvegazldgrtgynh' ,
27+ holder_type : 'wallet' ,
28+ image : 'ipfs://zb2rheiGzwihXcW7FSnFUmCeGdRMJrVtynMYy3o9xKSr2myD8' ,
29+ image_hash : '26321fc1f9aac61c950c08c5fd7299e36173002e6f6b8ab7f748068879796ba3' ,
30+ last_update_address :
31+ '0x00e8fc28480c73486d288074c5ac7660ad0611ae5ce505de194353466961ea70af1de71795df52e62d1c0f2c8817f13b5cd4b40e04cab5ad6a' ,
32+ length : 13 ,
33+ name : 'test_handle_1' ,
34+ numeric_modifiers : '' ,
35+ og_number : 0 ,
36+ payment_key_hash : 'cf1b5fe70c1ab3b1da0bcbb18267502ec5fdfb0522eb0de359151ce8' ,
37+ pfp_image : '' ,
38+ policy : 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ,
39+ pz_enabled : false ,
40+ rarity : 'basic' ,
41+ resolved_addresses : {
42+ ada : 'addr_test1qr83khl8psdt8vw6p09mrqn82qhvtl0mq53wkr0rty23e68msk2z5xes9p6vymke07rl9txsmewjykmq8clwej36976s2ay8ev'
43+ } ,
44+ standard_image : 'ipfs://zb2rheiGzwihXcW7FSnFUmCeGdRMJrVtynMYy3o9xKSr2myD8' ,
45+ standard_image_hash :
46+ '37376533393939366463353066643131353033376536636234373661343933653930666161396362356531633536323939306361383764346236383531613666' ,
47+ svg_version : '1.13.0' ,
48+ updated_slot_number : 80_137_815 ,
49+ utxo : '47a95080175d8dad8480d0cb052b88fbb18382b1186aec3564088866b95ce269#0' ,
50+ version : 1
51+ } ;
52+
53+ const test_handle_2 = {
54+ bg_image : '' ,
55+ characters : 'letters,numbers,special' ,
56+ created_slot_number : 36_089_789 ,
57+ default_in_wallet : 'cde' ,
58+ handle_type : 'handle' ,
59+ has_datum : false ,
60+ hex : '000de140746573745f68616e646c655f32' ,
61+ holder : 'stake_test1uract9p2rvczsaxzdmvhlplj4ngduhfztdsru0hvegazldgrtgynh' ,
62+ holder_type : 'wallet' ,
63+ image : 'ipfs://zb2rhaLNcs1bRDyTaKFUZ1BcseBj45JUgo5HzezdBC2BFzYdw' ,
64+ image_hash : '740a3916076b375e39f3bf6a7bb482bc652958fb59c59c8244c0b38fa48e5b06' ,
65+ last_update_address :
66+ '0x00a6801d5bbd8405ac0c6d8e4fd56eb573df3e5d567d22a8c5601dd5b6156eea2a4aa7717720f50abaf8baa341124dbf18b43ee2e349d83af4' ,
67+ length : 13 ,
68+ name : 'test_handle_2' ,
69+ numeric_modifiers : '' ,
70+ og_number : 0 ,
71+ payment_key_hash : 'cf1b5fe70c1ab3b1da0bcbb18267502ec5fdfb0522eb0de359151ce8' ,
72+ pfp_image : '' ,
73+ policy : 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ,
74+ pz_enabled : false ,
75+ rarity : 'basic' ,
76+ resolved_addresses : {
77+ ada : 'addr_test1qr83khl8psdt8vw6p09mrqn82qhvtl0mq53wkr0rty23e68msk2z5xes9p6vymke07rl9txsmewjykmq8clwej36976s2ay8ev'
78+ } ,
79+ standard_image : 'ipfs://zb2rhaLNcs1bRDyTaKFUZ1BcseBj45JUgo5HzezdBC2BFzYdw' ,
80+ standard_image_hash :
81+ '33366438366439656366383236656637393366386439393335363330666266303565393033643934653430323139353463376662336438353663663361393832' ,
82+ svg_version : '3.0.0' ,
83+ updated_slot_number : 80_137_815 ,
84+ utxo : '47a95080175d8dad8480d0cb052b88fbb18382b1186aec3564088866b95ce269#0' ,
85+ version : 1
86+ } ;
87+
88+ const handle_ = {
89+ characters : 'letters' ,
90+ created_slot_number : 66_464_780 ,
91+ default_in_wallet : '1925' ,
92+ handle_type : 'handle' ,
93+ has_datum : false ,
94+ hex : '000de14068616e646c65' ,
95+ holder : 'stake_test1urcs5pxwju0eex77jftma9hetf8avkdqwftlkc57fr4ataqcvgpaz' ,
96+ holder_type : 'wallet' ,
97+ image : 'ipfs://zb2rhmoP92QisWdhs76eUYsLbH85cfs4mkJzYm69eA1EPZYWS' ,
98+ image_hash : 'e134411636b3a147dde4763cff01d651aacd1a5a397c11736810020cf95cf307' ,
99+ last_update_address :
100+ '0x0022b74d2e789358eddd5ac9441477583eae01af674b2226faa92ec44ef10a04ce971f9c9bde9257be96f95a4fd659a07257fb629e48ebd5f4' ,
101+ length : 6 ,
102+ name : 'handle' ,
103+ numeric_modifiers : '' ,
104+ og_number : 0 ,
105+ payment_key_hash : '22b74d2e789358eddd5ac9441477583eae01af674b2226faa92ec44e' ,
106+ policy : 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ,
107+ pz_enabled : false ,
108+ rarity : 'common' ,
109+ resolved_addresses : {
110+ ada : 'addr_test1qq3twnfw0zf43mwatty5g9rhtql2uqd0va9jyfh64yhvgnh3pgzva9clnjdaayjhh6t0jkj06ev6qujhld3fuj8t6h6q9a037y'
111+ } ,
112+ standard_image : 'ipfs://zb2rhmoP92QisWdhs76eUYsLbH85cfs4mkJzYm69eA1EPZYWS' ,
113+ standard_image_hash : 'e134411636b3a147dde4763cff01d651aacd1a5a397c11736810020cf95cf307' ,
114+ svg_version : '3.0.8' ,
115+ updated_slot_number : 66_464_780 ,
116+ utxo : 'daf2b0025ce52ce5b14aed06d3c8a65a2a5ce04184a2bc1bd5e66413d476f536#2' ,
117+ version : 1
118+ } ;
119+
120+ const ada_handle = {
121+ bg_image : '' ,
122+ characters : 'letters,special' ,
123+ created_slot_number : 69_795_802 ,
124+ default_in_wallet : 'goodgood' ,
125+ handle_type : 'handle' ,
126+ has_datum : false ,
127+ hex : '000de1406164612e68616e646c65' ,
128+ holder : 'stake_test1uqv7h4p9uegkxp86h4c9lp8egxzul7y9skn6j7uv2kscqrqvs9fuh' ,
129+ holder_type : 'wallet' ,
130+ image : 'ipfs://zb2rhkzJM1xbi4Wd3fMEXpmzNWd8s9a45yYUzckHFPmUrDjDu' ,
131+ image_hash : 'd5248957460ebe56fe1b776dc7c97e2166088bb558f6a449881d2a9bb96c88a4' ,
132+ last_update_address :
133+ '0x0059af3b60893002498bd0fc84bd64f8487eecb0df845ad9e60932aa8674eb22ead1bf6ec66d107e916772585f1bc8390b76498fbe0a05365e' ,
134+ length : 10 ,
135+ name : 'ada.handle' ,
136+ numeric_modifiers : '' ,
137+ og_number : 0 ,
138+ payment_key_hash : '5246584e62db5939298f453ded5061229381b06e3d9fdf107b4e1e9d' ,
139+ pfp_image : '' ,
140+ policy : 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ,
141+ pz_enabled : true ,
142+ rarity : 'basic' ,
143+ resolved_addresses : {
144+ ada : 'addr_test1qpfyvkzwvtd4jwff3aznmm2svy3f8qdsdc7elhcs0d8pa8gea02ztej3vvz040tst7z0jsv9elugtpd849acc4dpsqxqx9746k'
145+ } ,
146+ standard_image : 'ipfs://zb2rhkzJM1xbi4Wd3fMEXpmzNWd8s9a45yYUzckHFPmUrDjDu' ,
147+ standard_image_hash : 'd5248957460ebe56fe1b776dc7c97e2166088bb558f6a449881d2a9bb96c88a4' ,
148+ svg_version : '3.0.8' ,
149+ updated_slot_number : 69_863_096 ,
150+ utxo : 'dcc7317400344786509aa8f5f8ac1feaee40aed7eddf4b51df54ba89d80730b3#0' ,
151+ version : 1
152+ } ;
153+
154+ const space_ada_handle = {
155+ characters : 'letters,special' ,
156+ created_slot_number : 69_871_820 ,
157+ default_in_wallet : 'conraddit' ,
158+ handle_type : 'virtual_subhandle' ,
159+ has_datum : false ,
160+ hex : '000000007370616365406164612e68616e646c65' ,
161+ holder : 'stake_test1up6wkgh26xlka3ndzplfzemjtp03hjpepdmynra7pgznvhsycsez9' ,
162+ holder_type : 'wallet' ,
163+ image : 'ipfs://zb2rhkzJM1xbi4Wd3fMEXpmzNWd8s9a45yYUzckHFPmUrDjDu' ,
164+ image_hash : '26fe10e21dd178888ab41ab8c2c3b5bba08e58a4aec1108aafa7d5d4ce12276a' ,
165+ last_update_address :
166+ '0x005246584e62db5939298f453ded5061229381b06e3d9fdf107b4e1e9d19ebd425e6516304fabd705f84f94185cff88585a7a97b8c55a1800c' ,
167+ length : 16 ,
168+ name : 'space@ada.handle' ,
169+ numeric_modifiers : '' ,
170+ og_number : 0 ,
171+ payment_key_hash : '59af3b60893002498bd0fc84bd64f8487eecb0df845ad9e60932aa86' ,
172+ policy : 'f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a' ,
173+ pz_enabled : true ,
174+ rarity : 'basic' ,
175+ resolved_addresses : {
176+ ada : 'addr_test1qpv67wmq3ycqyjvt6r7gf0tylpy8am9sm7z94k0xpye24pn5av3w45dldmrx6yr7j9nhykzlr0yrjzmkfx8muzs9xe0q9vuv59'
177+ } ,
178+ standard_image : '' ,
179+ standard_image_hash : '26fe10e21dd178888ab41ab8c2c3b5bba08e58a4aec1108aafa7d5d4ce12276a' ,
180+ sub_characters : 'letters' ,
181+ sub_length : 5 ,
182+ sub_numeric_modifiers : '' ,
183+ sub_rarity : 'common' ,
184+ svg_version : '3.0.8' ,
185+ updated_slot_number : 69_871_820 ,
186+ utxo : '94b18568d8b1b7d02530bf83e8c83f21437a9ef4aebabb6ccdd1e1fec0638039#2' ,
187+ version : 0 ,
188+ virtual : { expires_time : 1_757_091_000_789 , public_mint : false }
189+ } ;
190+
14191const checkHandleResolution = ( source : string , result : unknown ) => {
15192 expect ( typeof result ) . toBe ( 'object' ) ;
16193
@@ -26,36 +203,59 @@ const checkHandleResolution = (source: string, result: unknown) => {
26203 expect ( [ 'string' , 'undefined' ] ) . toContain ( typeof profilePic ) ;
27204} ;
28205
29- // Fix flaky tests LW-13058
30- describe . skip ( 'KoraLabsHandleProvider' , ( ) => {
206+ describe ( 'KoraLabsHandleProvider' , ( ) => {
207+ let axiosMock : MockAdapter ;
31208 let provider : KoraLabsHandleProvider ;
32209
33210 beforeAll ( ( ) => {
211+ axiosMock = new MockAdapter ( axios ) ;
34212 provider = new KoraLabsHandleProvider ( config ) ;
35213 } ) ;
36214
215+ afterEach ( ( ) => {
216+ axiosMock . reset ( ) ;
217+ } ) ;
218+
219+ afterAll ( ( ) => {
220+ axiosMock . restore ( ) ;
221+ } ) ;
222+
37223 describe ( 'resolveHandles' , ( ) => {
38224 test ( 'HandleProvider should resolve a single handle' , async ( ) => {
225+ axiosMock . onGet ( ) . replyOnce ( 200 , test_handle_1 ) ;
226+
39227 const [ result ] = await provider . resolveHandles ( { handles : [ 'test_handle_1' ] } ) ;
40228
41229 checkHandleResolution ( 'test_handle_1' , result ) ;
42230 } ) ;
43231
44232 test ( 'HandleProvider should resolve multiple handles' , async ( ) => {
45- const [ result2 , result3 ] = await provider . resolveHandles ( { handles : [ 'test_handle_2' , 'test_handle_3' ] } ) ;
233+ axiosMock . onGet ( ) . replyOnce ( 200 , test_handle_1 ) . onGet ( ) . replyOnce ( 200 , test_handle_2 ) ;
46234
235+ const [ result1 , result2 ] = await provider . resolveHandles ( { handles : [ 'test_handle_1' , 'test_handle_2' ] } ) ;
236+
237+ checkHandleResolution ( 'test_handle_1' , result1 ) ;
47238 checkHandleResolution ( 'test_handle_2' , result2 ) ;
48- checkHandleResolution ( 'test_handle_3' , result3 ) ;
49239 } ) ;
50240
51241 test ( 'HandleProvider should return null for for not found handle' , async ( ) => {
242+ axiosMock . onGet ( ) . replyOnce ( 404 ) . onGet ( ) . replyOnce ( 200 , test_handle_1 ) ;
243+
52244 const [ resultN , result1 ] = await provider . resolveHandles ( { handles : [ 'does_not_exists' , 'test_handle_1' ] } ) ;
53245
54246 expect ( resultN ) . toBe ( null ) ;
55247 checkHandleResolution ( 'test_handle_1' , result1 ) ;
56248 } ) ;
57249
58250 test ( 'HandleProvider should resolve handle, subhandles and virtual subhandles' , async ( ) => {
251+ axiosMock
252+ . onGet ( )
253+ . replyOnce ( 200 , handle_ )
254+ . onGet ( )
255+ . replyOnce ( 200 , ada_handle )
256+ . onGet ( )
257+ . replyOnce ( 200 , space_ada_handle ) ;
258+
59259 const [ result1 , result2 , result3 ] = await provider . resolveHandles ( {
60260 handles : [ 'handle' , 'ada.handle' , 'space@ada.handle' ]
61261 } ) ;
@@ -68,6 +268,8 @@ describe.skip('KoraLabsHandleProvider', () => {
68268
69269 describe ( 'health checks' , ( ) => {
70270 test ( 'HandleProvider should get ok health check' , async ( ) => {
271+ axiosMock . onGet ( ) . replyOnce ( 200 ) ;
272+
71273 const result = await provider . healthCheck ( ) ;
72274
73275 expect ( result . ok ) . toEqual ( true ) ;
0 commit comments