@human-protocol/sdk 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/src/constants.d.ts.map +1 -0
  2. package/dist/src/decorators.d.ts.map +1 -0
  3. package/dist/src/enums.d.ts.map +1 -0
  4. package/dist/src/error.d.ts.map +1 -0
  5. package/dist/{escrow.d.ts → src/escrow.d.ts} +8 -0
  6. package/dist/src/escrow.d.ts.map +1 -0
  7. package/dist/{escrow.js → src/escrow.js} +23 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/init.d.ts.map +1 -0
  10. package/dist/src/interfaces.d.ts.map +1 -0
  11. package/dist/src/kvstore.d.ts.map +1 -0
  12. package/dist/src/queries.d.ts.map +1 -0
  13. package/dist/src/staking.d.ts.map +1 -0
  14. package/dist/src/storage.d.ts.map +1 -0
  15. package/dist/{storage.js → src/storage.js} +1 -0
  16. package/dist/src/types.d.ts.map +1 -0
  17. package/dist/src/utils.d.ts.map +1 -0
  18. package/dist/test/escrow.test.d.ts +2 -0
  19. package/dist/test/escrow.test.d.ts.map +1 -0
  20. package/dist/test/escrow.test.js +827 -0
  21. package/dist/test/init.test.d.ts +2 -0
  22. package/dist/test/init.test.d.ts.map +1 -0
  23. package/dist/test/init.test.js +70 -0
  24. package/dist/test/kvstore.test.d.ts +2 -0
  25. package/dist/test/kvstore.test.d.ts.map +1 -0
  26. package/dist/test/kvstore.test.js +125 -0
  27. package/dist/test/staking.test.d.ts +2 -0
  28. package/dist/test/staking.test.d.ts.map +1 -0
  29. package/dist/test/staking.test.js +375 -0
  30. package/dist/test/storage.test.d.ts +2 -0
  31. package/dist/test/storage.test.d.ts.map +1 -0
  32. package/dist/test/storage.test.js +287 -0
  33. package/dist/test/utils/constants.d.ts +45 -0
  34. package/dist/test/utils/constants.d.ts.map +1 -0
  35. package/dist/test/utils/constants.js +47 -0
  36. package/package.json +2 -4
  37. package/src/escrow.ts +29 -2
  38. package/src/staking.ts +1 -0
  39. package/src/storage.ts +1 -0
  40. package/dist/constants.d.ts.map +0 -1
  41. package/dist/decorators.d.ts.map +0 -1
  42. package/dist/enums.d.ts.map +0 -1
  43. package/dist/error.d.ts.map +0 -1
  44. package/dist/escrow.d.ts.map +0 -1
  45. package/dist/index.d.ts.map +0 -1
  46. package/dist/init.d.ts.map +0 -1
  47. package/dist/interfaces.d.ts.map +0 -1
  48. package/dist/kvstore.d.ts.map +0 -1
  49. package/dist/queries.d.ts.map +0 -1
  50. package/dist/staking.d.ts.map +0 -1
  51. package/dist/storage.d.ts.map +0 -1
  52. package/dist/types.d.ts.map +0 -1
  53. package/dist/utils.d.ts.map +0 -1
  54. package/test/escrow.test.ts +0 -1339
  55. package/test/init.test.ts +0 -88
  56. package/test/kvstore.test.ts +0 -208
  57. package/test/staking.test.ts +0 -640
  58. package/test/storage.test.ts +0 -422
  59. package/test/utils/constants.ts +0 -67
  60. /package/dist/{constants.d.ts → src/constants.d.ts} +0 -0
  61. /package/dist/{constants.js → src/constants.js} +0 -0
  62. /package/dist/{decorators.d.ts → src/decorators.d.ts} +0 -0
  63. /package/dist/{decorators.js → src/decorators.js} +0 -0
  64. /package/dist/{enums.d.ts → src/enums.d.ts} +0 -0
  65. /package/dist/{enums.js → src/enums.js} +0 -0
  66. /package/dist/{error.d.ts → src/error.d.ts} +0 -0
  67. /package/dist/{error.js → src/error.js} +0 -0
  68. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  69. /package/dist/{index.js → src/index.js} +0 -0
  70. /package/dist/{init.d.ts → src/init.d.ts} +0 -0
  71. /package/dist/{init.js → src/init.js} +0 -0
  72. /package/dist/{interfaces.d.ts → src/interfaces.d.ts} +0 -0
  73. /package/dist/{interfaces.js → src/interfaces.js} +0 -0
  74. /package/dist/{kvstore.d.ts → src/kvstore.d.ts} +0 -0
  75. /package/dist/{kvstore.js → src/kvstore.js} +0 -0
  76. /package/dist/{queries.d.ts → src/queries.d.ts} +0 -0
  77. /package/dist/{queries.js → src/queries.js} +0 -0
  78. /package/dist/{staking.d.ts → src/staking.d.ts} +0 -0
  79. /package/dist/{staking.js → src/staking.js} +0 -0
  80. /package/dist/{storage.d.ts → src/storage.d.ts} +0 -0
  81. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
  82. /package/dist/{types.js → src/types.js} +0 -0
  83. /package/dist/{utils.d.ts → src/utils.d.ts} +0 -0
  84. /package/dist/{utils.js → src/utils.js} +0 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../test/init.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const vitest_1 = require("vitest");
8
+ const error_1 = require("../src/error");
9
+ const constants_1 = require("./utils/constants");
10
+ const ethers_1 = require("ethers");
11
+ const init_1 = __importDefault(require("../src/init"));
12
+ const enums_1 = require("../src/enums");
13
+ (0, vitest_1.describe)('InitClient', () => {
14
+ const provider = new ethers_1.ethers.providers.JsonRpcProvider();
15
+ let mockProvider;
16
+ let mockSigner;
17
+ (0, vitest_1.beforeEach)(async () => {
18
+ mockSigner = {
19
+ ...provider.getSigner(),
20
+ getNetwork: vitest_1.vi.fn().mockReturnValue({
21
+ name: constants_1.FAKE_NETWORK_NAME,
22
+ chainId: enums_1.ChainId.POLYGON_MUMBAI,
23
+ }),
24
+ getAddress: vitest_1.vi.fn().mockReturnValue(ethers_1.ethers.constants.AddressZero),
25
+ };
26
+ mockProvider = {
27
+ getNetwork: vitest_1.vi.fn().mockReturnValue({
28
+ name: constants_1.FAKE_NETWORK_NAME,
29
+ chainId: enums_1.ChainId.POLYGON_MUMBAI,
30
+ }),
31
+ getAddress: vitest_1.vi.fn().mockReturnValue(ethers_1.ethers.constants.AddressZero),
32
+ };
33
+ });
34
+ (0, vitest_1.afterEach)(() => {
35
+ vitest_1.vi.restoreAllMocks();
36
+ });
37
+ (0, vitest_1.describe)('getParams', () => {
38
+ (0, vitest_1.test)('should throw an error if Signer provider does not exist', async () => {
39
+ const invalidSigner = ethers_1.ethers.Wallet.createRandom();
40
+ await (0, vitest_1.expect)(init_1.default.getParams(invalidSigner)).rejects.toThrow(error_1.ErrorInitProviderDoesNotExist);
41
+ });
42
+ (0, vitest_1.test)('should throw an error if chainId is not supported', async () => {
43
+ const invalidNetwork = { name: constants_1.FAKE_NETWORK_NAME, chainId: enums_1.ChainId.ALL };
44
+ mockProvider.getNetwork.mockResolvedValueOnce(invalidNetwork);
45
+ await (0, vitest_1.expect)(init_1.default.getParams(mockProvider)).rejects.toThrow(error_1.ErrorInitUnsupportedChainID);
46
+ });
47
+ (0, vitest_1.test)('should return the client parameters for a Signer', async () => {
48
+ const expectedClientParams = {
49
+ signerOrProvider: mockSigner,
50
+ network: constants_1.FAKE_NETWORK,
51
+ };
52
+ init_1.default.getParams = vitest_1.vi
53
+ .fn()
54
+ .mockImplementation(() => Promise.resolve(expectedClientParams));
55
+ const clientParams = await init_1.default.getParams(mockSigner);
56
+ (0, vitest_1.expect)(clientParams).toEqual(expectedClientParams);
57
+ });
58
+ (0, vitest_1.test)('should return the client parameters for a Provider', async () => {
59
+ const expectedClientParams = {
60
+ signerOrProvider: mockProvider,
61
+ network: constants_1.FAKE_NETWORK,
62
+ };
63
+ init_1.default.getParams = vitest_1.vi
64
+ .fn()
65
+ .mockImplementation(() => Promise.resolve(expectedClientParams));
66
+ const clientParams = await init_1.default.getParams(mockProvider);
67
+ (0, vitest_1.expect)(clientParams).toEqual(expectedClientParams);
68
+ });
69
+ });
70
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kvstore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kvstore.test.d.ts","sourceRoot":"","sources":["../../test/kvstore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const vitest_1 = require("vitest");
8
+ const ethers_1 = require("ethers");
9
+ const kvstore_1 = __importDefault(require("../src/kvstore"));
10
+ const error_1 = require("../src/error");
11
+ const init_1 = __importDefault(require("../src/init"));
12
+ const enums_1 = require("../src/enums");
13
+ const constants_1 = require("../src/constants");
14
+ vitest_1.vi.mock('../src/init');
15
+ (0, vitest_1.describe)('KVStoreClient', () => {
16
+ let provider;
17
+ let signer;
18
+ let network;
19
+ let kvStoreClient;
20
+ let mockKVStoreContract;
21
+ let mockGetClientParams;
22
+ (0, vitest_1.beforeAll)(async () => {
23
+ provider = new ethers_1.ethers.providers.JsonRpcProvider();
24
+ signer = provider.getSigner();
25
+ network = constants_1.NETWORKS[enums_1.ChainId.LOCALHOST];
26
+ mockGetClientParams = init_1.default.getParams;
27
+ });
28
+ (0, vitest_1.beforeEach)(async () => {
29
+ mockGetClientParams.mockResolvedValue({
30
+ signerOrProvider: signer,
31
+ network,
32
+ });
33
+ kvStoreClient = new kvstore_1.default(await init_1.default.getParams(signer));
34
+ mockKVStoreContract = {
35
+ ...kvStoreClient.contract,
36
+ set: vitest_1.vi.fn(),
37
+ setBulk: vitest_1.vi.fn(),
38
+ get: vitest_1.vi.fn(),
39
+ address: network?.kvstoreAddress,
40
+ };
41
+ kvStoreClient.contract = mockKVStoreContract;
42
+ });
43
+ (0, vitest_1.describe)('set', () => {
44
+ (0, vitest_1.test)('should throw an error if key is empty', async () => {
45
+ const setSpy = vitest_1.vi.spyOn(kvStoreClient, 'set');
46
+ await (0, vitest_1.expect)(kvStoreClient.set('', 'test')).rejects.toThrow(error_1.ErrorKVStoreEmptyKey);
47
+ (0, vitest_1.expect)(setSpy).toHaveBeenCalledWith('', 'test');
48
+ });
49
+ (0, vitest_1.test)('should set the key-value pair if both key and value are provided', async () => {
50
+ mockKVStoreContract.set.mockResolvedValue(null);
51
+ (0, vitest_1.expect)(kvStoreClient.set('key1', 'value1')).resolves.toBeUndefined();
52
+ (0, vitest_1.expect)(mockKVStoreContract.set).toHaveBeenCalledWith('key1', 'value1');
53
+ });
54
+ (0, vitest_1.test)('should throw an error when attempting to set a value without signer', async () => {
55
+ mockGetClientParams.mockResolvedValue({
56
+ signerOrProvider: provider,
57
+ network,
58
+ });
59
+ kvStoreClient = new kvstore_1.default(await init_1.default.getParams(provider));
60
+ await (0, vitest_1.expect)(kvStoreClient.set('key1', 'value1')).rejects.toThrow(error_1.ErrorSigner);
61
+ });
62
+ (0, vitest_1.test)('should throw an error when a network error occurs', async () => {
63
+ mockKVStoreContract.set.mockRejectedValue(new Error('could not detect network'));
64
+ await (0, vitest_1.expect)(kvStoreClient.set('key1', 'value1')).rejects.toThrow(Error('Failed to set value: could not detect network'));
65
+ (0, vitest_1.expect)(mockKVStoreContract.set).toHaveBeenCalledWith('key1', 'value1');
66
+ });
67
+ });
68
+ (0, vitest_1.describe)('setBulk', () => {
69
+ (0, vitest_1.test)('should throw an error if keys and values arrays are not of the same length', async () => {
70
+ const setBulkSpy = vitest_1.vi.spyOn(kvStoreClient, 'setBulk');
71
+ await (0, vitest_1.expect)(kvStoreClient.setBulk(['key1', 'key2'], ['value1'])).rejects.toThrow(error_1.ErrorKVStoreArrayLength);
72
+ (0, vitest_1.expect)(setBulkSpy).toHaveBeenCalledWith(['key1', 'key2'], ['value1']);
73
+ });
74
+ (0, vitest_1.test)('should throw an error if any of the keys is empty', async () => {
75
+ const setBulkSpy = vitest_1.vi.spyOn(kvStoreClient, 'setBulk');
76
+ await (0, vitest_1.expect)(kvStoreClient.setBulk(['key1', ''], ['value1', 'value2'])).rejects.toThrow(error_1.ErrorKVStoreEmptyKey);
77
+ (0, vitest_1.expect)(setBulkSpy).toHaveBeenCalledWith(['key1', ''], ['value1', 'value2']);
78
+ });
79
+ (0, vitest_1.test)('should set the key-value pairs if both keys and values arrays are provided correctly', async () => {
80
+ mockKVStoreContract.setBulk.mockResolvedValue(null);
81
+ (0, vitest_1.expect)(kvStoreClient.setBulk(['key1', 'key2'], ['value1', 'value2'])).resolves.resolves.toBeUndefined();
82
+ (0, vitest_1.expect)(mockKVStoreContract.setBulk).toHaveBeenCalledWith(['key1', 'key2'], ['value1', 'value2']);
83
+ });
84
+ (0, vitest_1.test)('should throw an error when attempting to set values without signer', async () => {
85
+ mockGetClientParams.mockResolvedValue({
86
+ provider,
87
+ network,
88
+ });
89
+ kvStoreClient = new kvstore_1.default(await init_1.default.getParams(provider));
90
+ await (0, vitest_1.expect)(kvStoreClient.setBulk(['key1', 'key2'], ['value1', 'value2'])).rejects.toThrow(error_1.ErrorSigner);
91
+ });
92
+ (0, vitest_1.test)('should throw an error if a network error occurs', async () => {
93
+ mockKVStoreContract.setBulk.mockRejectedValue(new Error('could not detect network'));
94
+ await (0, vitest_1.expect)(kvStoreClient.setBulk(['key1', 'key2'], ['value1', 'value2'])).rejects.toThrow(new Error('Failed to set bulk values: could not detect network'));
95
+ (0, vitest_1.expect)(mockKVStoreContract.setBulk).toHaveBeenCalledWith(['key1', 'key2'], ['value1', 'value2']);
96
+ });
97
+ });
98
+ (0, vitest_1.describe)('get', () => {
99
+ (0, vitest_1.test)('should throw an error if key is empty', async () => {
100
+ await (0, vitest_1.expect)(kvStoreClient.get('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', '')).rejects.toThrow(error_1.ErrorKVStoreEmptyKey);
101
+ });
102
+ (0, vitest_1.test)('should throw an error if address is not valid', async () => {
103
+ await (0, vitest_1.expect)(kvStoreClient.get('invalid_address', 'key1')).rejects.toThrow(error_1.ErrorInvalidAddress);
104
+ });
105
+ (0, vitest_1.test)('should return empty string if both address and key are valid and address does not set any value', async () => {
106
+ const getSpy = vitest_1.vi.spyOn(kvStoreClient, 'get').mockResolvedValue('');
107
+ const result = await kvStoreClient.get('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
108
+ (0, vitest_1.expect)(result).toBe('');
109
+ (0, vitest_1.expect)(getSpy).toHaveBeenCalledWith('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
110
+ });
111
+ (0, vitest_1.test)('should return value if both address and key are valid and address set a value', async () => {
112
+ mockKVStoreContract.get.mockResolvedValue('value1');
113
+ const getSpy = vitest_1.vi.spyOn(kvStoreClient, 'get');
114
+ const result = await kvStoreClient.get('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
115
+ (0, vitest_1.expect)(result).toBe('value1');
116
+ (0, vitest_1.expect)(getSpy).toHaveBeenCalledWith('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
117
+ (0, vitest_1.expect)(mockKVStoreContract.get).toHaveBeenCalledWith('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
118
+ });
119
+ (0, vitest_1.test)('should throw an error if a network error occurs', async () => {
120
+ mockKVStoreContract.get.mockRejectedValue(new Error('could not detect network'));
121
+ await (0, vitest_1.expect)(kvStoreClient.get('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1')).rejects.toThrow(Error('Failed to get value: could not detect network'));
122
+ (0, vitest_1.expect)(mockKVStoreContract.get).toHaveBeenCalledWith('0x42d75a16b04a02d1abd7f2386b1c5b567bc7ef71', 'key1');
123
+ });
124
+ });
125
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=staking.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.test.d.ts","sourceRoot":"","sources":["../../test/staking.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const vitest_1 = require("vitest");
8
+ const ethers_1 = require("ethers");
9
+ const staking_1 = __importDefault(require("../src/staking"));
10
+ const constants_1 = require("./utils/constants");
11
+ const error_1 = require("../src/error");
12
+ const init_1 = __importDefault(require("../src/init"));
13
+ vitest_1.vi.mock('../src/init');
14
+ (0, vitest_1.describe)('StakingClient', () => {
15
+ const provider = new ethers_1.ethers.providers.JsonRpcProvider();
16
+ let stakingClient, mockSigner, mockStakingContract, mockEscrowFactoryContract, mockTokenContract;
17
+ (0, vitest_1.beforeEach)(async () => {
18
+ mockSigner = {
19
+ ...provider.getSigner(),
20
+ getAddress: vitest_1.vi.fn().mockReturnValue(ethers_1.ethers.constants.AddressZero),
21
+ };
22
+ mockStakingContract = {
23
+ stake: vitest_1.vi.fn(),
24
+ unstake: vitest_1.vi.fn(),
25
+ withdraw: vitest_1.vi.fn(),
26
+ slash: vitest_1.vi.fn(),
27
+ allocate: vitest_1.vi.fn(),
28
+ closeAllocation: vitest_1.vi.fn(),
29
+ distributeRewards: vitest_1.vi.fn(),
30
+ getRewards: vitest_1.vi.fn(),
31
+ getStaker: vitest_1.vi.fn(),
32
+ getListOfStakers: vitest_1.vi.fn(),
33
+ getAllocation: vitest_1.vi.fn(),
34
+ rewardPool: vitest_1.vi.fn().mockResolvedValueOnce(ethers_1.ethers.constants.AddressZero),
35
+ address: constants_1.FAKE_NETWORK.stakingAddress,
36
+ };
37
+ mockEscrowFactoryContract = {
38
+ hasEscrow: vitest_1.vi.fn(),
39
+ };
40
+ mockTokenContract = {
41
+ allowance: vitest_1.vi.fn(),
42
+ approve: vitest_1.vi.fn(),
43
+ };
44
+ const getClientParamsMock = init_1.default.getParams;
45
+ getClientParamsMock.mockResolvedValue({
46
+ signerOrProvider: mockSigner,
47
+ network: constants_1.FAKE_NETWORK,
48
+ });
49
+ stakingClient = new staking_1.default(await init_1.default.getParams(mockSigner));
50
+ stakingClient.stakingContract = mockStakingContract;
51
+ stakingClient.tokenContract = mockTokenContract;
52
+ stakingClient.escrowFactoryContract = mockEscrowFactoryContract;
53
+ });
54
+ (0, vitest_1.afterEach)(() => {
55
+ vitest_1.vi.restoreAllMocks();
56
+ });
57
+ (0, vitest_1.describe)('approveStake', () => {
58
+ const amount = ethers_1.BigNumber.from(constants_1.FAKE_AMOUNT);
59
+ const negativeAmount = ethers_1.BigNumber.from(constants_1.FAKE_NEGATIVE_AMOUNT);
60
+ (0, vitest_1.test)('should throw an error if the amount is not a BigNumber', async () => {
61
+ await (0, vitest_1.expect)(stakingClient.approveStake('foo')).rejects.toThrow(error_1.ErrorInvalidStakingValueType);
62
+ (0, vitest_1.expect)(mockTokenContract.approve).toHaveBeenCalledTimes(0);
63
+ });
64
+ (0, vitest_1.test)('should throw an error if the amount is negative', async () => {
65
+ await (0, vitest_1.expect)(stakingClient.approveStake(negativeAmount)).rejects.toThrow(error_1.ErrorInvalidStakingValueSign);
66
+ (0, vitest_1.expect)(mockTokenContract.approve).toHaveBeenCalledTimes(0);
67
+ });
68
+ (0, vitest_1.test)('should not fail and return void if the allowance is sufficient and the approval is successful', async () => {
69
+ stakingClient.isAllowance = vitest_1.vi.fn().mockResolvedValue(true);
70
+ mockTokenContract.approve = vitest_1.vi.fn().mockResolvedValue({
71
+ hash: constants_1.FAKE_TRANSACTION_HASH,
72
+ blockNumber: constants_1.FAKE_BLOCK_NUMBER,
73
+ confirmations: constants_1.FAKE_TRANSACTION_CONFIRMATIONS,
74
+ });
75
+ await (0, vitest_1.expect)(stakingClient.approveStake(amount)).resolves.toBeUndefined();
76
+ (0, vitest_1.expect)(mockTokenContract.approve).toBeCalledWith(ethers_1.ethers.constants.AddressZero, amount);
77
+ (0, vitest_1.expect)(mockTokenContract.approve).toHaveBeenCalledTimes(1);
78
+ });
79
+ (0, vitest_1.test)('should throw an error if the approval fails', async () => {
80
+ stakingClient.isAllowance = vitest_1.vi.fn().mockResolvedValue(true);
81
+ mockTokenContract.approve = vitest_1.vi.fn().mockRejectedValue(new Error());
82
+ await (0, vitest_1.expect)(stakingClient.approveStake(amount)).rejects.toThrow();
83
+ (0, vitest_1.expect)(mockTokenContract.approve).toBeCalledWith(ethers_1.ethers.constants.AddressZero, amount);
84
+ (0, vitest_1.expect)(mockTokenContract.approve).toHaveBeenCalledTimes(1);
85
+ });
86
+ });
87
+ (0, vitest_1.describe)('stake', () => {
88
+ const amount = ethers_1.BigNumber.from(constants_1.FAKE_AMOUNT);
89
+ const negativeAmount = ethers_1.BigNumber.from(constants_1.FAKE_NEGATIVE_AMOUNT);
90
+ (0, vitest_1.test)('should throw an error if amount is not a BigNumber', async () => {
91
+ await (0, vitest_1.expect)(stakingClient.stake('foo')).rejects.toThrow(error_1.ErrorInvalidStakingValueType);
92
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledTimes(0);
93
+ });
94
+ (0, vitest_1.test)('should throw an error if amount is negative', async () => {
95
+ await (0, vitest_1.expect)(stakingClient.stake(negativeAmount)).rejects.toThrow(error_1.ErrorInvalidStakingValueSign);
96
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledTimes(0);
97
+ });
98
+ (0, vitest_1.test)('should call the stake function on the staking contract with the given amount', async () => {
99
+ mockTokenContract.allowance.mockResolvedValueOnce(amount);
100
+ await stakingClient.stake(amount);
101
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledWith(amount);
102
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledTimes(1);
103
+ });
104
+ (0, vitest_1.test)('should throw an error if the stake function on the staking contract fails', async () => {
105
+ mockTokenContract.allowance.mockResolvedValueOnce(amount);
106
+ mockStakingContract.stake.mockRejectedValueOnce(new Error());
107
+ await (0, vitest_1.expect)(stakingClient.stake(amount)).rejects.toThrow();
108
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledWith(amount);
109
+ (0, vitest_1.expect)(mockStakingContract.stake).toHaveBeenCalledTimes(1);
110
+ });
111
+ });
112
+ (0, vitest_1.describe)('unstake', () => {
113
+ const amount = ethers_1.BigNumber.from(constants_1.FAKE_AMOUNT);
114
+ const negativeAmount = ethers_1.BigNumber.from(constants_1.FAKE_NEGATIVE_AMOUNT);
115
+ (0, vitest_1.test)('should throw an error if amount is not a BigNumber', async () => {
116
+ await (0, vitest_1.expect)(stakingClient.unstake('foo')).rejects.toThrow(error_1.ErrorInvalidStakingValueType);
117
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledTimes(0);
118
+ });
119
+ (0, vitest_1.test)('should throw an error if amount is negative', async () => {
120
+ await (0, vitest_1.expect)(stakingClient.unstake(negativeAmount)).rejects.toThrow(error_1.ErrorInvalidStakingValueSign);
121
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledTimes(0);
122
+ });
123
+ (0, vitest_1.test)('should call the unstake function on the staking contract with the given amount', async () => {
124
+ await stakingClient.unstake(amount);
125
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledWith(amount);
126
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledTimes(1);
127
+ });
128
+ (0, vitest_1.test)('should throw an error if the unstake function on the staking contract fails', async () => {
129
+ mockStakingContract.unstake.mockRejectedValueOnce(new Error());
130
+ await (0, vitest_1.expect)(stakingClient.unstake(amount)).rejects.toThrow();
131
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledWith(amount);
132
+ (0, vitest_1.expect)(mockStakingContract.unstake).toHaveBeenCalledTimes(1);
133
+ });
134
+ });
135
+ (0, vitest_1.describe)('withdraw', () => {
136
+ (0, vitest_1.test)('should call the withdraw method with the correct parameters', async () => {
137
+ mockStakingContract.withdraw.mockResolvedValueOnce();
138
+ await stakingClient.withdraw();
139
+ (0, vitest_1.expect)(mockStakingContract.withdraw).toHaveBeenCalledTimes(1);
140
+ });
141
+ (0, vitest_1.test)('should throw an error if the withdraw method of the staking contract fails', async () => {
142
+ mockStakingContract.withdraw.mockRejectedValueOnce(new Error());
143
+ await (0, vitest_1.expect)(stakingClient.withdraw()).rejects.toThrow();
144
+ (0, vitest_1.expect)(mockStakingContract.withdraw).toHaveBeenCalledTimes(1);
145
+ });
146
+ });
147
+ (0, vitest_1.describe)('slash', () => {
148
+ const amount = ethers_1.BigNumber.from(constants_1.FAKE_AMOUNT);
149
+ const negativeAmount = ethers_1.BigNumber.from(constants_1.FAKE_NEGATIVE_AMOUNT);
150
+ const invalidAddress = 'InvalidAddress';
151
+ (0, vitest_1.test)('throws an error if amount is not a BigNumber', async () => {
152
+ await (0, vitest_1.expect)(stakingClient.slash(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, 'foo')).rejects.toThrow(error_1.ErrorInvalidStakingValueType);
153
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
154
+ });
155
+ (0, vitest_1.test)('throws an error if amount is negative', async () => {
156
+ await (0, vitest_1.expect)(stakingClient.slash(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, negativeAmount)).rejects.toThrow(error_1.ErrorInvalidStakingValueSign);
157
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
158
+ });
159
+ (0, vitest_1.test)('throws an error if slasher address is invalid', async () => {
160
+ await (0, vitest_1.expect)(stakingClient.slash(invalidAddress, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow(error_1.ErrorInvalidSlasherAddressProvided);
161
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
162
+ });
163
+ (0, vitest_1.test)('throws an error if staker address is invalid', async () => {
164
+ await (0, vitest_1.expect)(stakingClient.slash(ethers_1.ethers.constants.AddressZero, invalidAddress, ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow(error_1.ErrorInvalidStakerAddressProvided);
165
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
166
+ });
167
+ (0, vitest_1.test)('throws an error if escrow address is invalid', async () => {
168
+ await (0, vitest_1.expect)(stakingClient.slash(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, invalidAddress, amount)).rejects.toThrow(error_1.ErrorInvalidEscrowAddressProvided);
169
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
170
+ });
171
+ (0, vitest_1.test)('throws an error if escrow address is not provided by the factory', async () => {
172
+ mockEscrowFactoryContract.hasEscrow.mockRejectedValueOnce(new Error());
173
+ await (0, vitest_1.expect)(stakingClient.slash(invalidAddress, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow(error_1.ErrorInvalidSlasherAddressProvided);
174
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(0);
175
+ });
176
+ (0, vitest_1.test)('throws an error if slashing fails', async () => {
177
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
178
+ mockStakingContract.slash.mockRejectedValueOnce(new Error());
179
+ await (0, vitest_1.expect)(stakingClient.slash(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow();
180
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount);
181
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(1);
182
+ });
183
+ (0, vitest_1.test)('calls the staking contract to slash the given amount', async () => {
184
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
185
+ mockStakingContract.slash.mockResolvedValueOnce();
186
+ await stakingClient.slash(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount);
187
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, ethers_1.ethers.constants.AddressZero, amount);
188
+ (0, vitest_1.expect)(mockStakingContract.slash).toHaveBeenCalledTimes(1);
189
+ });
190
+ });
191
+ (0, vitest_1.describe)('allocate', () => {
192
+ const amount = ethers_1.BigNumber.from(constants_1.FAKE_AMOUNT);
193
+ const negativeAmount = ethers_1.BigNumber.from(constants_1.FAKE_NEGATIVE_AMOUNT);
194
+ const invalidAddress = 'InvalidAddress';
195
+ (0, vitest_1.test)('throws an error if escrow address is invalid', async () => {
196
+ await (0, vitest_1.expect)(stakingClient.allocate(invalidAddress, amount)).rejects.toThrow(error_1.ErrorInvalidEscrowAddressProvided);
197
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(0);
198
+ });
199
+ (0, vitest_1.test)('throws an error if amount is not a BigNumber', async () => {
200
+ await (0, vitest_1.expect)(stakingClient.allocate(ethers_1.ethers.constants.AddressZero, 'foo')).rejects.toThrow(error_1.ErrorInvalidStakingValueType);
201
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(0);
202
+ });
203
+ (0, vitest_1.test)('throws an error if amount is negative', async () => {
204
+ await (0, vitest_1.expect)(stakingClient.allocate(ethers_1.ethers.constants.AddressZero, negativeAmount)).rejects.toThrow(error_1.ErrorInvalidStakingValueSign);
205
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(0);
206
+ });
207
+ (0, vitest_1.test)('throws an error if escrow address is not provided by the factory', async () => {
208
+ mockEscrowFactoryContract.hasEscrow.mockRejectedValueOnce(new Error());
209
+ await (0, vitest_1.expect)(stakingClient.allocate(ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow();
210
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(0);
211
+ });
212
+ (0, vitest_1.test)('should call the allocate method with the correct parameters', async () => {
213
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
214
+ await stakingClient.allocate(ethers_1.ethers.constants.AddressZero, amount);
215
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero, amount);
216
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(1);
217
+ });
218
+ (0, vitest_1.test)('should throw an error if the allocate method fails', async () => {
219
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
220
+ mockStakingContract.allocate.mockRejectedValueOnce(new Error());
221
+ await (0, vitest_1.expect)(stakingClient.allocate(ethers_1.ethers.constants.AddressZero, amount)).rejects.toThrow();
222
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero, amount);
223
+ (0, vitest_1.expect)(mockStakingContract.allocate).toHaveBeenCalledTimes(1);
224
+ });
225
+ });
226
+ (0, vitest_1.describe)('closeAllocation', () => {
227
+ const invalidAddress = 'InvalidAddress';
228
+ (0, vitest_1.test)('should throws an error if escrow address is invalid', async () => {
229
+ await (0, vitest_1.expect)(stakingClient.closeAllocation(invalidAddress)).rejects.toThrow(error_1.ErrorInvalidEscrowAddressProvided);
230
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledTimes(0);
231
+ });
232
+ (0, vitest_1.test)('throws an error if escrow address is not provided by the factory', async () => {
233
+ mockEscrowFactoryContract.hasEscrow.mockRejectedValueOnce(new Error());
234
+ await (0, vitest_1.expect)(stakingClient.closeAllocation(ethers_1.ethers.constants.AddressZero)).rejects.toThrow();
235
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledTimes(0);
236
+ });
237
+ (0, vitest_1.test)('should throw an error when stakingContract.closeAllocation throws an error', async () => {
238
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
239
+ mockStakingContract.closeAllocation.mockRejectedValueOnce(new Error());
240
+ await (0, vitest_1.expect)(stakingClient.closeAllocation(ethers_1.ethers.constants.AddressZero)).rejects.toThrow();
241
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero);
242
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledTimes(1);
243
+ });
244
+ (0, vitest_1.test)('should call the closeAllocation method with the correct parameters', async () => {
245
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
246
+ mockStakingContract.closeAllocation.mockResolvedValueOnce();
247
+ await stakingClient.closeAllocation(ethers_1.ethers.constants.AddressZero);
248
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero);
249
+ (0, vitest_1.expect)(mockStakingContract.closeAllocation).toHaveBeenCalledTimes(1);
250
+ });
251
+ });
252
+ (0, vitest_1.describe)('distributeRewards', () => {
253
+ const invalidAddress = 'InvalidAddress';
254
+ (0, vitest_1.test)('should throw an error if an invalid escrow address is provided', async () => {
255
+ await (0, vitest_1.expect)(stakingClient.distributeRewards(invalidAddress)).rejects.toThrow(error_1.ErrorInvalidEscrowAddressProvided);
256
+ (0, vitest_1.expect)(mockStakingContract.distributeRewards).toHaveBeenCalledTimes(0);
257
+ });
258
+ (0, vitest_1.test)('throws an error if escrow address is not provided by the factory', async () => {
259
+ mockEscrowFactoryContract.hasEscrow.mockRejectedValueOnce(new Error());
260
+ await (0, vitest_1.expect)(stakingClient.distributeRewards(ethers_1.ethers.constants.AddressZero)).rejects.toThrow();
261
+ (0, vitest_1.expect)(mockStakingContract.distributeRewards).toHaveBeenCalledTimes(0);
262
+ });
263
+ (0, vitest_1.test)('should call distributeReward on the reward pool contract', async () => {
264
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
265
+ vitest_1.vi.spyOn(stakingClient, 'distributeRewards').mockImplementation(() => Promise.resolve(undefined));
266
+ const results = await stakingClient.distributeRewards(ethers_1.ethers.constants.AddressZero);
267
+ (0, vitest_1.expect)(results).toBeUndefined();
268
+ });
269
+ });
270
+ (0, vitest_1.describe)('getStaker', () => {
271
+ const stakerAddress = ethers_1.ethers.constants.AddressZero;
272
+ const invalidAddress = 'InvalidAddress';
273
+ (0, vitest_1.test)('should return staker information', async () => {
274
+ const mockStaker = {
275
+ tokensStaked: ethers_1.ethers.utils.parseEther('100'),
276
+ tokensAllocated: ethers_1.ethers.utils.parseEther('50'),
277
+ tokensLocked: ethers_1.ethers.utils.parseEther('25'),
278
+ tokensLockedUntil: ethers_1.ethers.BigNumber.from(0),
279
+ tokensAvailable: ethers_1.ethers.utils.parseEther('25'),
280
+ };
281
+ mockStakingContract.getStaker.mockResolvedValueOnce(mockStaker);
282
+ const result = await stakingClient.getStaker(stakerAddress);
283
+ (0, vitest_1.expect)(result).toEqual(mockStaker);
284
+ (0, vitest_1.expect)(mockStakingContract.getStaker).toHaveBeenCalledWith(stakerAddress);
285
+ (0, vitest_1.expect)(mockStakingContract.getStaker).toHaveBeenCalledTimes(1);
286
+ });
287
+ (0, vitest_1.test)('should throw an error for an invalid staker address', async () => {
288
+ await (0, vitest_1.expect)(stakingClient.getStaker(invalidAddress)).rejects.toThrow(error_1.ErrorInvalidStakerAddressProvided);
289
+ (0, vitest_1.expect)(mockStakingContract.getStaker).toHaveBeenCalledTimes(0);
290
+ });
291
+ (0, vitest_1.test)('should throw an error if the staking contract call fails', async () => {
292
+ mockStakingContract.getStaker.mockRejectedValue(new Error());
293
+ await (0, vitest_1.expect)(stakingClient.getStaker(stakerAddress)).rejects.toThrow();
294
+ (0, vitest_1.expect)(mockStakingContract.getStaker).toHaveBeenCalledWith(stakerAddress);
295
+ (0, vitest_1.expect)(mockStakingContract.getStaker).toHaveBeenCalledTimes(1);
296
+ });
297
+ });
298
+ (0, vitest_1.describe)('getAllStakers()', () => {
299
+ const mockStaker = {
300
+ tokensStaked: ethers_1.ethers.utils.parseEther('100'),
301
+ tokensAllocated: ethers_1.ethers.utils.parseEther('50'),
302
+ tokensLocked: ethers_1.ethers.utils.parseEther('25'),
303
+ tokensLockedUntil: ethers_1.ethers.BigNumber.from(0),
304
+ tokensAvailable: ethers_1.ethers.utils.parseEther('25'),
305
+ };
306
+ const stakerAddress = ethers_1.ethers.constants.AddressZero;
307
+ (0, vitest_1.test)('should return an array of stakers', async () => {
308
+ mockStakingContract.getListOfStakers.mockResolvedValueOnce([
309
+ [stakerAddress, stakerAddress],
310
+ [mockStaker, mockStaker],
311
+ ]);
312
+ const stakers = await stakingClient.getAllStakers();
313
+ (0, vitest_1.expect)(stakers).toEqual([mockStaker, mockStaker]);
314
+ (0, vitest_1.expect)(mockStakingContract.getListOfStakers).toHaveBeenCalledTimes(1);
315
+ });
316
+ (0, vitest_1.test)('should throw an error if no stakers are found', async () => {
317
+ mockStakingContract.getListOfStakers.mockResolvedValue([[], []]);
318
+ await (0, vitest_1.expect)(stakingClient.getAllStakers()).rejects.toThrow();
319
+ (0, vitest_1.expect)(mockStakingContract.getListOfStakers).toHaveBeenCalledTimes(1);
320
+ });
321
+ (0, vitest_1.test)('should throw an error if there is an error in getting stakers', async () => {
322
+ mockStakingContract.getListOfStakers.mockRejectedValueOnce(new Error());
323
+ await (0, vitest_1.expect)(stakingClient.getAllStakers()).rejects.toThrow();
324
+ (0, vitest_1.expect)(mockStakingContract.getListOfStakers).toHaveBeenCalledTimes(1);
325
+ });
326
+ });
327
+ (0, vitest_1.describe)('getAllocation', () => {
328
+ const invalidAddress = 'InvalidAddress';
329
+ (0, vitest_1.test)('should throw an error for invalid escrow address', async () => {
330
+ await (0, vitest_1.expect)(stakingClient.getAllocation(invalidAddress)).rejects.toThrow(error_1.ErrorInvalidEscrowAddressProvided);
331
+ (0, vitest_1.expect)(mockStakingContract.getAllocation).toHaveBeenCalledTimes(0);
332
+ });
333
+ (0, vitest_1.test)('throws an error if escrow address is not provided by the factory', async () => {
334
+ mockEscrowFactoryContract.hasEscrow.mockRejectedValueOnce(new Error());
335
+ await (0, vitest_1.expect)(stakingClient.getAllocation(ethers_1.ethers.constants.AddressZero)).rejects.toThrow();
336
+ (0, vitest_1.expect)(mockStakingContract.getAllocation).toHaveBeenCalledTimes(0);
337
+ });
338
+ (0, vitest_1.test)('should return allocation information', async () => {
339
+ const mockAllocation = {
340
+ escrowAddress: ethers_1.ethers.constants.AddressZero,
341
+ staker: ethers_1.ethers.constants.AddressZero,
342
+ tokens: ethers_1.ethers.utils.parseEther('100'),
343
+ createdAt: ethers_1.ethers.utils.parseEther('100'),
344
+ closedAt: ethers_1.ethers.utils.parseEther('100'),
345
+ };
346
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
347
+ mockStakingContract.getAllocation.mockResolvedValueOnce(mockAllocation);
348
+ const result = await stakingClient.getAllocation(ethers_1.ethers.constants.AddressZero);
349
+ (0, vitest_1.expect)(result).toEqual(mockAllocation);
350
+ (0, vitest_1.expect)(mockStakingContract.getAllocation).toHaveBeenCalledWith(ethers_1.ethers.constants.AddressZero);
351
+ (0, vitest_1.expect)(mockStakingContract.getAllocation).toHaveBeenCalledTimes(1);
352
+ });
353
+ (0, vitest_1.test)('should throw an error if the allocation data cannot be retrieved', async () => {
354
+ mockEscrowFactoryContract.hasEscrow.mockResolvedValueOnce(true);
355
+ mockStakingContract.getAllocation.mockRejectedValue(new Error());
356
+ await (0, vitest_1.expect)(stakingClient.getAllocation(ethers_1.ethers.constants.AddressZero)).rejects.toThrow();
357
+ });
358
+ });
359
+ (0, vitest_1.describe)('getRewards', () => {
360
+ const invalidAddress = 'InvalidAddress';
361
+ const mockReward = {
362
+ escrowAddress: ethers_1.ethers.constants.AddressZero,
363
+ amount: ethers_1.ethers.utils.parseEther('100'),
364
+ };
365
+ (0, vitest_1.test)('should throw an error if an invalid escrow address is provided', async () => {
366
+ await (0, vitest_1.expect)(stakingClient.getRewards(invalidAddress)).rejects.toThrow(error_1.ErrorInvalidSlasherAddressProvided);
367
+ (0, vitest_1.expect)(mockStakingContract.getRewards).toHaveBeenCalledTimes(0);
368
+ });
369
+ (0, vitest_1.test)('should return an array of rewards', async () => {
370
+ vitest_1.vi.spyOn(stakingClient, 'getRewards').mockImplementation(() => Promise.resolve([mockReward, mockReward]));
371
+ const results = await stakingClient.getRewards(ethers_1.ethers.constants.AddressZero);
372
+ (0, vitest_1.expect)(results).toEqual([mockReward, mockReward]);
373
+ });
374
+ });
375
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../test/storage.test.ts"],"names":[],"mappings":""}