Skip to content

Commit 42fafff

Browse files
committed
test(e2e): fix flaky test in koralabs handle provider
1 parent 8b3da5e commit 42fafff

File tree

3 files changed

+207
-2
lines changed

3 files changed

+207
-2
lines changed

packages/e2e/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@
143143
"@wdio/spec-reporter": "^7.19.5",
144144
"@wdio/static-server-service": "^7.19.5",
145145
"artillery": "^2.0.0-35",
146+
"axios-mock-adapter": "^2.0.0",
146147
"babel-loader": "^8.2.5",
147148
"blake2b-no-wasm": "2.1.4",
148149
"buffer": "^6.0.3",

packages/e2e/test/handle/KoraLabsHandleProvider.test.ts

Lines changed: 205 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
/* eslint-disable sonarjs/no-duplicate-string */
12
// cSpell:ignore kora subhandles
23
/* eslint-disable no-magic-numbers */
34
/* eslint-disable camelcase */
45
import { Cardano, HandleResolution } from '@cardano-sdk/core';
56
import { KoraLabsHandleProvider } from '@cardano-sdk/cardano-services-client';
7+
import MockAdapter from 'axios-mock-adapter';
8+
import axios from 'axios';
69

710
const 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+
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+
14191
const checkHandleResolution = (source: string, result: unknown) => {
15192
expect(typeof result).toBe('object');
16193

@@ -27,34 +204,58 @@ const checkHandleResolution = (source: string, result: unknown) => {
27204
};
28205

29206
describe('KoraLabsHandleProvider', () => {
207+
let axiosMock: MockAdapter;
30208
let provider: KoraLabsHandleProvider;
31209

32210
beforeAll(() => {
211+
axiosMock = new MockAdapter(axios);
33212
provider = new KoraLabsHandleProvider(config);
34213
});
35214

215+
afterEach(() => {
216+
axiosMock.reset();
217+
});
218+
219+
afterAll(() => {
220+
axiosMock.restore();
221+
});
222+
36223
describe('resolveHandles', () => {
37224
test('HandleProvider should resolve a single handle', async () => {
225+
axiosMock.onGet().replyOnce(200, test_handle_1);
226+
38227
const [result] = await provider.resolveHandles({ handles: ['test_handle_1'] });
39228

40229
checkHandleResolution('test_handle_1', result);
41230
});
42231

43232
test('HandleProvider should resolve multiple handles', async () => {
44-
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);
45234

235+
const [result1, result2] = await provider.resolveHandles({ handles: ['test_handle_1', 'test_handle_2'] });
236+
237+
checkHandleResolution('test_handle_1', result1);
46238
checkHandleResolution('test_handle_2', result2);
47-
checkHandleResolution('test_handle_3', result3);
48239
});
49240

50241
test('HandleProvider should return null for for not found handle', async () => {
242+
axiosMock.onGet().replyOnce(404).onGet().replyOnce(200, test_handle_1);
243+
51244
const [resultN, result1] = await provider.resolveHandles({ handles: ['does_not_exists', 'test_handle_1'] });
52245

53246
expect(resultN).toBe(null);
54247
checkHandleResolution('test_handle_1', result1);
55248
});
56249

57250
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+
58259
const [result1, result2, result3] = await provider.resolveHandles({
59260
handles: ['handle', 'ada.handle', '[email protected]']
60261
});
@@ -67,6 +268,8 @@ describe('KoraLabsHandleProvider', () => {
67268

68269
describe('health checks', () => {
69270
test('HandleProvider should get ok health check', async () => {
271+
axiosMock.onGet().replyOnce(200);
272+
70273
const result = await provider.healthCheck();
71274

72275
expect(result.ok).toEqual(true);

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3647,6 +3647,7 @@ __metadata:
36473647
"@wdio/static-server-service": ^7.19.5
36483648
artillery: ^2.0.0-35
36493649
axios: ^1.7.4
3650+
axios-mock-adapter: ^2.0.0
36503651
babel-loader: ^8.2.5
36513652
blake2b-no-wasm: 2.1.4
36523653
buffer: ^6.0.3

0 commit comments

Comments
 (0)