@@ -28,8 +28,7 @@ static EMPTY_OBJECT: &str = "{}";
2828static PAYMENT_METHOD_NAME : & str = "null" ;
2929static POOL_NAME : & str = "pool_1" ;
3030static SUBMITTER_DID : & str = "Th7MpTaRZVRYnPiabds81Y" ;
31- static DEST : & str = "FYmoFw55GeQH7SRFa37dkx1d2dZ3zUF8ckg7wmL7ofN4" ;
32- static VERKEY : & str = "CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW" ;
31+ static TRUSTEE_SEED : & str = "000000000000000000000000Trustee1" ;
3332static FEES : & str = r#"{"1":1, "101":2}"# ;
3433
3534mod high_cases {
@@ -164,48 +163,102 @@ mod high_cases {
164163 plugin:: init_plugin ( ) ;
165164 let wallet_handle = wallet:: create_and_open_wallet ( POOL_NAME , None ) . unwrap ( ) ;
166165 let pool_handle = pool:: create_and_open_pool_ledger ( POOL_NAME ) . unwrap ( ) ;
167- let ( my_did, verkey) = did:: create_store_and_publish_my_did_from_trustee ( wallet_handle, pool_handle) . unwrap ( ) ;
168166
169- // let addresses = payments_utils::create_addresses(vec!["{}", "{}"], wallet_handle, PAYMENT_METHOD_NAME);
167+ let ( trustee_did, _) = did:: create_and_store_my_did ( wallet_handle, Some ( TRUSTEE_SEED ) ) . unwrap ( ) ;
168+ let ( my_did, my_vk) = did:: create_and_store_my_did ( wallet_handle, None ) . unwrap ( ) ;
169+ let nym_req = ledger:: build_nym_request ( & trustee_did, & my_did, & my_vk, "aaa" , "TRUSTEE" ) . unwrap ( ) ;
170170
171- // let mint: Vec<(String, i32, Option<&str>)> = addresses.clone().into_iter().enumerate().map(|(i, addr)| (addr, ((i+2)*10) as i32, None)).collect();
172- // payments_utils::mint_tokens(mint, wallet_handle, pool_handle, PAYMENT_METHOD_NAME, my_did.as_str());
171+ let addresses = payments_utils:: create_addresses ( vec ! [ "{}" , "{}" ] , wallet_handle, PAYMENT_METHOD_NAME ) ;
172+
173+ let mint: Vec < ( String , i32 , Option < & str > ) > = addresses. clone ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, addr) | ( addr, ( ( i+2 ) * 10 ) as i32 , None ) ) . collect ( ) ;
174+ payments_utils:: mint_tokens ( mint, wallet_handle, pool_handle, PAYMENT_METHOD_NAME , my_did. as_str ( ) ) ;
173175
174- // let utxos = payments_utils::get_utxos_with_balance(addresses.clone(), wallet_handle, pool_handle, my_did.as_str());
176+ let utxos = payments_utils:: get_utxos_with_balance ( addresses. clone ( ) , wallet_handle, pool_handle, my_did. as_str ( ) ) ;
175177
176- // payments_utils::set_request_fees(wallet_handle, pool_handle, my_did.as_str(), PAYMENT_METHOD_NAME, FEES);
178+ payments_utils:: set_request_fees ( wallet_handle, pool_handle, my_did. as_str ( ) , PAYMENT_METHOD_NAME , FEES ) ;
177179
178- let nym_req = ledger:: build_nym_request ( my_did. as_str ( ) , DEST , VERKEY , "aaa" , "" ) . unwrap ( ) ;
180+ let addr_1 = addresses. get ( 0 ) . unwrap ( ) ;
181+ let utxos_1: Vec < String > = utxos. get ( addr_1. as_str ( ) ) . unwrap ( ) . into_iter ( ) . map ( |info| info. input . clone ( ) ) . collect ( ) ;
182+ let inputs = serde_json:: to_string ( & utxos_1) . unwrap ( ) ;
183+
184+ let outputs = vec ! [ UTXOOutput {
185+ payment_address: addresses. get( 1 ) . unwrap( ) . to_string( ) ,
186+ amount: 19 ,
187+ extra: None
188+ } ] ;
189+ let outputs = serde_json:: to_string ( & outputs) . unwrap ( ) ;
179190
180- // let addr_1 = addresses.get(0).unwrap();
181- // let utxos_1: Vec<String> = utxos.get(addr_1.as_str()).unwrap().into_iter().map(|info| info.input.clone()).collect();
182- // let inputs = serde_json::to_string(&utxos_1).unwrap();
191+ let ( nym_req_with_fees, payment_method) = payments:: add_request_fees ( wallet_handle, my_did. as_str ( ) , nym_req. as_str ( ) , inputs. as_str ( ) , outputs. as_str ( ) ) . unwrap ( ) ;
183192
184- // let outputs = vec![UTXOOutput{
185- // payment_address: addresses.get(1).unwrap().to_string(),
186- // amount: 19,
187- // extra: None
188- // }];
189- // let outputs = serde_json::to_string(&outputs).unwrap();
190- //
191- // let (nym_req_with_fees, payment_method) = payments::add_request_fees(wallet_handle, my_did.as_str(), nym_req.as_str(), inputs.as_str(), outputs.as_str()).unwrap();
193+ let nym_response = ledger:: sign_and_submit_request ( pool_handle, wallet_handle, trustee_did. as_str ( ) , nym_req_with_fees. as_str ( ) ) . unwrap ( ) ;
192194
193- let nym_response = ledger:: sign_and_submit_request ( pool_handle, wallet_handle, my_did. as_str ( ) , nym_req. as_str ( ) ) . unwrap ( ) ;
194- trace ! ( "nym response {}" , nym_response) ;
195195 let nym_response_parsed = payments:: parse_response_with_fees ( PAYMENT_METHOD_NAME , nym_response. as_str ( ) ) . unwrap ( ) ;
196196
197- // let created_utxos: Vec<UTXOInfo> = serde_json::from_str(nym_response_parsed.as_str()).unwrap();
198- //
199- // assert_eq!(created_utxos.len(), 1);
200- // let new_utxo = created_utxos.get(0).unwrap();
201- // assert_eq!(new_utxo.amount, 19);
197+ let created_utxos: Vec < UTXOInfo > = serde_json:: from_str ( nym_response_parsed. as_str ( ) ) . unwrap ( ) ;
198+
199+ assert_eq ! ( created_utxos. len( ) , 1 ) ;
200+ let new_utxo = created_utxos. get ( 0 ) . unwrap ( ) ;
201+ assert_eq ! ( new_utxo. amount, 19 ) ;
202+
203+ //TODO: check that there is 2 UTXO for the second address and 0 UTXO for the first one
202204
203205 pool:: close ( pool_handle) . unwrap ( ) ;
204206 wallet:: close_wallet ( wallet_handle) . unwrap ( ) ;
205207 test_utils:: cleanup_storage ( ) ;
206208 }
207209 }
208210
211+ mod payment {
212+ use super :: * ;
213+
214+ #[ test]
215+ pub fn payment_request_works ( ) {
216+ test_utils:: cleanup_storage ( ) ;
217+ plugin:: init_plugin ( ) ;
218+ let wallet_handle = wallet:: create_and_open_wallet ( POOL_NAME , None ) . unwrap ( ) ;
219+ let pool_handle = pool:: create_and_open_pool_ledger ( POOL_NAME ) . unwrap ( ) ;
220+
221+ let addresses = payments_utils:: create_addresses ( vec ! [ "{}" , "{}" ] , wallet_handle, PAYMENT_METHOD_NAME ) ;
222+
223+ let mint: Vec < ( String , i32 , Option < & str > ) > = addresses. clone ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, addr) | ( addr, ( ( i+2 ) * 10 ) as i32 , None ) ) . collect ( ) ;
224+ payments_utils:: mint_tokens ( mint, wallet_handle, pool_handle, PAYMENT_METHOD_NAME , SUBMITTER_DID ) ;
225+
226+ let utxos = payments_utils:: get_utxos_with_balance ( addresses. clone ( ) , wallet_handle, pool_handle, SUBMITTER_DID ) ;
227+
228+ let addr_1 = addresses. get ( 0 ) . unwrap ( ) ;
229+ let utxos_1: Vec < String > = utxos. get ( addr_1. as_str ( ) ) . unwrap ( ) . into_iter ( ) . map ( |info| info. input . clone ( ) ) . collect ( ) ;
230+ let inputs = serde_json:: to_string ( & utxos_1) . unwrap ( ) ;
231+
232+ let outputs = vec ! [ UTXOOutput {
233+ payment_address: addresses. get( 1 ) . unwrap( ) . to_string( ) ,
234+ amount: 19 ,
235+ extra: None
236+ } , UTXOOutput {
237+ payment_address: addresses. get( 0 ) . unwrap( ) . to_string( ) ,
238+ amount: 1 ,
239+ extra: None
240+ } ] ;
241+ let outputs = serde_json:: to_string ( & outputs) . unwrap ( ) ;
242+
243+ let ( payment_req, payment_method) = payments:: build_payment_req ( wallet_handle, SUBMITTER_DID , inputs. as_str ( ) , outputs. as_str ( ) ) . unwrap ( ) ;
244+ let payment_resp = ledger:: submit_request ( pool_handle, payment_req. as_str ( ) ) . unwrap ( ) ;
245+ let payment_resp_parsed = payments:: parse_payment_response ( payment_method. as_str ( ) , payment_resp. as_str ( ) ) . unwrap ( ) ;
246+
247+ let utxos: Vec < UTXOInfo > = serde_json:: from_str ( payment_resp_parsed. as_str ( ) ) . unwrap ( ) ;
248+ assert_eq ! ( utxos. len( ) , 2 ) ;
249+
250+ let utxos: HashMap < i32 , String > = utxos. into_iter ( ) . map ( |info| ( info. amount , info. input ) ) . collect ( ) ;
251+ let payment_utxo = utxos. get ( & 19 ) . unwrap ( ) ;
252+ let change_utxo = utxos. get ( & 1 ) . unwrap ( ) ;
253+
254+ let payment_utxo_end = payment_utxo. split ( "_" ) . last ( ) . unwrap ( ) ;
255+ assert ! ( addresses. get( 1 ) . unwrap( ) . to_string( ) . ends_with( payment_utxo_end) ) ;
256+
257+ let change_utxo_end = change_utxo. split ( "_" ) . last ( ) . unwrap ( ) ;
258+ assert ! ( addresses. get( 0 ) . unwrap( ) . to_string( ) . ends_with( change_utxo_end) ) ;
259+ }
260+ }
261+
209262 mod fees {
210263 use super :: * ;
211264
0 commit comments