Skip to content

Commit d67a626

Browse files
author
Nikita Khateev
committed
Add tests for add_request_fees and payment_req
Signed-off-by: Nikita Khateev <[email protected]>
1 parent f00fffc commit d67a626

File tree

4 files changed

+83
-38
lines changed

4 files changed

+83
-38
lines changed

libnullpay/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors = ["Nikita Khateev <[email protected]>"]
55

66
[lib]
77
name = "nullpay"
8-
crate-type = ["cdylib"]
8+
crate-type = ["cdylib", "rlib"]
99

1010
[dependencies]
1111
lazy_static = "1.0"

libnullpay/build.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ fn main() {
1313

1414
println!("cargo:rustc-link-lib=dylib=indy.dll");
1515
println!("cargo:rustc-flags=-L {}", indy_dir);
16+
} else {
17+
println!("cargo:rustc-link-lib=indy");
1618
}
1719
}

libnullpay/tests/payments.rs

Lines changed: 80 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ static EMPTY_OBJECT: &str = "{}";
2828
static PAYMENT_METHOD_NAME: &str = "null";
2929
static POOL_NAME: &str = "pool_1";
3030
static SUBMITTER_DID: &str = "Th7MpTaRZVRYnPiabds81Y";
31-
static DEST: &str = "FYmoFw55GeQH7SRFa37dkx1d2dZ3zUF8ckg7wmL7ofN4";
32-
static VERKEY: &str = "CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW";
31+
static TRUSTEE_SEED: &str = "000000000000000000000000Trustee1";
3332
static FEES: &str = r#"{"1":1, "101":2}"#;
3433

3534
mod 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

libnullpay/tests/utils/did.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,6 @@ use nullpay::ErrorCode;
22
use std::ffi::CString;
33
use std::os::raw::c_char;
44

5-
pub const TRUSTEE_SEED: &'static str = "000000000000000000000000Trustee1";
6-
7-
pub fn create_store_and_publish_my_did_from_trustee(wallet_handle: i32, pool_handle: i32) -> Result<(String, String), ErrorCode> {
8-
let (trustee_did, _) = create_and_store_my_did(wallet_handle, Some(TRUSTEE_SEED))?;
9-
let (my_did, my_vk) = create_and_store_my_did(wallet_handle, None)?;
10-
let nym = super::ledger::build_nym_request(&trustee_did, &my_did, &my_vk, "", "TRUSTEE")?;
11-
super::ledger::sign_and_submit_request(pool_handle, wallet_handle, &trustee_did, &nym)?; //TODO check response type
12-
Ok((my_did, my_vk))
13-
}
14-
155
pub fn create_and_store_my_did(wallet_handle: i32, seed: Option<&str>) -> Result<(String, String), ErrorCode> {
166
let (receiver, command_handle, cb) = super::callbacks::_closure_to_cb_ec_string_string();
177

0 commit comments

Comments
 (0)