Files
Discord.Net/test/Discord.Net.Tests/Tests.Migrations.cs
Christopher Felegy bc5d608712 test: forgot an #endif?
2019-03-17 13:06:15 -04:00

74 lines
2.5 KiB
C#

using System;
using System.Threading.Tasks;
using Discord.Rest;
#if IXTEST
namespace Discord
{
public partial class TestsFixture
{
public const uint MigrationCount = 3;
public async Task MigrateAsync()
{
DiscordRestClient client = null;
RestGuild guild = null;
await _cache.LoadInfoAsync(_config.GuildId).ConfigureAwait(false);
while (_cache.Info.Version != MigrationCount)
{
if (client == null)
{
client = new DiscordRestClient();
await client.LoginAsync(TokenType.Bot, _config.Token).ConfigureAwait(false);
guild = await client.GetGuildAsync(_config.GuildId);
}
uint nextVer = _cache.Info.Version + 1;
try
{
await DoMigrateAsync(client, guild, nextVer).ConfigureAwait(false);
_cache.Info.Version = nextVer;
await _cache.SaveInfoAsync().ConfigureAwait(false);
}
catch
{
await _cache.ClearAsync().ConfigureAwait(false);
throw;
}
}
}
private static Task DoMigrateAsync(DiscordRestClient client, RestGuild guild, uint toVersion)
{
switch (toVersion)
{
case 1: return Migration_WipeGuild(client, guild);
case 2: return Tests.Migration_CreateTextChannels(client, guild);
case 3: return Tests.Migration_CreateVoiceChannels(client, guild);
default: throw new InvalidOperationException("Unknown migration: " + toVersion);
}
}
private static async Task Migration_WipeGuild(DiscordRestClient client, RestGuild guild)
{
var textChannels = await guild.GetTextChannelsAsync();
var voiceChannels = await guild.GetVoiceChannelsAsync();
var roles = guild.Roles;
foreach (var channel in textChannels)
{
//if (channel.Id != guild.DefaultChannelId)
await channel.DeleteAsync();
}
foreach (var channel in voiceChannels)
await channel.DeleteAsync();
foreach (var role in roles)
{
if (role.Id != guild.EveryoneRole.Id)
await role.DeleteAsync();
}
}
}
}
#endif