@defisaver/automation-sdk 3.0.9-dev → 3.1.1

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 (243) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env.dev +4 -4
  4. package/.eslintignore +6 -7
  5. package/.eslintrc.js +39 -41
  6. package/.mocharc.json +5 -0
  7. package/.nvmrc +1 -0
  8. package/README.md +47 -41
  9. package/cjs/abis/Erc20.json +223 -0
  10. package/cjs/abis/SubStorage.json +21 -0
  11. package/cjs/abis/UniMulticall.json +17 -0
  12. package/cjs/abis/index.d.ts +9 -0
  13. package/cjs/abis/index.js +30 -0
  14. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -0
  15. package/cjs/abis/legacy_AuthCheck.json +8 -0
  16. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -0
  17. package/cjs/abis/legacy_MakerSubscriptions.json +9 -0
  18. package/cjs/automation/private/Automation.d.ts +12 -0
  19. package/cjs/automation/private/Automation.js +42 -0
  20. package/cjs/automation/private/LegacyAutomation.d.ts +25 -0
  21. package/cjs/automation/private/LegacyAutomation.js +118 -0
  22. package/cjs/automation/private/LegacyProtocol.d.ts +22 -0
  23. package/cjs/automation/private/LegacyProtocol.js +41 -0
  24. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -0
  25. package/cjs/automation/private/LegacyProtocol.test.js +25 -0
  26. package/cjs/automation/private/Protocol.d.ts +22 -0
  27. package/cjs/automation/private/Protocol.js +41 -0
  28. package/cjs/automation/private/Protocol.test.d.ts +1 -0
  29. package/cjs/automation/private/Protocol.test.js +25 -0
  30. package/cjs/automation/private/StrategiesAutomation.d.ts +33 -0
  31. package/cjs/automation/private/StrategiesAutomation.js +181 -0
  32. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -0
  33. package/cjs/automation/private/StrategiesAutomation.test.js +671 -0
  34. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -0
  35. package/cjs/automation/public/ArbitrumStrategies.js +13 -0
  36. package/cjs/automation/public/BaseStrategies.d.ts +5 -0
  37. package/cjs/automation/public/BaseStrategies.js +13 -0
  38. package/cjs/automation/public/EthereumStrategies.d.ts +5 -0
  39. package/cjs/automation/public/EthereumStrategies.js +13 -0
  40. package/cjs/automation/public/OptimismStrategies.d.ts +5 -0
  41. package/cjs/automation/public/OptimismStrategies.js +13 -0
  42. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -0
  43. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -0
  44. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -0
  45. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -0
  46. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -0
  47. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -0
  48. package/cjs/configuration.d.ts +1 -0
  49. package/cjs/configuration.js +12 -0
  50. package/cjs/constants/index.d.ts +28 -0
  51. package/cjs/constants/index.js +474 -0
  52. package/cjs/index.d.ts +23 -0
  53. package/cjs/index.js +65 -0
  54. package/cjs/services/contractService.d.ts +12 -0
  55. package/cjs/services/contractService.js +54 -0
  56. package/cjs/services/ethereumService.d.ts +7 -0
  57. package/cjs/services/ethereumService.js +49 -0
  58. package/cjs/services/ethereumService.test.d.ts +1 -0
  59. package/cjs/services/ethereumService.test.js +242 -0
  60. package/cjs/services/strategiesService.d.ts +2 -0
  61. package/cjs/services/strategiesService.js +723 -0
  62. package/cjs/services/strategiesService.test.d.ts +1 -0
  63. package/cjs/services/strategiesService.test.js +110 -0
  64. package/cjs/services/strategySubService.d.ts +100 -0
  65. package/cjs/services/strategySubService.js +264 -0
  66. package/cjs/services/strategySubService.test.d.ts +1 -0
  67. package/cjs/services/strategySubService.test.js +934 -0
  68. package/cjs/services/subDataService.d.ts +192 -0
  69. package/cjs/services/subDataService.js +475 -0
  70. package/cjs/services/subDataService.test.d.ts +1 -0
  71. package/cjs/services/subDataService.test.js +1282 -0
  72. package/cjs/services/triggerService.d.ts +191 -0
  73. package/cjs/services/triggerService.js +367 -0
  74. package/cjs/services/triggerService.test.d.ts +1 -0
  75. package/cjs/services/triggerService.test.js +926 -0
  76. package/cjs/services/utils.d.ts +25 -0
  77. package/cjs/services/utils.js +131 -0
  78. package/cjs/services/utils.test.d.ts +1 -0
  79. package/cjs/services/utils.test.js +376 -0
  80. package/cjs/types/contracts/generated/Erc20.d.ts +53 -0
  81. package/cjs/types/contracts/generated/Erc20.js +5 -0
  82. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -0
  83. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -0
  84. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -0
  85. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -0
  86. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -0
  87. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -0
  88. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -0
  89. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -0
  90. package/cjs/types/contracts/generated/SubStorage.d.ts +114 -0
  91. package/cjs/types/contracts/generated/SubStorage.js +5 -0
  92. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -0
  93. package/cjs/types/contracts/generated/UniMulticall.js +5 -0
  94. package/cjs/types/contracts/generated/index.d.ts +7 -0
  95. package/cjs/types/contracts/generated/index.js +2 -0
  96. package/cjs/types/contracts/generated/types.d.ts +54 -0
  97. package/cjs/types/contracts/generated/types.js +2 -0
  98. package/cjs/types/enums.d.ts +181 -0
  99. package/cjs/types/enums.js +203 -0
  100. package/cjs/types/index.d.ts +224 -0
  101. package/cjs/types/index.js +2 -0
  102. package/esm/abis/Erc20.json +223 -223
  103. package/esm/abis/SubStorage.json +21 -21
  104. package/esm/abis/UniMulticall.json +17 -17
  105. package/esm/abis/index.d.ts +9 -9
  106. package/esm/abis/index.js +18 -30
  107. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  108. package/esm/abis/legacy_AuthCheck.json +8 -8
  109. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  110. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  111. package/esm/automation/private/Automation.d.ts +12 -12
  112. package/esm/automation/private/Automation.js +39 -42
  113. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  114. package/esm/automation/private/LegacyAutomation.js +112 -118
  115. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  116. package/esm/automation/private/LegacyProtocol.js +38 -41
  117. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  118. package/esm/automation/private/LegacyProtocol.test.js +20 -25
  119. package/esm/automation/private/Protocol.d.ts +22 -22
  120. package/esm/automation/private/Protocol.js +38 -41
  121. package/esm/automation/private/Protocol.test.d.ts +1 -1
  122. package/esm/automation/private/Protocol.test.js +20 -25
  123. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  124. package/esm/automation/private/StrategiesAutomation.js +175 -181
  125. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  126. package/esm/automation/private/StrategiesAutomation.test.js +666 -671
  127. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  128. package/esm/automation/public/ArbitrumStrategies.js +7 -13
  129. package/esm/automation/public/BaseStrategies.d.ts +5 -5
  130. package/esm/automation/public/BaseStrategies.js +7 -13
  131. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  132. package/esm/automation/public/EthereumStrategies.js +7 -13
  133. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  134. package/esm/automation/public/OptimismStrategies.js +7 -13
  135. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  136. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -20
  137. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  138. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -20
  139. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  140. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -20
  141. package/esm/configuration.d.ts +1 -1
  142. package/esm/configuration.js +7 -12
  143. package/esm/constants/index.d.ts +28 -28
  144. package/esm/constants/index.js +468 -474
  145. package/esm/index.d.ts +23 -23
  146. package/esm/index.js +23 -65
  147. package/esm/services/contractService.d.ts +12 -12
  148. package/esm/services/contractService.js +45 -54
  149. package/esm/services/ethereumService.d.ts +7 -7
  150. package/esm/services/ethereumService.js +41 -49
  151. package/esm/services/ethereumService.test.d.ts +1 -1
  152. package/esm/services/ethereumService.test.js +237 -242
  153. package/esm/services/strategiesService.d.ts +2 -2
  154. package/esm/services/strategiesService.js +696 -723
  155. package/esm/services/strategiesService.test.d.ts +1 -1
  156. package/esm/services/strategiesService.test.js +108 -110
  157. package/esm/services/strategySubService.d.ts +100 -100
  158. package/esm/services/strategySubService.js +235 -264
  159. package/esm/services/strategySubService.test.d.ts +1 -1
  160. package/esm/services/strategySubService.test.js +906 -934
  161. package/esm/services/subDataService.d.ts +192 -192
  162. package/esm/services/subDataService.js +469 -475
  163. package/esm/services/subDataService.test.d.ts +1 -1
  164. package/esm/services/subDataService.test.js +1254 -1282
  165. package/esm/services/triggerService.d.ts +191 -191
  166. package/esm/services/triggerService.js +338 -367
  167. package/esm/services/triggerService.test.d.ts +1 -1
  168. package/esm/services/triggerService.test.js +901 -926
  169. package/esm/services/utils.d.ts +25 -25
  170. package/esm/services/utils.js +82 -131
  171. package/esm/services/utils.test.d.ts +1 -1
  172. package/esm/services/utils.test.js +348 -376
  173. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  174. package/esm/types/contracts/generated/Erc20.js +4 -5
  175. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  176. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -5
  177. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  178. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -5
  179. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  180. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -5
  181. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  182. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -5
  183. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  184. package/esm/types/contracts/generated/SubStorage.js +4 -5
  185. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  186. package/esm/types/contracts/generated/UniMulticall.js +4 -5
  187. package/esm/types/contracts/generated/index.d.ts +7 -7
  188. package/esm/types/contracts/generated/index.js +1 -2
  189. package/esm/types/contracts/generated/types.d.ts +54 -54
  190. package/esm/types/contracts/generated/types.js +1 -2
  191. package/esm/types/enums.d.ts +181 -181
  192. package/esm/types/enums.js +200 -203
  193. package/esm/types/index.d.ts +224 -224
  194. package/esm/types/index.js +1 -2
  195. package/package.json +61 -71
  196. package/scripts/generateContractTypes.js +39 -39
  197. package/src/abis/Erc20.json +222 -222
  198. package/src/abis/SubStorage.json +21 -21
  199. package/src/abis/UniMulticall.json +17 -17
  200. package/src/abis/index.ts +28 -28
  201. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  202. package/src/abis/legacy_AuthCheck.json +7 -7
  203. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  204. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  205. package/src/automation/private/Automation.ts +44 -44
  206. package/src/automation/private/LegacyAutomation.ts +135 -135
  207. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  208. package/src/automation/private/LegacyProtocol.ts +51 -51
  209. package/src/automation/private/Protocol.test.ts +23 -23
  210. package/src/automation/private/Protocol.ts +51 -51
  211. package/src/automation/private/StrategiesAutomation.test.ts +663 -663
  212. package/src/automation/private/StrategiesAutomation.ts +242 -242
  213. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  214. package/src/automation/public/BaseStrategies.ts +10 -10
  215. package/src/automation/public/EthereumStrategies.ts +10 -10
  216. package/src/automation/public/OptimismStrategies.ts +10 -10
  217. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  218. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  219. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  220. package/src/configuration.ts +8 -8
  221. package/src/constants/index.ts +492 -492
  222. package/src/index.ts +39 -39
  223. package/src/services/contractService.ts +77 -77
  224. package/src/services/ethereumService.test.ts +257 -257
  225. package/src/services/ethereumService.ts +69 -69
  226. package/src/services/strategiesService.test.ts +105 -105
  227. package/src/services/strategiesService.ts +934 -934
  228. package/src/services/strategySubService.test.ts +1119 -1119
  229. package/src/services/strategySubService.ts +518 -518
  230. package/src/services/subDataService.test.ts +1387 -1387
  231. package/src/services/subDataService.ts +644 -644
  232. package/src/services/triggerService.test.ts +1004 -1004
  233. package/src/services/triggerService.ts +449 -449
  234. package/src/services/utils.test.ts +430 -430
  235. package/src/services/utils.ts +103 -103
  236. package/src/types/enums.ts +197 -197
  237. package/src/types/index.ts +279 -279
  238. package/tsconfig.esm.json +8 -0
  239. package/tsconfig.json +22 -79
  240. package/umd/index.js +40 -253
  241. package/.tests.sh +0 -3
  242. package/all_comits.txt +0 -2134
  243. package/webpack.umd.js +0 -52
@@ -1,431 +1,431 @@
1
- import { expect } from 'chai';
2
- import * as web3Utils from 'web3-utils';
3
- import AbiCoder from 'web3-eth-abi';
4
- import { getAssetInfo } from '@defisaver/tokens';
5
-
6
- import type { EthereumAddress } from '../types';
7
- import { ChainId, ProtocolIdentifiers, RatioState } from '../types/enums';
8
-
9
- import { sparkEncode } from './strategySubService';
10
-
11
- import '../configuration';
12
- import {
13
- addToArrayIf,
14
- addToObjectIf,
15
- compareAddresses,
16
- compareSubHashes,
17
- encodeSubId,
18
- ethToWeth,
19
- getRatioStateInfoForAaveCloseStrategy,
20
- isAddress,
21
- isDefined,
22
- isEmptyBytes,
23
- isRatioStateOver,
24
- isRatioStateUnder,
25
- isUndefined,
26
- ratioPercentageToWei,
27
- requireAddress,
28
- requireAddresses,
29
- weiToRatioPercentage,
30
- wethToEth,
31
- wethToEthByAddress,
32
- getPositionId,
33
- } from './utils';
34
-
35
- describe('Feature: utils.ts', () => {
36
- describe('When testing utils.isDefined()', () => {
37
- const examples: Array<[boolean, any]> = [
38
- [true, 'something'],
39
- [true, NaN],
40
- [true, 0],
41
- [false, undefined],
42
- [false, null],
43
- ];
44
-
45
- examples.forEach(([expected, actual]) => {
46
- it(`Given ${actual} should return expected value: ${expected}`, () => {
47
- expect(isDefined(actual)).to.equal(expected);
48
- });
49
- });
50
- });
51
-
52
- describe('When testing utils.isUndefined()', () => {
53
- const examples: Array<[boolean, any]> = [
54
- [false, 'something'],
55
- [false, NaN],
56
- [false, 0],
57
- [true, undefined],
58
- [true, null],
59
- ];
60
-
61
- examples.forEach(([expected, actual]) => {
62
- it(`Given ${actual} should return expected value: ${expected}`, () => {
63
- expect(isUndefined(actual)).to.equal(expected);
64
- });
65
- });
66
- });
67
-
68
- describe('When testing utils.compareAddresses()', () => {
69
- const examples: Array<[boolean, [string, string]]> = [
70
- [true, ['nesto', 'nesto']],
71
- [true, ['', '']],
72
- [false, ['something', 'nesto']],
73
- [false, ['', 'nesto']],
74
- ];
75
-
76
- examples.forEach(([expected, actual]) => {
77
- it(`Given ${actual} should return expected value: ${expected}`, () => {
78
- expect(compareAddresses(...actual)).to.equal(expected);
79
- });
80
- });
81
- });
82
-
83
- describe('When testing utils.isAddress()', () => {
84
- const examples: Array<[boolean, string]> = [
85
- [true, '0x996bc83fa1b947cca00e5dcf776c438096549062'],
86
- [true, '0x0000000000000000000000000000000000000000'],
87
- [false, '0x996bc83fa147cca00e5dcf776c438096549062'],
88
- [false, '0x996bc83fa147cca00e5dcf776c438096549062xx'],
89
- [false, ''],
90
- [false, 'majmune.eth'],
91
- ];
92
-
93
- examples.forEach(([expected, actual]) => {
94
- it(`Given ${actual} should return expected value: ${expected}`, () => {
95
- expect(isAddress(actual)).to.equal(expected);
96
- });
97
- });
98
- });
99
-
100
- describe('When testing utils.addToArrayIf()', () => {
101
-
102
- const exampleOne = [1, ...addToArrayIf(true, 2)];
103
- const actualOne = [1, 2];
104
-
105
- it(`Given ${actualOne.join(', ')} should return expected value: [${exampleOne.join(', ')}]`, () => {
106
- expect(actualOne).to.eql(exampleOne)
107
- });
108
-
109
- const exampleTwo = [1, ...addToArrayIf(false, 2)];
110
- const actualTwo = [1];
111
-
112
- it(`Given ${actualTwo.join(', ')} should return expected value: [${exampleTwo.join(', ')}]`, () => {
113
- expect(actualTwo).to.eql(exampleTwo)
114
- });
115
- });
116
-
117
- describe('When testing utils.addToObjectIf()', () => {
118
-
119
- const exampleOne = {
120
- a: 1, ...addToObjectIf(true, { b: 2 })
121
- };
122
- const actualOne = { a: 1, b: 2 };
123
-
124
- it(`Given ${JSON.stringify(actualOne)} should return expected value: ${JSON.stringify(exampleOne)}`, () => {
125
- expect(actualOne).to.eql(exampleOne)
126
- });
127
-
128
- const exampleTwo = {
129
- a: 1, ...addToObjectIf(false, { b: 2 })
130
- };
131
- const actualTwo = { a: 1 };
132
-
133
- it(`Given ${JSON.stringify(actualTwo)} should return expected value: ${JSON.stringify(exampleTwo)}`, () => {
134
- expect(actualTwo).to.eql(exampleTwo)
135
- });
136
- });
137
-
138
- describe('When testing utils.ethToWeth()', () => {
139
-
140
- const examples: Array<[string, string]> = [
141
- ['WETH', 'ETH'],
142
- ['rETH', 'rETH'],
143
- ['ETH.c', 'ETH.c'],
144
- ['cETHx2', 'cETHx2'],
145
- ['WETH', 'WETH'],
146
- ['DAI', 'DAI'],
147
- ];
148
-
149
- examples.forEach(([expected, actual]) => {
150
- it(`Given ${actual} should return expected value: ${expected}`, () => {
151
- expect(ethToWeth(actual)).to.equal(expected);
152
- });
153
- });
154
- });
155
-
156
- describe('When testing utils.wethToEth()', () => {
157
-
158
- const examples: Array<[string, string]> = [
159
- ['ETH', 'ETH'],
160
- ['rETH', 'rETH'],
161
- ['ETH.c', 'ETH.c'],
162
- ['cETHx2', 'cETHx2'],
163
- ['ETH', 'WETH'],
164
- ['DAI', 'DAI'],
165
- ];
166
-
167
- examples.forEach(([expected, actual]) => {
168
- it(`Given ${actual} should return expected value: ${expected}`, () => {
169
- expect(wethToEth(actual)).to.equal(expected);
170
- });
171
- });
172
- });
173
-
174
- describe('When testing utils.wethToEthByAddress()', () => {
175
-
176
- /**
177
- * @dev wethToEthByAddress will return empty string when asset doesn't exist in assets array of @defisaver/tokens
178
- * This is @defisaver/tokens problem, but still seems like a wierd behaviour
179
- */
180
- const examples: Array<[string, [string, number]]> = [
181
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 1]],
182
- ['0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', ['0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', 1]],
183
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 1]],
184
-
185
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0x4200000000000000000000000000000000000006', 10]],
186
- ['0xab7badef82e9fe11f6f33f87bc9bc2aa27f2fcb5', ['0xab7badef82e9fe11f6f33f87bc9bc2aa27f2fcb5', 10]],
187
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 10]],
188
-
189
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 42161]],
190
- ['0xaf88d065e77c8cC2239327C5EDb3A432268e5831', ['0xaf88d065e77c8cC2239327C5EDb3A432268e5831', 42161]],
191
- ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 42161]],
192
-
193
- ];
194
-
195
- examples.forEach(([expected, actual]) => {
196
- it(`Given ${actual} should return expected value: ${expected}`, () => {
197
- expect(wethToEthByAddress(...actual)).to.equal(expected);
198
- });
199
- });
200
- });
201
-
202
- describe('When testing utils.compareSubHashes()', () => {
203
-
204
- const subDataToEncodeOne = [
205
- 12,
206
- false,
207
- {
208
- baseTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
209
- quoteTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
210
- price: 100,
211
- ratioState: 1,
212
- },
213
- {
214
- collAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
215
- collAssetId: 2,
216
- debtAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
217
- debtAssetId: 3,
218
- },
219
- ]
220
-
221
- const subDataToEncodeTwo = [
222
- 13,
223
- true,
224
- {
225
- baseTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
226
- quoteTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
227
- price: 100,
228
- ratioState: 2,
229
- },
230
- {
231
- collAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
232
- collAssetId: 2,
233
- debtAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
234
- debtAssetId: 3,
235
- },
236
- ]
237
-
238
- // @ts-ignore
239
- const encodedSubDataOne = sparkEncode.closeToAsset(...subDataToEncodeOne);
240
- // @ts-ignore
241
- const encodedSubDataTwo = sparkEncode.closeToAsset(...subDataToEncodeTwo);
242
- const encodedParams = web3Utils.keccak256(AbiCoder.encodeParameter('(uint64,bool,bytes[],bytes32[])', encodedSubDataOne));
243
-
244
- const examples: Array<[boolean, [string, any[]]]> = [
245
- [true, [encodedParams, encodedSubDataOne]],
246
- [false, [encodedParams, encodedSubDataTwo]],
247
- ];
248
-
249
- examples.forEach(([expected, actual]) => {
250
- it(`Given ${actual} should return expected value: ${expected}`, () => {
251
- expect(compareSubHashes(...actual)).to.equal(expected);
252
- });
253
- });
254
- });
255
-
256
- describe('When testing utils.encodeSubId()', () => {
257
- const examples: Array<[string, string]> = [
258
- ['00000001', '1'],
259
- ['00000002', '2'],
260
- ['0021c503', '2213123']
261
- ];
262
-
263
- examples.forEach(([expected, actual]) => {
264
- it(`Given ${actual} should return expected value: ${expected}`, () => {
265
- expect(encodeSubId(actual)).to.equal(expected);
266
- });
267
- });
268
- });
269
-
270
- describe('When testing utils.ratioPercentageToWei()', () => {
271
- const examples: Array<[string, number]> = [
272
- ['1200000000000000000', 120],
273
- ['2400000000000000000', 240],
274
- ['870000000000000000', 87],
275
- ];
276
-
277
- examples.forEach(([expected, actual]) => {
278
- it(`Given ${actual} should return expected value: ${expected}`, () => {
279
- expect(ratioPercentageToWei(actual)).to.equal(expected);
280
- });
281
- });
282
- });
283
-
284
- describe('When testing utils.weiToRatioPercentage()', () => {
285
- const examples: Array<[number, string]> = [
286
- [120, '1200000000000000000'],
287
- [240, '2400000000000000000'],
288
- [87, '870000000000000000'],
289
- ];
290
-
291
- examples.forEach(([expected, actual]) => {
292
- it(`Given ${actual} should return expected value: ${expected}`, () => {
293
- expect(weiToRatioPercentage(actual)).to.equal(expected);
294
- });
295
- });
296
- });
297
-
298
- describe('When testing utils.isRatioStateOver()', () => {
299
- const examples: Array<[boolean, RatioState]> = [
300
- [true, RatioState.OVER],
301
- [false, RatioState.UNDER],
302
- [false, NaN],
303
- [false, 3],
304
- [false, Infinity],
305
- ];
306
-
307
- examples.forEach(([expected, actual]) => {
308
- it(`Given ${actual} should return expected value: ${expected}`, () => {
309
- expect(isRatioStateOver(actual)).to.equal(expected);
310
- });
311
- });
312
- });
313
-
314
- describe('When testing utils.isRatioStateUnder()', () => {
315
- const examples: Array<[boolean, RatioState]> = [
316
- [true, RatioState.UNDER],
317
- [false, RatioState.OVER],
318
- [false, NaN],
319
- [false, 3],
320
- [false, Infinity],
321
- ];
322
-
323
- examples.forEach(([expected, actual]) => {
324
- it(`Given ${actual} should return expected value: ${expected}`, () => {
325
- expect(isRatioStateUnder(actual)).to.equal(expected);
326
- });
327
- });
328
- });
329
-
330
- describe('When testing utils.isEmptyBytes()', () => {
331
- const examples: Array<[boolean, string]> = [
332
- [true, '0x0000000000000000000000000000000000000000'],
333
- [false, '0x0000000000000000000000000000000000000001'],
334
- [false, '0x00000000000000000000000000000000000000000000'],
335
- [false, '0x000000000000000000000000000000000000000'],
336
- [false, ''],
337
- ];
338
-
339
- examples.forEach(([expected, actual]) => {
340
- it(`Given ${actual} should return expected value: ${expected}`, () => {
341
- expect(isEmptyBytes(actual)).to.equal(expected);
342
- });
343
- });
344
- });
345
-
346
- describe('When testing utils.requireAddress()', () => {
347
- const examples: Array<[boolean, any]> = [
348
- [true, '0x1e5698681E03326d783215adfB3173acF3Cf2B6'],
349
- [true, 1312],
350
- [true, ''],
351
- [true, '0x0000000000000000000000000000000000000000'],
352
- [true, '0xZe5698681E03326d783215adfB3173acF3Cf2B6'],
353
- [true, 'Ze5698681E03326d783215adfB3173acF3Cf2B6'],
354
- [false, '0x1e5698681E03326d783215adfB3173acF3Cf2B61'],
355
- ];
356
-
357
- examples.forEach(([expected, actual]) => {
358
- if (expected) {
359
- it(`Given ${actual} should throw an error`, () => {
360
- expect(() => requireAddress(actual)).to.throw(Error);
361
- });
362
- } else {
363
- it(`Given ${actual} should not throw an error`, () => {
364
- expect(() => requireAddress(actual)).not.to.throw(Error);
365
- });
366
- }
367
- });
368
- });
369
-
370
- describe('When testing utils.requireAddresses()', () => {
371
- const examples: Array<[boolean, any]> = [
372
- [true, '0x1e5698681E03326d783215adfB3173acF3Cf2B6'],
373
- [true, [1312, '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
374
- [true, ['', '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
375
- [true, ['0x0000000000000000000000000000000000000000', '0x1e5698481E03326d783215adfB3173acF3Cf2B61']],
376
- [true, ['0xZe5698681E03326d783215adfB3173acF3Cf2B6', '0x1e5698681E03326d783215adfB3173acF3Cc2B61']],
377
- [true, ['Ze5698681E03326d783215adfB3173acF3Cf2B6', '', '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
378
- [false, ['0x1e5698681E03326d783215adfB3173acF3Cf2B61', '0x2e5698681E03326d783215adfB3173acF3Cf2B61']],
379
- ];
380
-
381
- examples.forEach(([expected, actual]) => {
382
- if (expected) {
383
- it(`Given ${actual} should throw an error`, () => {
384
- expect(() => requireAddresses(actual)).to.throw(Error);
385
- });
386
- } else {
387
- it(`Given ${actual} should not throw an error`, () => {
388
- expect(() => requireAddresses(actual)).not.to.throw(Error);
389
- });
390
- }
391
- });
392
- });
393
-
394
- describe('When testing utils.getRatioStateInfoForAaveCloseStrategy()', () => {
395
- const examples: Array<[{ shouldFlip: boolean, ratioState: RatioState }, [RatioState, EthereumAddress, EthereumAddress, ChainId]]> = [
396
- [
397
- { shouldFlip: true, ratioState: RatioState.UNDER },
398
- [RatioState.OVER, getAssetInfo('DAI').address, getAssetInfo('ETH').address, ChainId.Ethereum]
399
- ],
400
- [
401
- { shouldFlip: false, ratioState: RatioState.UNDER },
402
- [RatioState.UNDER, getAssetInfo('DAI').address, getAssetInfo('ETH').address, ChainId.Arbitrum]
403
- ],
404
- [
405
- { shouldFlip: false, ratioState: RatioState.OVER },
406
- [RatioState.OVER, getAssetInfo('ETH').address, getAssetInfo('ETH').address, ChainId.Optimism]
407
- ],
408
- ];
409
-
410
- examples.forEach(([expected, actual]) => {
411
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
412
- expect(getRatioStateInfoForAaveCloseStrategy(...actual)).to.eql(expected);
413
- });
414
- });
415
- });
416
-
417
- describe('When testing utils.getPositionId()', () => {
418
- const examples: Array<[string, (number | string)[]]> = [
419
- [
420
- '1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
421
- [1, ProtocolIdentifiers.StrategiesAutomation.AaveV3, '0x9cB7E19861665366011899d74E75d4F2A419aEeD', '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e']
422
- ],
423
- ];
424
-
425
- examples.forEach(([expected, actual]) => {
426
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
427
- expect(getPositionId(...actual)).to.eql(expected);
428
- });
429
- });
430
- });
1
+ import { expect } from 'chai';
2
+ import * as web3Utils from 'web3-utils';
3
+ import AbiCoder from 'web3-eth-abi';
4
+ import { getAssetInfo } from '@defisaver/tokens';
5
+
6
+ import type { EthereumAddress } from '../types';
7
+ import { ChainId, ProtocolIdentifiers, RatioState } from '../types/enums';
8
+
9
+ import { sparkEncode } from './strategySubService';
10
+
11
+ import '../configuration';
12
+ import {
13
+ addToArrayIf,
14
+ addToObjectIf,
15
+ compareAddresses,
16
+ compareSubHashes,
17
+ encodeSubId,
18
+ ethToWeth,
19
+ getRatioStateInfoForAaveCloseStrategy,
20
+ isAddress,
21
+ isDefined,
22
+ isEmptyBytes,
23
+ isRatioStateOver,
24
+ isRatioStateUnder,
25
+ isUndefined,
26
+ ratioPercentageToWei,
27
+ requireAddress,
28
+ requireAddresses,
29
+ weiToRatioPercentage,
30
+ wethToEth,
31
+ wethToEthByAddress,
32
+ getPositionId,
33
+ } from './utils';
34
+
35
+ describe('Feature: utils.ts', () => {
36
+ describe('When testing utils.isDefined()', () => {
37
+ const examples: Array<[boolean, any]> = [
38
+ [true, 'something'],
39
+ [true, NaN],
40
+ [true, 0],
41
+ [false, undefined],
42
+ [false, null],
43
+ ];
44
+
45
+ examples.forEach(([expected, actual]) => {
46
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
47
+ expect(isDefined(actual)).to.equal(expected);
48
+ });
49
+ });
50
+ });
51
+
52
+ describe('When testing utils.isUndefined()', () => {
53
+ const examples: Array<[boolean, any]> = [
54
+ [false, 'something'],
55
+ [false, NaN],
56
+ [false, 0],
57
+ [true, undefined],
58
+ [true, null],
59
+ ];
60
+
61
+ examples.forEach(([expected, actual]) => {
62
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
63
+ expect(isUndefined(actual)).to.equal(expected);
64
+ });
65
+ });
66
+ });
67
+
68
+ describe('When testing utils.compareAddresses()', () => {
69
+ const examples: Array<[boolean, [string, string]]> = [
70
+ [true, ['nesto', 'nesto']],
71
+ [true, ['', '']],
72
+ [false, ['something', 'nesto']],
73
+ [false, ['', 'nesto']],
74
+ ];
75
+
76
+ examples.forEach(([expected, actual]) => {
77
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
78
+ expect(compareAddresses(...actual)).to.equal(expected);
79
+ });
80
+ });
81
+ });
82
+
83
+ describe('When testing utils.isAddress()', () => {
84
+ const examples: Array<[boolean, string]> = [
85
+ [true, '0x996bc83fa1b947cca00e5dcf776c438096549062'],
86
+ [true, '0x0000000000000000000000000000000000000000'],
87
+ [false, '0x996bc83fa147cca00e5dcf776c438096549062'],
88
+ [false, '0x996bc83fa147cca00e5dcf776c438096549062xx'],
89
+ [false, ''],
90
+ [false, 'majmune.eth'],
91
+ ];
92
+
93
+ examples.forEach(([expected, actual]) => {
94
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
95
+ expect(isAddress(actual)).to.equal(expected);
96
+ });
97
+ });
98
+ });
99
+
100
+ describe('When testing utils.addToArrayIf()', () => {
101
+
102
+ const exampleOne = [1, ...addToArrayIf(true, 2)];
103
+ const actualOne = [1, 2];
104
+
105
+ it(`Given ${actualOne.join(', ')} should return expected value: [${exampleOne.join(', ')}]`, () => {
106
+ expect(actualOne).to.eql(exampleOne)
107
+ });
108
+
109
+ const exampleTwo = [1, ...addToArrayIf(false, 2)];
110
+ const actualTwo = [1];
111
+
112
+ it(`Given ${actualTwo.join(', ')} should return expected value: [${exampleTwo.join(', ')}]`, () => {
113
+ expect(actualTwo).to.eql(exampleTwo)
114
+ });
115
+ });
116
+
117
+ describe('When testing utils.addToObjectIf()', () => {
118
+
119
+ const exampleOne = {
120
+ a: 1, ...addToObjectIf(true, { b: 2 })
121
+ };
122
+ const actualOne = { a: 1, b: 2 };
123
+
124
+ it(`Given ${JSON.stringify(actualOne)} should return expected value: ${JSON.stringify(exampleOne)}`, () => {
125
+ expect(actualOne).to.eql(exampleOne)
126
+ });
127
+
128
+ const exampleTwo = {
129
+ a: 1, ...addToObjectIf(false, { b: 2 })
130
+ };
131
+ const actualTwo = { a: 1 };
132
+
133
+ it(`Given ${JSON.stringify(actualTwo)} should return expected value: ${JSON.stringify(exampleTwo)}`, () => {
134
+ expect(actualTwo).to.eql(exampleTwo)
135
+ });
136
+ });
137
+
138
+ describe('When testing utils.ethToWeth()', () => {
139
+
140
+ const examples: Array<[string, string]> = [
141
+ ['WETH', 'ETH'],
142
+ ['rETH', 'rETH'],
143
+ ['ETH.c', 'ETH.c'],
144
+ ['cETHx2', 'cETHx2'],
145
+ ['WETH', 'WETH'],
146
+ ['DAI', 'DAI'],
147
+ ];
148
+
149
+ examples.forEach(([expected, actual]) => {
150
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
151
+ expect(ethToWeth(actual)).to.equal(expected);
152
+ });
153
+ });
154
+ });
155
+
156
+ describe('When testing utils.wethToEth()', () => {
157
+
158
+ const examples: Array<[string, string]> = [
159
+ ['ETH', 'ETH'],
160
+ ['rETH', 'rETH'],
161
+ ['ETH.c', 'ETH.c'],
162
+ ['cETHx2', 'cETHx2'],
163
+ ['ETH', 'WETH'],
164
+ ['DAI', 'DAI'],
165
+ ];
166
+
167
+ examples.forEach(([expected, actual]) => {
168
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
169
+ expect(wethToEth(actual)).to.equal(expected);
170
+ });
171
+ });
172
+ });
173
+
174
+ describe('When testing utils.wethToEthByAddress()', () => {
175
+
176
+ /**
177
+ * @dev wethToEthByAddress will return empty string when asset doesn't exist in assets array of @defisaver/tokens
178
+ * This is @defisaver/tokens problem, but still seems like a wierd behaviour
179
+ */
180
+ const examples: Array<[string, [string, number]]> = [
181
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 1]],
182
+ ['0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', ['0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', 1]],
183
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 1]],
184
+
185
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0x4200000000000000000000000000000000000006', 10]],
186
+ ['0xab7badef82e9fe11f6f33f87bc9bc2aa27f2fcb5', ['0xab7badef82e9fe11f6f33f87bc9bc2aa27f2fcb5', 10]],
187
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 10]],
188
+
189
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 42161]],
190
+ ['0xaf88d065e77c8cC2239327C5EDb3A432268e5831', ['0xaf88d065e77c8cC2239327C5EDb3A432268e5831', 42161]],
191
+ ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 42161]],
192
+
193
+ ];
194
+
195
+ examples.forEach(([expected, actual]) => {
196
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
197
+ expect(wethToEthByAddress(...actual)).to.equal(expected);
198
+ });
199
+ });
200
+ });
201
+
202
+ describe('When testing utils.compareSubHashes()', () => {
203
+
204
+ const subDataToEncodeOne = [
205
+ 12,
206
+ false,
207
+ {
208
+ baseTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
209
+ quoteTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
210
+ price: 100,
211
+ ratioState: 1,
212
+ },
213
+ {
214
+ collAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
215
+ collAssetId: 2,
216
+ debtAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
217
+ debtAssetId: 3,
218
+ },
219
+ ]
220
+
221
+ const subDataToEncodeTwo = [
222
+ 13,
223
+ true,
224
+ {
225
+ baseTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
226
+ quoteTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
227
+ price: 100,
228
+ ratioState: 2,
229
+ },
230
+ {
231
+ collAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
232
+ collAssetId: 2,
233
+ debtAsset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
234
+ debtAssetId: 3,
235
+ },
236
+ ]
237
+
238
+ // @ts-ignore
239
+ const encodedSubDataOne = sparkEncode.closeToAsset(...subDataToEncodeOne);
240
+ // @ts-ignore
241
+ const encodedSubDataTwo = sparkEncode.closeToAsset(...subDataToEncodeTwo);
242
+ const encodedParams = web3Utils.keccak256(AbiCoder.encodeParameter('(uint64,bool,bytes[],bytes32[])', encodedSubDataOne));
243
+
244
+ const examples: Array<[boolean, [string, any[]]]> = [
245
+ [true, [encodedParams, encodedSubDataOne]],
246
+ [false, [encodedParams, encodedSubDataTwo]],
247
+ ];
248
+
249
+ examples.forEach(([expected, actual]) => {
250
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
251
+ expect(compareSubHashes(...actual)).to.equal(expected);
252
+ });
253
+ });
254
+ });
255
+
256
+ describe('When testing utils.encodeSubId()', () => {
257
+ const examples: Array<[string, string]> = [
258
+ ['00000001', '1'],
259
+ ['00000002', '2'],
260
+ ['0021c503', '2213123']
261
+ ];
262
+
263
+ examples.forEach(([expected, actual]) => {
264
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
265
+ expect(encodeSubId(actual)).to.equal(expected);
266
+ });
267
+ });
268
+ });
269
+
270
+ describe('When testing utils.ratioPercentageToWei()', () => {
271
+ const examples: Array<[string, number]> = [
272
+ ['1200000000000000000', 120],
273
+ ['2400000000000000000', 240],
274
+ ['870000000000000000', 87],
275
+ ];
276
+
277
+ examples.forEach(([expected, actual]) => {
278
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
279
+ expect(ratioPercentageToWei(actual)).to.equal(expected);
280
+ });
281
+ });
282
+ });
283
+
284
+ describe('When testing utils.weiToRatioPercentage()', () => {
285
+ const examples: Array<[number, string]> = [
286
+ [120, '1200000000000000000'],
287
+ [240, '2400000000000000000'],
288
+ [87, '870000000000000000'],
289
+ ];
290
+
291
+ examples.forEach(([expected, actual]) => {
292
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
293
+ expect(weiToRatioPercentage(actual)).to.equal(expected);
294
+ });
295
+ });
296
+ });
297
+
298
+ describe('When testing utils.isRatioStateOver()', () => {
299
+ const examples: Array<[boolean, RatioState]> = [
300
+ [true, RatioState.OVER],
301
+ [false, RatioState.UNDER],
302
+ [false, NaN],
303
+ [false, 3],
304
+ [false, Infinity],
305
+ ];
306
+
307
+ examples.forEach(([expected, actual]) => {
308
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
309
+ expect(isRatioStateOver(actual)).to.equal(expected);
310
+ });
311
+ });
312
+ });
313
+
314
+ describe('When testing utils.isRatioStateUnder()', () => {
315
+ const examples: Array<[boolean, RatioState]> = [
316
+ [true, RatioState.UNDER],
317
+ [false, RatioState.OVER],
318
+ [false, NaN],
319
+ [false, 3],
320
+ [false, Infinity],
321
+ ];
322
+
323
+ examples.forEach(([expected, actual]) => {
324
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
325
+ expect(isRatioStateUnder(actual)).to.equal(expected);
326
+ });
327
+ });
328
+ });
329
+
330
+ describe('When testing utils.isEmptyBytes()', () => {
331
+ const examples: Array<[boolean, string]> = [
332
+ [true, '0x0000000000000000000000000000000000000000'],
333
+ [false, '0x0000000000000000000000000000000000000001'],
334
+ [false, '0x00000000000000000000000000000000000000000000'],
335
+ [false, '0x000000000000000000000000000000000000000'],
336
+ [false, ''],
337
+ ];
338
+
339
+ examples.forEach(([expected, actual]) => {
340
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
341
+ expect(isEmptyBytes(actual)).to.equal(expected);
342
+ });
343
+ });
344
+ });
345
+
346
+ describe('When testing utils.requireAddress()', () => {
347
+ const examples: Array<[boolean, any]> = [
348
+ [true, '0x1e5698681E03326d783215adfB3173acF3Cf2B6'],
349
+ [true, 1312],
350
+ [true, ''],
351
+ [true, '0x0000000000000000000000000000000000000000'],
352
+ [true, '0xZe5698681E03326d783215adfB3173acF3Cf2B6'],
353
+ [true, 'Ze5698681E03326d783215adfB3173acF3Cf2B6'],
354
+ [false, '0x1e5698681E03326d783215adfB3173acF3Cf2B61'],
355
+ ];
356
+
357
+ examples.forEach(([expected, actual]) => {
358
+ if (expected) {
359
+ it(`Given ${actual} should throw an error`, () => {
360
+ expect(() => requireAddress(actual)).to.throw(Error);
361
+ });
362
+ } else {
363
+ it(`Given ${actual} should not throw an error`, () => {
364
+ expect(() => requireAddress(actual)).not.to.throw(Error);
365
+ });
366
+ }
367
+ });
368
+ });
369
+
370
+ describe('When testing utils.requireAddresses()', () => {
371
+ const examples: Array<[boolean, any]> = [
372
+ [true, '0x1e5698681E03326d783215adfB3173acF3Cf2B6'],
373
+ [true, [1312, '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
374
+ [true, ['', '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
375
+ [true, ['0x0000000000000000000000000000000000000000', '0x1e5698481E03326d783215adfB3173acF3Cf2B61']],
376
+ [true, ['0xZe5698681E03326d783215adfB3173acF3Cf2B6', '0x1e5698681E03326d783215adfB3173acF3Cc2B61']],
377
+ [true, ['Ze5698681E03326d783215adfB3173acF3Cf2B6', '', '0x1e5698681E03326d783215adfB3173acF3Cf2B61']],
378
+ [false, ['0x1e5698681E03326d783215adfB3173acF3Cf2B61', '0x2e5698681E03326d783215adfB3173acF3Cf2B61']],
379
+ ];
380
+
381
+ examples.forEach(([expected, actual]) => {
382
+ if (expected) {
383
+ it(`Given ${actual} should throw an error`, () => {
384
+ expect(() => requireAddresses(actual)).to.throw(Error);
385
+ });
386
+ } else {
387
+ it(`Given ${actual} should not throw an error`, () => {
388
+ expect(() => requireAddresses(actual)).not.to.throw(Error);
389
+ });
390
+ }
391
+ });
392
+ });
393
+
394
+ describe('When testing utils.getRatioStateInfoForAaveCloseStrategy()', () => {
395
+ const examples: Array<[{ shouldFlip: boolean, ratioState: RatioState }, [RatioState, EthereumAddress, EthereumAddress, ChainId]]> = [
396
+ [
397
+ { shouldFlip: true, ratioState: RatioState.UNDER },
398
+ [RatioState.OVER, getAssetInfo('DAI').address, getAssetInfo('ETH').address, ChainId.Ethereum]
399
+ ],
400
+ [
401
+ { shouldFlip: false, ratioState: RatioState.UNDER },
402
+ [RatioState.UNDER, getAssetInfo('DAI').address, getAssetInfo('ETH').address, ChainId.Arbitrum]
403
+ ],
404
+ [
405
+ { shouldFlip: false, ratioState: RatioState.OVER },
406
+ [RatioState.OVER, getAssetInfo('ETH').address, getAssetInfo('ETH').address, ChainId.Optimism]
407
+ ],
408
+ ];
409
+
410
+ examples.forEach(([expected, actual]) => {
411
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
412
+ expect(getRatioStateInfoForAaveCloseStrategy(...actual)).to.eql(expected);
413
+ });
414
+ });
415
+ });
416
+
417
+ describe('When testing utils.getPositionId()', () => {
418
+ const examples: Array<[string, (number | string)[]]> = [
419
+ [
420
+ '1-aave__v3-0x9cb7e19861665366011899d74e75d4f2a419aeed-0x2f39d218133afab8f2b819b1066c7e434ad94e9e',
421
+ [1, ProtocolIdentifiers.StrategiesAutomation.AaveV3, '0x9cB7E19861665366011899d74E75d4F2A419aEeD', '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e']
422
+ ],
423
+ ];
424
+
425
+ examples.forEach(([expected, actual]) => {
426
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
427
+ expect(getPositionId(...actual)).to.eql(expected);
428
+ });
429
+ });
430
+ });
431
431
  });