We can now create securities in the UI!!!!
This commit is contained in:
1 parent
048ac31c27
commit
4810603dd7
10 files changed
+147
-23
No files matched your search
@@ -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()))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user