|
21 | 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
22 | 22 | DEALINGS IN THE SOFTWARE.
|
23 | 23 | """
|
| 24 | +from random import choice, randint, randrange, sample |
| 25 | +from typing import get_args |
| 26 | + |
24 | 27 | import pytest
|
25 | 28 |
|
26 | 29 | from discord import Route
|
27 |
| -from discord.ext.testing.fixtures import after, before, guild_id, icon, limit, name |
| 30 | +from discord.ext.testing.fixtures import ( |
| 31 | + after, |
| 32 | + before, |
| 33 | + channel_id, |
| 34 | + guild_id, |
| 35 | + icon, |
| 36 | + limit, |
| 37 | + name, |
| 38 | + reason, |
| 39 | + user_id, |
| 40 | +) |
| 41 | +from discord.ext.testing.helpers import ( |
| 42 | + random_bool, |
| 43 | + random_bytes, |
| 44 | + random_snowflake, |
| 45 | + random_string, |
| 46 | +) |
| 47 | +from discord.types.guild import GuildFeature |
28 | 48 |
|
29 | 49 | from ..core import client
|
30 | 50 |
|
31 | 51 |
|
| 52 | +@pytest.fixture() |
| 53 | +def code(): |
| 54 | + return random_string(10) |
| 55 | + |
| 56 | + |
| 57 | +@pytest.fixture() |
| 58 | +def description(): |
| 59 | + return random_string(100) |
| 60 | + |
| 61 | + |
32 | 62 | async def test_get_guilds(client, limit, before, after):
|
33 | 63 | params = {"limit": limit}
|
34 | 64 | if before:
|
@@ -69,3 +99,227 @@ async def test_create_guild(client, name, icon):
|
69 | 99 | payload["icon"] = icon
|
70 | 100 | with client.makes_request(Route("POST", "/guilds"), json=payload):
|
71 | 101 | await client.http.create_guild(name, icon)
|
| 102 | + |
| 103 | + |
| 104 | +@pytest.mark.parametrize( |
| 105 | + "channel_id1,channel_id2, channel_id3", |
| 106 | + ((random_snowflake(), random_snowflake(), random_snowflake()),), |
| 107 | +) |
| 108 | +@pytest.mark.parametrize("premium_progress_bar_enabled", (True, False)) |
| 109 | +@pytest.mark.parametrize("verification_level", (randint(0, 4),)) |
| 110 | +@pytest.mark.parametrize("default_message_notifications", (randint(0, 1),)) |
| 111 | +@pytest.mark.parametrize("explicit_content_filter", (randint(0, 2),)) |
| 112 | +@pytest.mark.parametrize("splash", (random_bytes(),)) |
| 113 | +@pytest.mark.parametrize("discovery_splash", (random_bytes(),)) |
| 114 | +@pytest.mark.parametrize("banner", (random_bytes(),)) |
| 115 | +@pytest.mark.parametrize("system_channel_flags", (randint(0, 1 << 4),)) |
| 116 | +@pytest.mark.parametrize("preferred_locale", (random_string(5),)) |
| 117 | +@pytest.mark.parametrize( |
| 118 | + "features", |
| 119 | + (sample(get_args(GuildFeature), randint(0, len(get_args(GuildFeature)))),), |
| 120 | +) |
| 121 | +@pytest.mark.parametrize("afk_timeout", (choice((60, 300, 900, 1800, 3600)),)) |
| 122 | +async def test_edit_guild( |
| 123 | + client, |
| 124 | + name, |
| 125 | + verification_level, |
| 126 | + default_message_notifications, |
| 127 | + explicit_content_filter, |
| 128 | + channel_id3, |
| 129 | + afk_timeout, |
| 130 | + icon, |
| 131 | + user_id, |
| 132 | + splash, |
| 133 | + discovery_splash, |
| 134 | + banner, |
| 135 | + channel_id, |
| 136 | + system_channel_flags, |
| 137 | + channel_id1, |
| 138 | + channel_id2, |
| 139 | + preferred_locale, |
| 140 | + features, |
| 141 | + description, |
| 142 | + premium_progress_bar_enabled, |
| 143 | + reason, |
| 144 | +): |
| 145 | + payload = { |
| 146 | + "name": name, |
| 147 | + "verification_level": verification_level, |
| 148 | + "default_message_notifications": default_message_notifications, |
| 149 | + "explicit_content_filter": explicit_content_filter, |
| 150 | + "afk_channel_id": channel_id3, |
| 151 | + "afk_timeout": afk_timeout, |
| 152 | + "icon": icon, |
| 153 | + "owner_id": user_id, |
| 154 | + "splash": splash, |
| 155 | + "discovery_splash": discovery_splash, |
| 156 | + "banner": banner, |
| 157 | + "system_channel_id": channel_id, |
| 158 | + "system_channel_flags": system_channel_flags, |
| 159 | + "rules_channel_id": channel_id1, |
| 160 | + "public_updates_channel_id": channel_id2, |
| 161 | + "preferred_locale": preferred_locale, |
| 162 | + "features": features, |
| 163 | + "description": description, |
| 164 | + "premium_progress_bar_enabled": premium_progress_bar_enabled, |
| 165 | + } |
| 166 | + with client.makes_request( |
| 167 | + Route("PATCH", "/guilds/{guild_id}", guild_id=guild_id), |
| 168 | + json=payload, |
| 169 | + reason=reason, |
| 170 | + ): |
| 171 | + await client.http.edit_guild( |
| 172 | + guild_id, |
| 173 | + reason=reason, |
| 174 | + **payload, |
| 175 | + ) |
| 176 | + |
| 177 | + |
| 178 | +@pytest.mark.parametrize("required", [random_bool()]) |
| 179 | +async def test_edit_guild_mfa(client, guild_id, required, reason): |
| 180 | + payload = {"level": int(required)} |
| 181 | + with client.makes_request( |
| 182 | + Route("POST", "/guilds/{guild_id}/mfa", guild_id=guild_id), |
| 183 | + json=payload, |
| 184 | + reason=reason, |
| 185 | + ): |
| 186 | + await client.http.edit_guild_mfa( |
| 187 | + guild_id, |
| 188 | + required, |
| 189 | + reason=reason, |
| 190 | + ) |
| 191 | + |
| 192 | + |
| 193 | +async def test_get_template(client, code): |
| 194 | + with client.makes_request(Route("GET", "/guilds/templates/{code}", code=code)): |
| 195 | + await client.http.get_template(code) |
| 196 | + |
| 197 | + |
| 198 | +async def test_guild_templates(client, guild_id): |
| 199 | + with client.makes_request( |
| 200 | + Route("GET", "/guilds/{guild_id}/templates", guild_id=guild_id) |
| 201 | + ): |
| 202 | + await client.http.guild_templates(guild_id) |
| 203 | + |
| 204 | + |
| 205 | +async def test_create_template(client, guild_id, name, icon): |
| 206 | + payload = {"name": name, "icon": icon} |
| 207 | + with client.makes_request( |
| 208 | + Route("POST", "/guilds/{guild_id}/templates", guild_id=guild_id), |
| 209 | + json=payload, |
| 210 | + ): |
| 211 | + await client.http.create_template(guild_id, payload) |
| 212 | + |
| 213 | + |
| 214 | +async def test_sync_template(client, guild_id, code): |
| 215 | + with client.makes_request( |
| 216 | + Route( |
| 217 | + "PUT", "/guilds/{guild_id}/templates/{code}", guild_id=guild_id, code=code |
| 218 | + ) |
| 219 | + ): |
| 220 | + await client.http.sync_template(guild_id, code) |
| 221 | + |
| 222 | + |
| 223 | +async def test_edit_template(client, guild_id, code, name, description): |
| 224 | + payload = {"name": name, "description": description} |
| 225 | + with client.makes_request( |
| 226 | + Route( |
| 227 | + "PATCH", "/guilds/{guild_id}/templates/{code}", guild_id=guild_id, code=code |
| 228 | + ), |
| 229 | + json=payload, |
| 230 | + ): |
| 231 | + await client.http.edit_template(guild_id, code, payload) |
| 232 | + |
| 233 | + |
| 234 | +async def test_delete_template(client, guild_id, code): |
| 235 | + with client.makes_request( |
| 236 | + Route( |
| 237 | + "DELETE", |
| 238 | + "/guilds/{guild_id}/templates/{code}", |
| 239 | + guild_id=guild_id, |
| 240 | + code=code, |
| 241 | + ) |
| 242 | + ): |
| 243 | + await client.http.delete_template(guild_id, code) |
| 244 | + |
| 245 | + |
| 246 | +async def test_create_from_template(client, code, name, icon): |
| 247 | + payload = {"name": name} |
| 248 | + if icon is not None: |
| 249 | + payload["icon"] = icon |
| 250 | + with client.makes_request( |
| 251 | + Route("POST", "/guilds/templates/{code}", code=code), json=payload |
| 252 | + ): |
| 253 | + await client.http.create_from_template(code, name, icon) |
| 254 | + |
| 255 | + |
| 256 | +@pytest.mark.parametrize("limit", [None, randrange(0, 1000)]) |
| 257 | +async def test_get_bans(client, guild_id, limit, before, after): |
| 258 | + params = {} |
| 259 | + if limit is not None: |
| 260 | + params["limit"] = limit |
| 261 | + if before is not None: |
| 262 | + params["before"] = before |
| 263 | + if after is not None: |
| 264 | + params["after"] = after |
| 265 | + with client.makes_request( |
| 266 | + Route("GET", "/guilds/{guild_id}/bans", guild_id=guild_id), params=params |
| 267 | + ): |
| 268 | + await client.http.get_bans(guild_id, limit=limit, before=before, after=after) |
| 269 | + |
| 270 | + |
| 271 | +async def test_get_ban(client, guild_id, user_id): |
| 272 | + with client.makes_request( |
| 273 | + Route( |
| 274 | + "GET", |
| 275 | + "/guilds/{guild_id}/bans/{user_id}", |
| 276 | + guild_id=guild_id, |
| 277 | + user_id=user_id, |
| 278 | + ) |
| 279 | + ): |
| 280 | + await client.http.get_ban(user_id, guild_id) |
| 281 | + |
| 282 | + |
| 283 | +async def test_get_vanity_code(client, guild_id): |
| 284 | + with client.makes_request( |
| 285 | + Route("GET", "/guilds/{guild_id}/vanity-url", guild_id=guild_id) |
| 286 | + ): |
| 287 | + await client.http.get_vanity_code(guild_id) |
| 288 | + |
| 289 | + |
| 290 | +async def test_change_vanity_code(client, guild_id, code, reason): |
| 291 | + with client.makes_request( |
| 292 | + Route("PATCH", "/guilds/{guild_id}/vanity-url", guild_id=guild_id), |
| 293 | + json={"code": code}, |
| 294 | + reason=reason, |
| 295 | + ): |
| 296 | + await client.http.change_vanity_code(guild_id, code, reason=reason) |
| 297 | + |
| 298 | + |
| 299 | +async def test_get_all_guild_channels(client, guild_id): |
| 300 | + with client.makes_request( |
| 301 | + Route("GET", "/guilds/{guild_id}/channels", guild_id=guild_id) |
| 302 | + ): |
| 303 | + await client.http.get_all_guild_channels(guild_id) |
| 304 | + |
| 305 | + |
| 306 | +async def test_get_members(client, guild_id, limit, after): |
| 307 | + payload = {"limit": limit} |
| 308 | + if after is not None: |
| 309 | + payload["after"] = after |
| 310 | + with client.makes_request( |
| 311 | + Route("GET", "/guilds/{guild_id}/members", guild_id=guild_id), params=payload |
| 312 | + ): |
| 313 | + await client.http.get_members(guild_id, limit=limit, after=after) |
| 314 | + |
| 315 | + |
| 316 | +async def test_get_member(client, guild_id, user_id): |
| 317 | + with client.makes_request( |
| 318 | + Route( |
| 319 | + "GET", |
| 320 | + "/guilds/{guild_id}/members/{member_id}", |
| 321 | + guild_id=guild_id, |
| 322 | + member_id=user_id, |
| 323 | + ) |
| 324 | + ): |
| 325 | + await client.http.get_member(guild_id, user_id) |
0 commit comments