diff --git a/src/tests/iq.rs b/src/tests/iq.rs new file mode 100644 index 0000000..97f0324 --- /dev/null +++ b/src/tests/iq.rs @@ -0,0 +1,65 @@ +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU Affero General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at your +// option) any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License +// for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +use crate::component::TestComponent; +use crate::handlers::handle_stanza; +use crate::room::Room; + +use std::collections::HashMap; +use std::str::FromStr; + +use lazy_static::lazy_static; +use xmpp_parsers::{ + iq::{Iq, IqType}, + stanza_error::{DefinedCondition, ErrorType, StanzaError}, + BareJid, Element, FullJid, Jid, +}; + +lazy_static! { + static ref COMPONENT_JID: BareJid = BareJid::from_str("muc.component").unwrap(); +} + +#[tokio::test] +async fn test_iq_unimplemented() { + let from = Jid::Full(FullJid::from_str("foo@bar/qxx").unwrap()); + let to = Jid::Bare(COMPONENT_JID.clone()); + + let disco: Element = Iq { + from: Some(from.clone()), + to: Some(to.clone()), + id: String::from("disco"), + payload: IqType::Get(Element::builder("x", "urn:example:unimplemented").build()), + } + .into(); + + let reply: Element = Iq::from_error( + "disco", + StanzaError::new( + ErrorType::Cancel, + DefinedCondition::ServiceUnavailable, + "en", + "No handler defined for this kind of iq.", + ), + ) + .with_from(to) + .with_to(from) + .into(); + + let mut component = TestComponent::new(vec![disco]); + let mut rooms: HashMap = HashMap::new(); + + component.expect(reply); + handle_stanza(&mut component, &mut rooms).await.unwrap(); + component.assert(); +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..ceb3cec --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1,20 @@ +// Copyright (C) 2022-2099 The crate authors. +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU Affero General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at your +// option) any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License +// for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#[cfg(test)] +mod iq; + +#[cfg(test)] +mod presence; diff --git a/src/tests.rs b/src/tests/presence.rs similarity index 95% rename from src/tests.rs rename to src/tests/presence.rs index 83151ce..65eff7e 100644 --- a/src/tests.rs +++ b/src/tests/presence.rs @@ -23,7 +23,6 @@ use std::str::FromStr; use lazy_static::lazy_static; use xmpp_parsers::{ delay::Delay, - iq::{Iq, IqType}, message::{Message, MessageType, Subject as MessageSubject}, muc::{ user::{Affiliation, Item as MucItem, Role, Status as MucStatus}, @@ -38,40 +37,6 @@ lazy_static! { static ref COMPONENT_JID: BareJid = BareJid::from_str("muc.component").unwrap(); } -#[tokio::test] -async fn test_iq_unimplemented() { - let from = Jid::Full(FullJid::from_str("foo@bar/qxx").unwrap()); - let to = Jid::Bare(COMPONENT_JID.clone()); - - let disco: Element = Iq { - from: Some(from.clone()), - to: Some(to.clone()), - id: String::from("disco"), - payload: IqType::Get(Element::builder("x", "urn:example:unimplemented").build()), - } - .into(); - - let reply: Element = Iq::from_error( - "disco", - StanzaError::new( - ErrorType::Cancel, - DefinedCondition::ServiceUnavailable, - "en", - "No handler defined for this kind of iq.", - ), - ) - .with_from(to) - .with_to(from) - .into(); - - let mut component = TestComponent::new(vec![disco]); - let mut rooms: HashMap = HashMap::new(); - - component.expect(reply); - handle_stanza(&mut component, &mut rooms).await.unwrap(); - component.assert(); -} - #[tokio::test] async fn test_join_presence_empty_room() { let from = FullJid::from_str("foo@bar/qxx").unwrap();