aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-08-01 08:08:23 -0700
committerZeyla Hellyer <[email protected]>2018-08-01 08:10:05 -0700
commit3fed313193356c6784a33b79d1c2f583ea3944f9 (patch)
tree875b4bab989fc573850d30317a1797bca5027e9f /src/model
parentReword the inner doc comment in `complex_bucket` (diff)
downloadserenity-3fed313193356c6784a33b79d1c2f583ea3944f9.tar.xz
serenity-3fed313193356c6784a33b79d1c2f583ea3944f9.zip
Move unit tests into source
Move the unit tests into the relevant source files. There's no need for them to be seprate, especially when the `tests` directory is meant to be for integration tests. The deserialization tests that include JSON files are still in the `tests` dir, along with the public prelude re-export tests.
Diffstat (limited to 'src/model')
-rw-r--r--src/model/channel/mod.rs90
-rw-r--r--src/model/guild/mod.rs107
-rw-r--r--src/model/misc.rs80
-rw-r--r--src/model/user.rs68
4 files changed, 345 insertions, 0 deletions
diff --git a/src/model/channel/mod.rs b/src/model/channel/mod.rs
index 8d586a6..e0ef085 100644
--- a/src/model/channel/mod.rs
+++ b/src/model/channel/mod.rs
@@ -677,3 +677,93 @@ pub enum PermissionOverwriteType {
/// A role which is having its permission overwrites edited.
Role(RoleId),
}
+
+#[cfg(test)]
+mod test {
+ #[cfg(feature = "utils")]
+ mod utils {
+ use model::prelude::*;
+ use parking_lot::RwLock;
+ use std::collections::HashMap;
+ use std::sync::Arc;
+
+ fn group() -> Group {
+ Group {
+ channel_id: ChannelId(1),
+ icon: None,
+ last_message_id: None,
+ last_pin_timestamp: None,
+ name: None,
+ owner_id: UserId(2),
+ recipients: HashMap::new(),
+ }
+ }
+
+ fn guild_channel() -> GuildChannel {
+ GuildChannel {
+ id: ChannelId(1),
+ bitrate: None,
+ category_id: None,
+ guild_id: GuildId(2),
+ kind: ChannelType::Text,
+ last_message_id: None,
+ last_pin_timestamp: None,
+ name: "nsfw-stuff".to_string(),
+ permission_overwrites: vec![],
+ position: 0,
+ topic: None,
+ user_limit: None,
+ nsfw: false,
+ }
+ }
+
+ fn private_channel() -> PrivateChannel {
+ PrivateChannel {
+ id: ChannelId(1),
+ last_message_id: None,
+ last_pin_timestamp: None,
+ kind: ChannelType::Private,
+ recipient: Arc::new(RwLock::new(User {
+ id: UserId(2),
+ avatar: None,
+ bot: false,
+ discriminator: 1,
+ name: "ab".to_string(),
+ })),
+ }
+ }
+
+ #[test]
+ fn nsfw_checks() {
+ let mut channel = guild_channel();
+ assert!(channel.is_nsfw());
+ channel.kind = ChannelType::Voice;
+ assert!(!channel.is_nsfw());
+
+ channel.kind = ChannelType::Text;
+ channel.name = "nsfw-".to_string();
+ assert!(!channel.is_nsfw());
+
+ channel.name = "nsfw".to_string();
+ assert!(channel.is_nsfw());
+ channel.kind = ChannelType::Voice;
+ assert!(!channel.is_nsfw());
+ channel.kind = ChannelType::Text;
+
+ channel.name = "nsf".to_string();
+ channel.nsfw = true;
+ assert!(channel.is_nsfw());
+ channel.nsfw = false;
+ assert!(!channel.is_nsfw());
+
+ let channel = Channel::Guild(Arc::new(RwLock::new(channel)));
+ assert!(!channel.is_nsfw());
+
+ let group = group();
+ assert!(!group.is_nsfw());
+
+ let private_channel = private_channel();
+ assert!(!private_channel.is_nsfw());
+ }
+ }
+}
diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs
index 67b0f0e..480f7e6 100644
--- a/src/model/guild/mod.rs
+++ b/src/model/guild/mod.rs
@@ -2015,3 +2015,110 @@ impl VerificationLevel {
}
}
}
+
+#[cfg(test)]
+mod test {
+ #[cfg(feature = "model")]
+ mod model {
+ use chrono::prelude::*;
+ use model::prelude::*;
+ use prelude::*;
+ use std::collections::*;
+ use std::sync::Arc;
+
+ fn gen_user() -> User {
+ User {
+ id: UserId(210),
+ avatar: Some("abc".to_string()),
+ bot: true,
+ discriminator: 1432,
+ name: "test".to_string(),
+ }
+ }
+
+ fn gen_member() -> Member {
+ let dt: DateTime<FixedOffset> = FixedOffset::east(5 * 3600)
+ .ymd(2016, 11, 08)
+ .and_hms(0, 0, 0);
+ let vec1 = Vec::new();
+ let u = Arc::new(RwLock::new(gen_user()));
+
+ Member {
+ deaf: false,
+ guild_id: GuildId(1),
+ joined_at: Some(dt),
+ mute: false,
+ nick: Some("aaaa".to_string()),
+ roles: vec1,
+ user: u,
+ }
+ }
+
+ fn gen() -> Guild {
+ let u = gen_user();
+ let m = gen_member();
+
+ let hm1 = HashMap::new();
+ let hm2 = HashMap::new();
+ let vec1 = Vec::new();
+ let dt: DateTime<FixedOffset> = FixedOffset::east(5 * 3600)
+ .ymd(2016, 11, 08)
+ .and_hms(0, 0, 0);
+ let mut hm3 = HashMap::new();
+ let hm4 = HashMap::new();
+ let hm5 = HashMap::new();
+ let hm6 = HashMap::new();
+
+ hm3.insert(u.id, m);
+
+ let notifications = DefaultMessageNotificationLevel::All;
+
+ Guild {
+ afk_channel_id: Some(ChannelId(0)),
+ afk_timeout: 0,
+ channels: hm1,
+ default_message_notifications: notifications,
+ emojis: hm2,
+ features: vec1,
+ icon: Some("/avatars/210/a_aaa.webp?size=1024".to_string()),
+ id: GuildId(1),
+ joined_at: dt,
+ large: false,
+ member_count: 1,
+ members: hm3,
+ mfa_level: MfaLevel::Elevated,
+ name: "Spaghetti".to_string(),
+ owner_id: UserId(210),
+ presences: hm4,
+ region: "NA".to_string(),
+ roles: hm5,
+ splash: Some("asdf".to_string()),
+ verification_level: VerificationLevel::None,
+ voice_states: hm6,
+ application_id: Some(ApplicationId(0)),
+ explicit_content_filter: ExplicitContentFilter::None,
+ system_channel_id: Some(ChannelId(0)),
+ }
+ }
+
+
+ #[test]
+ fn member_named_username() {
+ let guild = gen();
+ let lhs = guild
+ .member_named("test#1432")
+ .unwrap()
+ .display_name();
+
+ assert_eq!(lhs, gen_member().display_name());
+ }
+
+ #[test]
+ fn member_named_nickname() {
+ let guild = gen();
+ let lhs = guild.member_named("aaaa").unwrap().display_name();
+
+ assert_eq!(lhs, gen_member().display_name());
+ }
+ }
+}
diff --git a/src/model/misc.rs b/src/model/misc.rs
index 3195c55..62a002a 100644
--- a/src/model/misc.rs
+++ b/src/model/misc.rs
@@ -308,3 +308,83 @@ pub struct Maintenance {
pub start: String,
pub stop: String,
}
+
+#[cfg(test)]
+mod test {
+ use model::prelude::*;
+ use parking_lot::RwLock;
+ use std::sync::Arc;
+ use utils::Colour;
+
+ #[test]
+ fn test_formatters() {
+ assert_eq!(ChannelId(1).to_string(), "1");
+ assert_eq!(EmojiId(2).to_string(), "2");
+ assert_eq!(GuildId(3).to_string(), "3");
+ assert_eq!(RoleId(4).to_string(), "4");
+ assert_eq!(UserId(5).to_string(), "5");
+ }
+
+ #[cfg(feature = "utils")]
+ #[test]
+ fn test_mention() {
+ let channel = Channel::Guild(Arc::new(RwLock::new(GuildChannel {
+ bitrate: None,
+ category_id: None,
+ guild_id: GuildId(1),
+ kind: ChannelType::Text,
+ id: ChannelId(4),
+ last_message_id: None,
+ last_pin_timestamp: None,
+ name: "a".to_string(),
+ permission_overwrites: vec![],
+ position: 1,
+ topic: None,
+ user_limit: None,
+ nsfw: false,
+ })));
+ let emoji = Emoji {
+ animated: false,
+ id: EmojiId(5),
+ name: "a".to_string(),
+ managed: true,
+ require_colons: true,
+ roles: vec![],
+ };
+ let role = Role {
+ id: RoleId(2),
+ colour: Colour::ROSEWATER,
+ hoist: false,
+ managed: false,
+ mentionable: false,
+ name: "fake role".to_string(),
+ permissions: Permissions::empty(),
+ position: 1,
+ };
+ let user = User {
+ id: UserId(6),
+ avatar: None,
+ bot: false,
+ discriminator: 4132,
+ name: "fake".to_string(),
+ };
+ let member = Member {
+ deaf: false,
+ guild_id: GuildId(2),
+ joined_at: None,
+ mute: false,
+ nick: None,
+ roles: vec![],
+ user: Arc::new(RwLock::new(user.clone())),
+ };
+
+ assert_eq!(ChannelId(1).mention(), "<#1>");
+ assert_eq!(channel.mention(), "<#4>");
+ assert_eq!(emoji.mention(), "<:a:5>");
+ assert_eq!(member.mention(), "<@6>");
+ assert_eq!(role.mention(), "<@&2>");
+ assert_eq!(role.id.mention(), "<@&2>");
+ assert_eq!(user.mention(), "<@6>");
+ assert_eq!(user.id.mention(), "<@6>");
+ }
+}
diff --git a/src/model/user.rs b/src/model/user.rs
index 859f168..d76b135 100644
--- a/src/model/user.rs
+++ b/src/model/user.rs
@@ -844,3 +844,71 @@ fn tag(name: &str, discriminator: u16) -> String {
tag
}
+
+#[cfg(test)]
+mod test {
+ #[cfg(feature = "model")]
+ mod model {
+ use model::id::UserId;
+ use model::user::User;
+
+ fn gen() -> User {
+ User {
+ id: UserId(210),
+ avatar: Some("abc".to_string()),
+ bot: true,
+ discriminator: 1432,
+ name: "test".to_string(),
+ }
+ }
+
+ #[test]
+ fn test_core() {
+ let mut user = gen();
+
+ assert!(
+ user.avatar_url()
+ .unwrap()
+ .ends_with("/avatars/210/abc.webp?size=1024")
+ );
+ assert!(
+ user.static_avatar_url()
+ .unwrap()
+ .ends_with("/avatars/210/abc.webp?size=1024")
+ );
+
+ user.avatar = Some("a_aaa".to_string());
+ assert!(
+ user.avatar_url()
+ .unwrap()
+ .ends_with("/avatars/210/a_aaa.gif?size=1024")
+ );
+ assert!(
+ user.static_avatar_url()
+ .unwrap()
+ .ends_with("/avatars/210/a_aaa.webp?size=1024")
+ );
+
+ user.avatar = None;
+ assert!(user.avatar_url().is_none());
+
+ assert_eq!(user.tag(), "test#1432");
+ }
+
+ #[test]
+ fn default_avatars() {
+ let mut user = gen();
+
+ user.discriminator = 0;
+ assert!(user.default_avatar_url().ends_with("0.png"));
+ user.discriminator = 1;
+ assert!(user.default_avatar_url().ends_with("1.png"));
+ user.discriminator = 2;
+ assert!(user.default_avatar_url().ends_with("2.png"));
+ user.discriminator = 3;
+ assert!(user.default_avatar_url().ends_with("3.png"));
+ user.discriminator = 4;
+ assert!(user.default_avatar_url().ends_with("4.png"));
+ }
+ }
+}