mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2025-05-30 14:35:18 -04:00
Improve tests
This commit is contained in:
parent
85d53d0e94
commit
d735d2acd3
3 changed files with 121 additions and 64 deletions
3
.github/workflows/CI.yml
vendored
3
.github/workflows/CI.yml
vendored
|
@ -22,6 +22,9 @@ jobs:
|
||||||
|
|
||||||
- name: Build & test
|
- name: Build & test
|
||||||
run: dotnet test --configuration Release --logger GitHubActions
|
run: dotnet test --configuration Release --logger GitHubActions
|
||||||
|
env:
|
||||||
|
DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }}
|
||||||
|
DISCORD_TOKEN_BOT: true
|
||||||
|
|
||||||
- name: Upload coverage
|
- name: Upload coverage
|
||||||
uses: codecov/codecov-action@v1.0.5
|
uses: codecov/codecov-action@v1.0.5
|
||||||
|
|
|
@ -36,16 +36,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var jsonData = await GlobalCache.WrapAsync("mention-specs-output-json", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.Json,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.Json,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var jsonData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(jsonData);
|
_testOutput.WriteLine(jsonData);
|
||||||
|
|
||||||
var json = Json.Parse(jsonData);
|
var json = Json.Parse(jsonData);
|
||||||
|
@ -81,16 +85,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var htmlData = await GlobalCache.WrapAsync("mention-specs-output-html", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.HtmlDark,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.HtmlDark,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var htmlData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(htmlData);
|
_testOutput.WriteLine(htmlData);
|
||||||
|
|
||||||
var html = Html.Parse(htmlData);
|
var html = Html.Parse(htmlData);
|
||||||
|
@ -110,16 +118,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var jsonData = await GlobalCache.WrapAsync("mention-specs-output-json", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.Json,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.Json,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var jsonData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(jsonData);
|
_testOutput.WriteLine(jsonData);
|
||||||
|
|
||||||
var json = Json.Parse(jsonData);
|
var json = Json.Parse(jsonData);
|
||||||
|
@ -148,16 +160,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var htmlData = await GlobalCache.WrapAsync("mention-specs-output-html", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.HtmlDark,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.HtmlDark,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var htmlData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(htmlData);
|
_testOutput.WriteLine(htmlData);
|
||||||
|
|
||||||
var html = Html.Parse(htmlData);
|
var html = Html.Parse(htmlData);
|
||||||
|
@ -176,16 +192,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var jsonData = await GlobalCache.WrapAsync("mention-specs-output-json", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.Json,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.Json,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var jsonData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(jsonData);
|
_testOutput.WriteLine(jsonData);
|
||||||
|
|
||||||
var json = Json.Parse(jsonData);
|
var json = Json.Parse(jsonData);
|
||||||
|
@ -214,16 +234,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var htmlData = await GlobalCache.WrapAsync("mention-specs-output-html", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.HtmlDark,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.HtmlDark,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var htmlData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(htmlData);
|
_testOutput.WriteLine(htmlData);
|
||||||
|
|
||||||
var html = Html.Parse(htmlData);
|
var html = Html.Parse(htmlData);
|
||||||
|
@ -242,16 +266,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "json");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var jsonData = await GlobalCache.WrapAsync("mention-specs-output-json", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.Json,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.Json,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var jsonData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(jsonData);
|
_testOutput.WriteLine(jsonData);
|
||||||
|
|
||||||
var json = Json.Parse(jsonData);
|
var json = Json.Parse(jsonData);
|
||||||
|
@ -280,16 +308,20 @@ namespace DiscordChatExporter.Cli.Tests
|
||||||
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
var outputFilePath = Path.ChangeExtension(_tempOutput.GetTempFilePath(), "html");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await new ExportChannelsCommand
|
var htmlData = await GlobalCache.WrapAsync("mention-specs-output-html", async () =>
|
||||||
{
|
{
|
||||||
TokenValue = Secrets.DiscordToken,
|
await new ExportChannelsCommand
|
||||||
IsBotToken = Secrets.IsDiscordTokenBot,
|
{
|
||||||
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
TokenValue = Secrets.DiscordToken,
|
||||||
ExportFormat = ExportFormat.HtmlDark,
|
IsBotToken = Secrets.IsDiscordTokenBot,
|
||||||
OutputPath = outputFilePath
|
ChannelIds = new[] {Snowflake.Parse(ChannelIds.MentionTestCases)},
|
||||||
}.ExecuteAsync(new FakeConsole());
|
ExportFormat = ExportFormat.HtmlDark,
|
||||||
|
OutputPath = outputFilePath
|
||||||
|
}.ExecuteAsync(new FakeConsole());
|
||||||
|
|
||||||
|
return await File.ReadAllTextAsync(outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
var htmlData = await File.ReadAllTextAsync(outputFilePath);
|
|
||||||
_testOutput.WriteLine(htmlData);
|
_testOutput.WriteLine(htmlData);
|
||||||
|
|
||||||
var html = Html.Parse(htmlData);
|
var html = Html.Parse(htmlData);
|
||||||
|
|
22
DiscordChatExporter.Cli.Tests/Utils/GlobalCache.cs
Normal file
22
DiscordChatExporter.Cli.Tests/Utils/GlobalCache.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace DiscordChatExporter.Cli.Tests.Utils
|
||||||
|
{
|
||||||
|
internal static class GlobalCache
|
||||||
|
{
|
||||||
|
private static readonly Dictionary<string, object?> Dictionary = new();
|
||||||
|
|
||||||
|
public static async Task<T> WrapAsync<T>(string key, Func<Task<T>> getAsync)
|
||||||
|
{
|
||||||
|
if (Dictionary.TryGetValue(key, out var value) && value is T existing)
|
||||||
|
return existing;
|
||||||
|
|
||||||
|
var result = await getAsync();
|
||||||
|
Dictionary[key] = result;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue