From db93991c41ca2c7af9edfa03c8b10200da12957a Mon Sep 17 00:00:00 2001 From: MatthieuCoder Date: Sat, 14 Jan 2023 19:06:14 +0400 Subject: add tests --- libs/leash/src/lib.rs | 2 ++ libs/shared/src/payloads.rs | 62 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 8 deletions(-) (limited to 'libs') diff --git a/libs/leash/src/lib.rs b/libs/leash/src/lib.rs index 37e2b7c..91bfaf5 100644 --- a/libs/leash/src/lib.rs +++ b/libs/leash/src/lib.rs @@ -128,5 +128,7 @@ mod test { } } + + ignite!(TestComponent); } diff --git a/libs/shared/src/payloads.rs b/libs/shared/src/payloads.rs index 3f183a9..a4818e6 100644 --- a/libs/shared/src/payloads.rs +++ b/libs/shared/src/payloads.rs @@ -1,4 +1,5 @@ use std::fmt::Debug; +use std::ops::{Deref, DerefMut}; use serde::de::DeserializeSeed; use serde::Deserializer; @@ -7,10 +8,20 @@ use serde_json::Value; use tracing::trace_span; use twilight_model::gateway::event::{DispatchEvent, DispatchEventWithTypeDeserializer}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] #[repr(transparent)] -pub struct DispatchEventTagged { - pub data: DispatchEvent, +pub struct DispatchEventTagged(pub DispatchEvent); + +impl Deref for DispatchEventTagged { + type Target = DispatchEvent; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for DispatchEventTagged { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } } #[derive(Serialize, Deserialize)] @@ -31,9 +42,7 @@ impl<'de> Deserialize<'de> for DispatchEventTagged { let tagged = DispatchEventTaggedSerialized::deserialize(deserializer)?; let deserializer_seed = DispatchEventWithTypeDeserializer::new(&tagged.kind); let dispatch_event = deserializer_seed.deserialize(tagged.data).unwrap(); - Ok(Self { - data: dispatch_event, - }) + Ok(Self(dispatch_event)) } } @@ -43,9 +52,9 @@ impl Serialize for DispatchEventTagged { S: serde::Serializer, { let _s = trace_span!("serializing DispatchEventTagged"); - let kind = self.data.kind().name().unwrap(); + let kind = self.0.kind().name().unwrap(); DispatchEventTaggedSerialized { - data: serde_json::to_value(&self.data).unwrap(), + data: serde_json::to_value(&self.0).unwrap(), kind: kind.to_string(), } .serialize(serializer) @@ -58,3 +67,40 @@ pub struct CachePayload { #[serde(flatten)] pub data: DispatchEventTagged, } +#[cfg(test)] +mod tests { + use serde_json::json; + use twilight_model::gateway::event::DispatchEvent; + + use super::DispatchEventTagged; + + #[test] + fn serialize_event_tagged() { + let dispatch_event = DispatchEvent::GiftCodeUpdate; + + let value = serde_json::to_value(&dispatch_event); + assert!(value.is_ok()); + let value = value.unwrap(); + + let kind = value.get("t").and_then(serde_json::Value::as_str); + assert_eq!(kind, Some("GIFT_CODE_UPDATE")); + } + + #[test] + fn deserialize_event_tagged() { + let json = json!({ + "t": "GIFT_CODE_UPDATE", + "d": {} + }); + + let dispatch_event = serde_json::from_value::(json); + assert!(dispatch_event.is_ok()); + + let dispatch_event_tagged = dispatch_event.unwrap(); + + assert_eq!( + DispatchEventTagged(DispatchEvent::GiftCodeUpdate), + dispatch_event_tagged + ); + } +} -- cgit v1.2.3