We can now create securities in the UI!!!!

This commit is contained in:
didier amyot committed 2023-04-05 13:48:58 -04:00
1 parent 048ac31c27
commit 4810603dd7
10 files changed
+147 -23

No files matched your search

+61 -3
View File
@@ -62,6 +62,48 @@ fn _transfer_wire_transfer_securities(
wire_transfer_request.amount)
}
fn _add_wire_transfer_request_to_wire_transfers_log(tx: &Connection,
cheque: &WireTransferRequest,
drawer_receipt: &accounts::AccountChangeReceipt,
payee_receipt: &accounts::AccountChangeReceipt) -> Result<(), Error> {
let q = "
INSERT INTO cached_wire_transfers(
drawer_account_id,
drawer_account_version,
payee_account_id,
payee_account_version,
wire_transfer_request_number,
amount,
underlying_security
)
VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7)
";
let params = params![
drawer_receipt.account_id,
drawer_receipt.version,
payee_receipt.account_id,
payee_receipt.version,
cheque.amount,
cheque.amount,
payee_receipt.security_id
];
let ret = tx.execute(q, params).map_err(Error::SqlError);
match ret {
Ok(_) => Ok(()),
Err(Error::SqlError(rusqlite::Error::SqliteFailure(
ffi::Error {
code: _,
extended_code: 2067,
},
_,
))) => Err(Error::DoubleSpendingError(format!(
"Wire transfer number {} has already been cached.",
cheque.amount
))),
Err(a) => Err(a),
}
}
fn _add_cheque_to_cashed_cheques_log(
tx: &Connection,
cheque: &Cheque,
@@ -172,6 +214,7 @@ fn cash_wire_transfer_request_unsafe(
)));
}
let (drawer_receipt, payee_receipt) = _transfer_wire_transfer_securities(&savepoint, wire_transfer)?;
_add_wire_transfer_request_to_wire_transfers_log(&savepoint, wire_transfer, &drawer_receipt, &payee_receipt)?;
Ok(())
}
@@ -191,7 +234,7 @@ fn cash_cheque(
}
}
fn cash_wire_transfer_request(
pub fn cash_wire_transfer_request(
tx: &mut Transaction,
wire_transfer: &WireTransferRequest,
) -> CustomResult<()> {
@@ -496,7 +539,7 @@ mod test_wire_transfers {
let mut tx = conn.transaction().unwrap();
// let cheque = Cheque::new(security_emitter, payee, 1000, 99);
let wire_transfer = WireTransferRequest::new(security_emitter, &payee_account, 1000);;
let wire_transfer = WireTransferRequest::new(security_emitter, &payee_account, 1000, 777);;
cash_wire_transfer_request(&mut tx, &wire_transfer)?;
tx.commit().unwrap();
@@ -513,7 +556,7 @@ mod test_wire_transfers {
let (mut conn, drawer, payee, payee_account) = setup_basic();
let mut tx = conn.transaction().unwrap();
let wire_transfer = WireTransferRequest::new(drawer.clone(), &payee_account, 25);
let wire_transfer = WireTransferRequest::new(drawer.clone(), &payee_account, 25, 989);
cash_wire_transfer_request(&mut tx, &wire_transfer)?;
@@ -526,5 +569,20 @@ mod test_wire_transfers {
Ok(())
}
#[test]
fn test_wire_transfer_double_spending() -> CustomResult<()> {
let (mut conn, drawer, payee, payee_account) = setup_basic();
let wire_transfer = WireTransferRequest::new(drawer.clone(), &payee_account, 25, 989);
let mut tx = conn.transaction().unwrap();
cash_wire_transfer_request(&mut tx, &wire_transfer)?;
tx.commit().unwrap();
let mut tx = conn.transaction().unwrap();
let ret = cash_wire_transfer_request(&mut tx, &wire_transfer);
match ret {
Err(Error::DoubleSpendingError(_)) => Ok(()),
_ => Err(Error::Testing("Expected DoubleSpendingError error".to_string()))
}
}
}