Skip to content

Commit 4a6722a

Browse files
fix: surface InvalidOrderId to clients as CantDo(NotFound) (#752)
* fix: return CantDo(NotFound) for missing orders instead of InvalidOrderId * fix: format order_id extraction in get_order (no functional change)
1 parent 82f1923 commit 4a6722a

3 files changed

Lines changed: 64 additions & 7 deletions

File tree

src/app/admin_take_dispute.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,11 @@ pub async fn admin_take_dispute_action(
180180
// Get order from db using the dispute order id
181181
let order = if let Some(order) = Order::by_id(pool, dispute.order_id)
182182
.await
183-
.map_err(|_| MostroInternalErr(ServiceError::InvalidOrderId))?
183+
.map_err(|e| MostroInternalErr(ServiceError::DbAccessError(e.to_string())))?
184184
{
185185
order
186186
} else {
187-
return Err(MostroInternalErr(ServiceError::InvalidOrderId));
187+
return Err(MostroCantDo(CantDoReason::NotFound));
188188
};
189189

190190
// Update dispute fields

src/app/dispute.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ pub async fn dispute_action(
159159
let order_id = if let Some(order_id) = msg.get_inner_message_kind().id {
160160
order_id
161161
} else {
162-
return Err(MostroInternalErr(ServiceError::InvalidOrderId));
162+
return Err(MostroCantDo(CantDoReason::NotFound));
163163
};
164164
// Check dispute for this order id is yet present.
165165
if find_dispute_by_order_id(pool, order_id).await.is_ok() {

src/util.rs

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,16 +1433,14 @@ pub async fn get_dispute(msg: &Message, pool: &Pool<Sqlite>) -> Result<Dispute,
14331433

14341434
pub async fn get_order(msg: &Message, pool: &Pool<Sqlite>) -> Result<Order, MostroError> {
14351435
let order_msg = msg.get_inner_message_kind();
1436-
let order_id = order_msg
1437-
.id
1438-
.ok_or(MostroInternalErr(ServiceError::InvalidOrderId))?;
1436+
let order_id = order_msg.id.ok_or(MostroCantDo(CantDoReason::NotFound))?;
14391437
let order = Order::by_id(pool, order_id)
14401438
.await
14411439
.map_err(|e| MostroInternalErr(ServiceError::DbAccessError(e.to_string())))?;
14421440
if let Some(order) = order {
14431441
Ok(order)
14441442
} else {
1445-
Err(MostroInternalErr(ServiceError::InvalidOrderId))
1443+
Err(MostroCantDo(CantDoReason::NotFound))
14461444
}
14471445
}
14481446

@@ -1907,6 +1905,65 @@ mod tests {
19071905
assert!(orders.is_empty());
19081906
}
19091907

1908+
#[tokio::test]
1909+
async fn test_get_order_returns_not_found_when_id_missing() {
1910+
initialize();
1911+
let pool = setup_orders_pool().await;
1912+
let message = Message::Order(MessageKind::new(
1913+
None,
1914+
None,
1915+
None,
1916+
Action::AdminSettle,
1917+
None,
1918+
));
1919+
1920+
let err = get_order(&message, &pool).await.unwrap_err();
1921+
assert!(matches!(
1922+
err,
1923+
MostroError::MostroCantDo(CantDoReason::NotFound)
1924+
));
1925+
}
1926+
1927+
#[tokio::test]
1928+
async fn test_get_order_returns_not_found_when_order_absent() {
1929+
initialize();
1930+
let pool = setup_orders_pool().await;
1931+
let missing_id = Uuid::new_v4();
1932+
let message = Message::Order(MessageKind::new(
1933+
Some(missing_id),
1934+
None,
1935+
None,
1936+
Action::AdminSettle,
1937+
None,
1938+
));
1939+
1940+
let err = get_order(&message, &pool).await.unwrap_err();
1941+
assert!(matches!(
1942+
err,
1943+
MostroError::MostroCantDo(CantDoReason::NotFound)
1944+
));
1945+
}
1946+
1947+
#[tokio::test]
1948+
async fn test_get_order_returns_order_when_found() {
1949+
initialize();
1950+
let pool = setup_orders_pool().await;
1951+
let user_pubkey = "a".repeat(64);
1952+
let order_id = Uuid::new_v4();
1953+
insert_order(&pool, order_id, Some(&user_pubkey), None, &user_pubkey).await;
1954+
1955+
let message = Message::Order(MessageKind::new(
1956+
Some(order_id),
1957+
None,
1958+
None,
1959+
Action::AdminSettle,
1960+
None,
1961+
));
1962+
1963+
let order = get_order(&message, &pool).await.unwrap();
1964+
assert_eq!(order.id, order_id);
1965+
}
1966+
19101967
#[test]
19111968
fn test_get_dev_fee_basic() {
19121969
// 1000 sats Mostro fee at 30% -> 300 sats

0 commit comments

Comments
 (0)