diff options
| author | Austin Hellyer <[email protected]> | 2016-12-01 21:53:18 -0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-12-01 21:53:18 -0800 |
| commit | f847638859423ffaaecfdb77ee5348a607ad3293 (patch) | |
| tree | 992bd42f7bdca5d67bdaa53e6c27d6a73386e944 | |
| parent | Add Message::guild_id() (diff) | |
| download | serenity-f847638859423ffaaecfdb77ee5348a607ad3293.tar.xz serenity-f847638859423ffaaecfdb77ee5348a607ad3293.zip | |
Allow Role positions to be negative
The @ everyone role can have a position of -1 _or_ 0, so make it an
i64.
| -rw-r--r-- | definitions/structs/role.yml | 4 | ||||
| -rw-r--r-- | tests/test_decode_role.rs | 301 |
2 files changed, 303 insertions, 2 deletions
diff --git a/definitions/structs/role.yml b/definitions/structs/role.yml index f3b0ffc..f4c3616 100644 --- a/definitions/structs/role.yml +++ b/definitions/structs/role.yml @@ -33,5 +33,5 @@ fields: description: "The role's position in the position list. Roles above another are considered higher in the role hierarchy in most situations. - The @everyone role is always position 0." - type: u64 + The @everyone role is always position -1 or 0." + type: i64 diff --git a/tests/test_decode_role.rs b/tests/test_decode_role.rs new file mode 100644 index 0000000..ebad24e --- /dev/null +++ b/tests/test_decode_role.rs @@ -0,0 +1,301 @@ +extern crate serde_json; +extern crate serenity; + +use serde_json::Value; +use serenity::model::{Guild, Role}; + +#[test] +fn decode_negative_one_role_position() { + let json = r#"{ + "position": -1, + "permissions": 37215297, + "name": "@everyone", + "mentionable": false, + "managed": false, + "id": "444", + "hoist": false, + "color": 0 + }"#; + + let value: Value = serde_json::from_str(json).unwrap(); + + assert!(Role::decode(value).is_ok()); +} + + +#[test] +fn decode_guild_with_n1_role_position() { + let json = r#"{ + "voice_states": [], + "verification_level": 0, + "unavailable": false, + "splash": null, + "roles": [ + { + "position": -1, + "permissions": 37215297, + "name": "@everyone", + "mentionable": false, + "managed": false, + "id": "1", + "hoist": false, + "color": 0 + }, + { + "position": 1, + "permissions": 66583679, + "name": "role", + "mentionable": false, + "managed": false, + "id": "1", + "hoist": true, + "color": 7419530 + }, + { + "position": 2, + "permissions": 536345727, + "name": "role 2", + "mentionable": false, + "managed": false, + "id": "17", + "hoist": true, + "color": 2123412 + }, + { + "position": 3, + "permissions": 66583679, + "name": "role 3", + "mentionable": false, + "managed": false, + "id": "166", + "hoist": true, + "color": 3447003 + }, + { + "position": 1, + "permissions": 37215297, + "name": "aaaaaa", + "mentionable": true, + "managed": false, + "id": "88", + "hoist": false, + "color": 15277667 + }, + { + "position": 1, + "permissions": 35840, + "name": "aaaabsadfasda", + "mentionable": false, + "managed": true, + "id": "643534543", + "hoist": false, + "color": 0 + } + ], + "region": "us-central", + "presences": [ + { + "user": { + "id": "2342342" + }, + "status": "online", + "game": null + }, + { + "user": { + "id": "1233432" + }, + "status": "online", + "game": null + }, + { + "user": { + "id": "35353534" + }, + "status": "online", + "game": { + "url": "", + "type": 0, + "name": "aaaaaa" + } + }, + { + "user": { + "id": "12314324" + }, + "status": "online", + "game": null + } + ], + "owner_id": "7", + "name": "guild name", + "mfa_level": 0, + "members": [ + { + "user": { + "username": "aaa", + "id": "92781184873947136", + "discriminator": "6291", + "avatar": "asdasdadada" + }, + "roles": [ + "164155714355462146" + ], + "nick": "asdasdadas", + "mute": false, + "joined_at": "fake", + "deaf": false + }, + { + "user": { + "username": "aaaaaa", + "id": "161972119494852608", + "discriminator": "7653", + "avatar": "ffffff" + }, + "roles": [ + "2342432423432" + ], + "mute": false, + "joined_at": "fake", + "deaf": false + }, + { + "user": { + "username": "aaaaa", + "id": "167333834952540160", + "discriminator": "0857", + "bot": true, + "avatar": "ffffff" + }, + "roles": [ + "34534543543" + ], + "mute": false, + "joined_at": "fake", + "deaf": false + }, + { + "user": { + "username": "aaaaaaa", + "id": "171403455745884160", + "discriminator": "0075", + "avatar": "ffffff" + }, + "roles": [ + "56465464" + ], + "mute": false, + "joined_at": "fake", + "deaf": false + }, + { + "user": { + "username": "asdasdsadas", + "id": "12312312", + "discriminator": "7181", + "bot": true, + "avatar": "ffffff" + }, + "roles": [ + "12313212321" + ], + "nick": null, + "mute": false, + "joined_at": "fake", + "deaf": false + }, + { + "user": { + "username": "aaaaa", + "id": "1231231231", + "discriminator": "2138", + "bot": true, + "avatar": "fake" + }, + "roles": [ + "1231231312" + ], + "nick": null, + "mute": false, + "joined_at": "fake", + "deaf": false + } + ], + "member_count": 6, + "large": false, + "joined_at": "fake", + "id": "12321321312321", + "icon": "fake icon", + "features": [], + "emojis": [], + "default_message_notifications": 0, + "channels": [ + { + "type": 0, + "topic": "", + "position": 0, + "permission_overwrites": [ + { + "type": "role", + "id": "123131231321", + "deny": 0, + "allow": 0 + } + ], + "name": "asdadsa", + "last_message_id": "5676576575", + "id": "3453543543" + }, + { + "user_limit": 0, + "type": 2, + "position": 0, + "permission_overwrites": [], + "name": "adssadasda", + "id": "56464564645", + "bitrate": 63841 + }, + { + "user_limit": 0, + "type": 2, + "position": 1, + "permission_overwrites": [ + { + "type": "role", + "id": "23423432423", + "deny": 2097152, + "allow": 0 + } + ], + "name": "AFK", + "id": "23432434242", + "bitrate": 64000 + }, + { + "type": 0, + "topic": null, + "position": 1, + "permission_overwrites": [], + "name": "asdasdasdsa", + "last_message_id": "234324324242", + "id": "2342343243242" + }, + { + "user_limit": 0, + "type": 2, + "position": 2, + "permission_overwrites": [], + "name": "asdadsa", + "id": "32134242342", + "bitrate": 96000 + } + ], + "afk_timeout": 900, + "afk_channel_id": "23432423423" + }"#; + + let value: Value = serde_json::from_str(json).unwrap(); + + assert!(Guild::decode(value).is_ok()); +} |