1+ import { APP_DATA_DOC_WITH_FLASHLOAN } from '../mocks'
2+ import { generateAppDataDoc } from './generateAppDataDoc'
3+ import { validateAppDataDoc } from './validateAppDataDoc'
4+
5+ describe ( 'Flashloan metadata' , ( ) => {
6+ test ( 'Creates appDataDoc with flashloan metadata' , async ( ) => {
7+ // given
8+ const flashloanMetadata = {
9+ lender : '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2' ,
10+ borrower : '0x2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b' ,
11+ token : '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ,
12+ amount : '1000000000' ,
13+ }
14+
15+ // when
16+ const appDataDoc = await generateAppDataDoc ( {
17+ metadata : {
18+ flashloan : flashloanMetadata ,
19+ } ,
20+ } )
21+
22+ // then
23+ expect ( appDataDoc . metadata . flashloan ) . toEqual ( flashloanMetadata )
24+ expect ( appDataDoc . version ) . toBe ( '1.6.0' )
25+ } )
26+
27+ test ( 'Validates valid flashloan metadata' , async ( ) => {
28+ // when
29+ const validation = await validateAppDataDoc ( APP_DATA_DOC_WITH_FLASHLOAN )
30+
31+ // then
32+ expect ( validation . success ) . toBeTruthy ( )
33+ expect ( validation . errors ) . toBeUndefined ( )
34+ } )
35+
36+ test ( 'Fails validation with invalid lender address' , async ( ) => {
37+ // given
38+ const invalidDoc = {
39+ ...APP_DATA_DOC_WITH_FLASHLOAN ,
40+ metadata : {
41+ flashloan : {
42+ ...APP_DATA_DOC_WITH_FLASHLOAN . metadata . flashloan ,
43+ lender : '0xinvalid' ,
44+ } ,
45+ } ,
46+ }
47+
48+ // when
49+ const validation = await validateAppDataDoc ( invalidDoc )
50+
51+ // then
52+ expect ( validation . success ) . toBeFalsy ( )
53+ expect ( validation . errors ) . toContain ( 'data/metadata/flashloan/lender must match pattern "^0x[a-fA-F0-9]{40}$"' )
54+ } )
55+
56+ test ( 'Fails validation with invalid amount' , async ( ) => {
57+ // given
58+ const invalidDoc = {
59+ ...APP_DATA_DOC_WITH_FLASHLOAN ,
60+ metadata : {
61+ flashloan : {
62+ ...APP_DATA_DOC_WITH_FLASHLOAN . metadata . flashloan ,
63+ amount : '-100' ,
64+ } ,
65+ } ,
66+ }
67+
68+ // when
69+ const validation = await validateAppDataDoc ( invalidDoc )
70+
71+ // then
72+ expect ( validation . success ) . toBeFalsy ( )
73+ expect ( validation . errors ) . toContain ( 'data/metadata/flashloan/amount must match pattern "^[1-9]\\d*$"' )
74+ } )
75+
76+ test ( 'Fails validation with zero amount' , async ( ) => {
77+ // given
78+ const invalidDoc = {
79+ ...APP_DATA_DOC_WITH_FLASHLOAN ,
80+ metadata : {
81+ flashloan : {
82+ ...APP_DATA_DOC_WITH_FLASHLOAN . metadata . flashloan ,
83+ amount : '0' ,
84+ } ,
85+ } ,
86+ }
87+
88+ // when
89+ const validation = await validateAppDataDoc ( invalidDoc )
90+
91+ // then
92+ expect ( validation . success ) . toBeFalsy ( )
93+ expect ( validation . errors ) . toContain ( 'data/metadata/flashloan/amount must match pattern "^[1-9]\\d*$"' )
94+ } )
95+
96+ test ( 'Fails validation with missing required fields' , async ( ) => {
97+ // given
98+ const invalidDoc = {
99+ version : '1.6.0' ,
100+ appCode : 'CoW Swap' ,
101+ metadata : {
102+ flashloan : {
103+ lender : '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2' ,
104+ // missing borrower, token, and amount
105+ } ,
106+ } ,
107+ }
108+
109+ // when
110+ const validation = await validateAppDataDoc ( invalidDoc )
111+
112+ // then
113+ expect ( validation . success ) . toBeFalsy ( )
114+ expect ( validation . errors ) . toContain ( "data/metadata/flashloan must have required property 'borrower'" )
115+ } )
116+
117+ test ( 'Creates appDataDoc with flashloan and other metadata' , async ( ) => {
118+ // given
119+ const metadata = {
120+ flashloan : {
121+ lender : '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2' ,
122+ borrower : '0x2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b' ,
123+ token : '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ,
124+ amount : '1000000000' ,
125+ } ,
126+ quote : {
127+ slippageBips : 50 ,
128+ version : '1.1.0' ,
129+ } ,
130+ }
131+
132+ // when
133+ const appDataDoc = await generateAppDataDoc ( { metadata } )
134+
135+ // then
136+ expect ( appDataDoc . metadata ) . toEqual ( metadata )
137+ expect ( appDataDoc . version ) . toBe ( '1.6.0' )
138+ } )
139+ } )
0 commit comments