notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 84e0546e69e8c54fffca6995d4a643cd4b5b0c29
parent d39b2706e0483ea00a73d039c242d2b13ece06a4
Author: Ken Sedgwick <ken@bonsai.com>
Date:   Thu, 20 Feb 2025 11:51:37 -0800

improve relay message parsing unit tests

Diffstat:
Mcrates/enostr/src/relay/message.rs | 153+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 91 insertions(+), 62 deletions(-)

diff --git a/crates/enostr/src/relay/message.rs b/crates/enostr/src/relay/message.rs @@ -145,33 +145,99 @@ mod tests { use super::*; #[test] - fn test_handle_valid_notice() -> Result<()> { - let valid_notice_msg = r#"["NOTICE","Invalid event format!"]"#; - let handled_valid_notice_msg = RelayMessage::notice("Invalid event format!"); - - assert_eq!( - RelayMessage::from_json(valid_notice_msg)?, - handled_valid_notice_msg - ); - + fn test_handle_various_messages() -> Result<()> { + let tests = vec![ + // Valid cases + ( + r#"["NOTICE","Invalid event format!"]"#, + Ok(RelayMessage::notice("Invalid event format!")), + ), + ( + r#"["EVENT", "random_string", {"id":"example","content":"test"}]"#, + Ok(RelayMessage::event( + r#"["EVENT", "random_string", {"id":"example","content":"test"}]"#, + "random_string", + )), + ), + ( + r#"["EOSE","random-subscription-id"]"#, + Ok(RelayMessage::eose("random-subscription-id")), + ), + ( + r#"["EOSE", "random-subscription-id"]"#, + Ok(RelayMessage::eose("random-subscription-id")), + ), + ( + r#"["EOSE", "random-subscription-id" ]"#, + Ok(RelayMessage::eose("random-subscription-id")), + ), + ( + r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30",true,"pow: difficulty 25>=24"]"#, + Ok(RelayMessage::ok( + "b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30", + true, + "pow: difficulty 25>=24", + )), + ), + // Invalid cases + ( + r#"["EVENT","random_string"]"#, + Err(Error::DecodeFailed("Invalid EVENT format".into())), + ), + ( + r#"["EOSE"]"#, + Err(Error::DecodeFailed("unrecognized message type".into())), + ), + ( + r#"["NOTICE"]"#, + Err(Error::DecodeFailed("unrecognized message type".into())), + ), + ( + r#"["NOTICE": 404]"#, + Err(Error::DecodeFailed("unrecognized message type".into())), + ), + ( + r#"["OK","event_id"]"#, + Err(Error::DecodeFailed("unrecognized message type".into())), + ), + ( + r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30"]"#, + Err(Error::DecodeFailed("unrecognized message type".into())), + ), + ( + r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30",hello,""]"#, + Err(Error::DecodeFailed("bad boolean value".into())), + ), + ( + r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30",hello,404]"#, + Err(Error::DecodeFailed("bad boolean value".into())), + ), + ]; + + for (input, expected) in tests { + match expected { + Ok(expected_msg) => { + let result = RelayMessage::from_json(input); + assert_eq!( + result?, expected_msg, + "Expected {:?} for input: {}", + expected_msg, input + ); + } + Err(expected_err) => { + let result = RelayMessage::from_json(input); + assert!( + matches!(result, Err(ref e) if *e.to_string() == expected_err.to_string()), + "Expected error {:?} for input: {}, but got: {:?}", + expected_err, + input, + result + ); + } + } + } Ok(()) } - #[test] - fn test_handle_invalid_notice() { - //Missing content - let invalid_notice_msg = r#"["NOTICE"]"#; - //The content is not string - let invalid_notice_msg_content = r#"["NOTICE": 404]"#; - - assert!(matches!( - RelayMessage::from_json(invalid_notice_msg).unwrap_err(), - Error::DecodeFailed - )); - assert!(matches!( - RelayMessage::from_json(invalid_notice_msg_content).unwrap_err(), - Error::DecodeFailed - )); - } /* #[test] @@ -223,19 +289,6 @@ mod tests { } */ - #[test] - fn test_handle_valid_eose() -> Result<()> { - let valid_eose_msg = r#"["EOSE","random-subscription-id"]"#; - let handled_valid_eose_msg = RelayMessage::eose("random-subscription-id"); - - assert_eq!( - RelayMessage::from_json(valid_eose_msg)?, - handled_valid_eose_msg - ); - - Ok(()) - } - // TODO: fix these tests /* #[test] @@ -267,28 +320,4 @@ mod tests { Ok(()) } */ - - #[test] - fn test_handle_invalid_ok() { - // Missing params - assert!(matches!( - RelayMessage::from_json( - r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30"]"# - ) - .unwrap_err(), - Error::DecodeFailed - )); - - // Invalid status - assert!( - matches!(RelayMessage::from_json(r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30",hello,""]"#).unwrap_err(), - Error::DecodeFailed) - ); - - // Invalid message - assert!( - matches!(RelayMessage::from_json(r#"["OK","b1a649ebe8b435ec71d3784793f3bbf4b93e64e17568a741aecd4c7ddeafce30",hello,404]"#).unwrap_err(), - Error::DecodeFailed) - ); - } }