115 lines
4.3 KiB
C#
115 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace Discord
|
|
{
|
|
[CollectionDefinition("GuildTests", DisableParallelization = true)]
|
|
public class GuildTests : IClassFixture<RestGuildFixture>
|
|
{
|
|
private IDiscordClient client;
|
|
private IGuild guild;
|
|
private readonly ITestOutputHelper output;
|
|
|
|
public GuildTests(RestGuildFixture guildFixture, ITestOutputHelper output)
|
|
{
|
|
client = guildFixture.Client;
|
|
guild = guildFixture.Guild;
|
|
this.output = output;
|
|
output.WriteLine($"RestGuildFixture using guild: {guild.Id}");
|
|
guildFixture.Client.Log += LogAsync;
|
|
}
|
|
private Task LogAsync(LogMessage message)
|
|
{
|
|
output.WriteLine(message.ToString());
|
|
return Task.CompletedTask;
|
|
}
|
|
/// <summary>
|
|
/// Ensures that the CurrentUser is the owner of the guild.
|
|
/// </summary>
|
|
[Fact]
|
|
public void CheckOwner()
|
|
{
|
|
Assert.Equal(client.CurrentUser.Id, guild.OwnerId);
|
|
}
|
|
/// <summary>
|
|
/// Checks that a Guild can be modified to non-default values.
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task ModifyGuild()
|
|
{
|
|
// set some initial properties of the guild that are not the defaults
|
|
await guild.ModifyAsync(x =>
|
|
{
|
|
x.ExplicitContentFilter = ExplicitContentFilterLevel.AllMembers;
|
|
x.Name = "updated";
|
|
x.DefaultMessageNotifications = DefaultMessageNotifications.MentionsOnly;
|
|
x.AfkTimeout = 900; // 15 minutes
|
|
x.VerificationLevel = VerificationLevel.None;
|
|
});
|
|
// check that they were set
|
|
Assert.Equal("updated", guild.Name);
|
|
Assert.Equal(ExplicitContentFilterLevel.AllMembers, guild.ExplicitContentFilter);
|
|
Assert.Equal(DefaultMessageNotifications.MentionsOnly, guild.DefaultMessageNotifications);
|
|
Assert.Equal(VerificationLevel.None, guild.VerificationLevel);
|
|
Assert.Equal(900, guild.AFKTimeout);
|
|
}
|
|
/// <summary>
|
|
/// Checks that the SystemChannel property of a guild can be modified.
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task ModifySystemChannel()
|
|
{
|
|
var systemChannel = await guild.CreateTextChannelAsync("system");
|
|
// set using the Id
|
|
await guild.ModifyAsync(x => x.SystemChannelId = systemChannel.Id);
|
|
Assert.Equal(systemChannel.Id, guild.SystemChannelId);
|
|
// unset it
|
|
await guild.ModifyAsync(x => x.SystemChannelId = null);
|
|
Assert.Null(guild.SystemChannelId);
|
|
Assert.Null(await guild.GetSystemChannelAsync());
|
|
|
|
// set using the ITextChannel
|
|
await guild.ModifyAsync(x => { x.SystemChannel = new Optional<ITextChannel>(systemChannel); });
|
|
Assert.Equal(systemChannel.Id, guild.SystemChannelId);
|
|
|
|
await Assert.ThrowsAsync<NullReferenceException>(async () =>
|
|
{
|
|
await guild.ModifyAsync(x => x.SystemChannel = null);
|
|
});
|
|
|
|
await systemChannel.DeleteAsync();
|
|
}
|
|
/// <summary>
|
|
/// Checks that the AFK channel of a guild can be set.
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task ModifyAfkChannel()
|
|
{
|
|
var afkChannel = await guild.CreateVoiceChannelAsync("afk");
|
|
// set using the Id
|
|
await guild.ModifyAsync(x => x.AfkChannelId = afkChannel.Id);
|
|
Assert.Equal(afkChannel.Id, guild.AFKChannelId);
|
|
|
|
// unset using Id
|
|
await guild.ModifyAsync(x => x.AfkChannelId = null);
|
|
Assert.Null(guild.AFKChannelId);
|
|
Assert.Null(await guild.GetAFKChannelAsync());
|
|
|
|
// the same, but with the AfkChannel property
|
|
await guild.ModifyAsync(x => x.AfkChannel = new Optional<IVoiceChannel>(afkChannel));
|
|
Assert.Equal(afkChannel.Id, guild.AFKChannelId);
|
|
|
|
await Assert.ThrowsAsync<NullReferenceException>(async () =>
|
|
{
|
|
await guild.ModifyAsync(x => x.AfkChannel = null);
|
|
});
|
|
|
|
await afkChannel.DeleteAsync();
|
|
}
|
|
}
|
|
}
|