use mpdclient::{Error, Message};
use crate::common::setup_mpd;
mod common;
#[test]
fn roundtrip() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
let channel = conn.channel();
channel.subscribe("test_roundtrip")?;
channel.channel_write("test_roundtrip", "a message")?;
let messages = channel
.read_subscriptions()?
.collect::<Result<Vec<Message>, Error>>()?;
assert_eq!(messages.len(), 1);
assert_eq!(
messages[0],
Message {
channel: "test_roundtrip".to_string(),
text: "a message".to_string()
}
);
Ok(())
},
)
}
#[test]
fn multiple_messages() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
let channel = conn.channel();
channel.subscribe("test_multiple_msg")?;
channel.channel_write("test_multiple_msg", "a message")?;
channel.channel_write("test_multiple_msg", "second message")?;
channel.channel_write("test_multiple_msg", "the third")?;
let messages = channel
.read_subscriptions()?
.collect::<Result<Vec<Message>, Error>>()?;
assert_eq!(
messages,
vec![
Message {
channel: "test_multiple_msg".to_string(),
text: "a message".to_string()
},
Message {
channel: "test_multiple_msg".to_string(),
text: "second message".to_string()
},
Message {
channel: "test_multiple_msg".to_string(),
text: "the third".to_string()
}
]
);
Ok(())
},
)
}
#[test]
fn multiple_channel() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
let channel = conn.channel();
channel.subscribe("test_multiple_ch1")?;
channel.subscribe("test_multiple_ch2")?;
channel.subscribe("test_multiple_ch3")?;
channel.channel_write("test_multiple_ch1", "a message")?;
channel.channel_write("test_multiple_ch2", "second message")?;
channel.channel_write("test_multiple_ch3", "the third")?;
let messages = channel
.read_subscriptions()?
.collect::<Result<Vec<Message>, Error>>()?;
assert_eq!(
messages,
vec![
Message {
channel: "test_multiple_ch1".to_string(),
text: "a message".to_string()
},
Message {
channel: "test_multiple_ch2".to_string(),
text: "second message".to_string()
},
Message {
channel: "test_multiple_ch3".to_string(),
text: "the third".to_string()
}
]
);
Ok(())
},
)
}
#[test]
fn list() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
let channel = conn.channel();
channel.subscribe("test_list1")?;
channel.subscribe("test_list2")?;
let list = channel.list()?;
assert!(list.contains(&"test_list1".to_string()));
assert!(list.contains(&"test_list2".to_string()));
Ok(())
},
)
}