From 938b4ba5627e5c97d9315468aae0650b2a9dfe31 Mon Sep 17 00:00:00 2001 From: aproskill81 Date: Fri, 27 Mar 2026 08:35:39 +0100 Subject: [PATCH] fix(data): preserve unknown activity side values --- src/data/types/response.rs | 14 +++++--- tests/data.rs | 70 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/data/types/response.rs b/src/data/types/response.rs index 85d8cac3..e089223f 100644 --- a/src/data/types/response.rs +++ b/src/data/types/response.rs @@ -19,11 +19,15 @@ where match opt { None => Ok(None), Some(s) if s.is_empty() => Ok(None), - Some(s) => match s.to_uppercase().as_str() { - "BUY" => Ok(Some(Side::Buy)), - "SELL" => Ok(Some(Side::Sell)), - _ => Ok(None), - }, + Some(s) => { + let side = match s.to_uppercase().as_str() { + "BUY" => Side::Buy, + "SELL" => Side::Sell, + _ => Side::Unknown(s), + }; + + Ok(Some(side)) + } } } diff --git a/tests/data.rs b/tests/data.rs index 3cacdba0..a850a850 100644 --- a/tests/data.rs +++ b/tests/data.rs @@ -258,6 +258,76 @@ mod activity { Ok(()) } + + #[tokio::test] + async fn activity_unknown_side_should_be_preserved() -> anyhow::Result<()> { + let server = MockServer::start(); + let client = Client::new(&server.base_url())?; + + let mock = server.mock(|when, then| { + when.method(GET) + .path("/activity") + .query_param("user", "0x1234567890abcdef1234567890abcdef12345678"); + then.status(StatusCode::OK).json_body(json!([ + { + "proxyWallet": "0x1234567890abcdef1234567890abcdef12345678", + "timestamp": 1_703_980_800, + "conditionId": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890", + "type": "TRADE", + "size": 100.0, + "usdcSize": 55.0, + "transactionHash": "0x2222222222222222222222222222222222222222222222222222222222222222", + "price": 0.55, + "asset": "0x1111111111111111111111111111111111111111111111111111111111111111", + "side": "SIDEWAYS" + } + ])); + }); + + let request = ActivityRequest::builder().user(test_user()).build(); + let response = client.activity(&request).await?; + + assert_eq!(response.len(), 1); + assert_eq!(response[0].side, Some(Side::Unknown("SIDEWAYS".to_owned()))); + mock.assert(); + + Ok(()) + } + + #[tokio::test] + async fn activity_empty_side_should_still_be_none() -> anyhow::Result<()> { + let server = MockServer::start(); + let client = Client::new(&server.base_url())?; + + let mock = server.mock(|when, then| { + when.method(GET) + .path("/activity") + .query_param("user", "0x1234567890abcdef1234567890abcdef12345678"); + then.status(StatusCode::OK).json_body(json!([ + { + "proxyWallet": "0x1234567890abcdef1234567890abcdef12345678", + "timestamp": 1_703_980_800, + "conditionId": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890", + "type": "TRADE", + "size": 100.0, + "usdcSize": 55.0, + "transactionHash": "0x2222222222222222222222222222222222222222222222222222222222222222", + "price": 0.55, + "asset": "0x1111111111111111111111111111111111111111111111111111111111111111", + "side": "" + } + ])); + }); + + let request = ActivityRequest::builder().user(test_user()).build(); + let response = client.activity(&request).await?; + + assert_eq!(response.len(), 1); + assert_eq!(response[0].side, None); + mock.assert(); + + Ok(()) + } } mod holders {