Skip to content

Commit

Permalink
Add first tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
elle-j committed Jun 28, 2024
1 parent e289d2e commit 5683aeb
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 20 deletions.
4 changes: 2 additions & 2 deletions Realm/Realm/Logging/LogCategory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class LogCategory

public static RealmLogCategory Realm { get; } = new();

Check warning on line 29 in Realm/Realm/Logging/LogCategory.cs

View workflow job for this annotation

GitHub Actions / Test Weaver (ubuntu-latest, linux-x64)

Check warning on line 29 in Realm/Realm/Logging/LogCategory.cs

View workflow job for this annotation

GitHub Actions / Test Weaver (macos-14, osx-arm64)

Check warning on line 29 in Realm/Realm/Logging/LogCategory.cs

View workflow job for this annotation

GitHub Actions / Test Code Coverage

Elements should be documented (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1600.md) [/home/runner/work/realm-dotnet/realm-dotnet/Realm/Realm/Realm.csproj::TargetFramework=net8.0]

private static readonly Dictionary<string, LogCategory> _nameToCategory = new()
internal static readonly Dictionary<string, LogCategory> NameToCategory = new()
{
{ Realm.Name, Realm },
{ Realm.Storage.Name, Realm.Storage },
Expand All @@ -51,7 +51,7 @@ public class LogCategory

internal static LogCategory FromName(string name)
{
Argument.Ensure(_nameToCategory.TryGetValue(name, out var category), $"Unexpected category name: '{name}'", nameof(name));
Argument.Ensure(NameToCategory.TryGetValue(name, out var category), $"Unexpected category name: '{name}'", nameof(name));

return category;
}
Expand Down
83 changes: 65 additions & 18 deletions Tests/Realm.Tests/Database/LoggerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,29 @@ namespace Realms.Tests.Database
[TestFixture, Preserve(AllMembers = true)]
public class LoggerTests
{
private readonly LogCategory _originalLogCategory = LogCategory.Realm;
private readonly LogLevel _originalLogLevel = Logger.GetLogLevel(LogCategory.Realm);
private Logger _originalLogger = null!;
private LogLevel _originalLogLevel;

[SetUp]
public void Setup()
{
_originalLogger = Logger.Default;
_originalLogLevel = Logger.LogLevel;
}

[TearDown]
public void TearDown()
{
Logger.Default = _originalLogger;
Logger.LogLevel = _originalLogLevel;
Logger.SetLogLevel(_originalLogLevel, _originalLogCategory);
}

private void AssertLogMessageContains(string actual, LogLevel level, LogCategory category, string message)
{
Assert.That(actual, Does.Contain(level.ToString()));
Assert.That(actual, Does.Contain(category.Name));
Assert.That(actual, Does.Contain(message));
Assert.That(actual, Does.Contain(DateTimeOffset.UtcNow.ToString("yyyy-MM-dd")));
}

[Test]
Expand All @@ -50,12 +58,10 @@ public void Logger_CanSetDefaultLogger()
var messages = new List<string>();
Logger.Default = Logger.Function(message => messages.Add(message));

Logger.LogDefault(LogLevel.Warn, "This is very dangerous!");
Logger.LogDefault(LogLevel.Warn, LogCategory.Realm.SDK, "This is very dangerous!");

Assert.That(messages.Count, Is.EqualTo(1));
Assert.That(messages[0], Does.Contain(LogLevel.Warn.ToString()));
Assert.That(messages[0], Does.Contain(DateTimeOffset.UtcNow.ToString("yyyy-MM-dd")));
Assert.That(messages[0], Does.Contain("This is very dangerous!"));
AssertLogMessageContains(messages[0], LogLevel.Warn, LogCategory.Realm.SDK, "This is very dangerous!");
}

[Test]
Expand All @@ -69,28 +75,69 @@ public void Logger_SkipsDebugMessagesByDefault()
Assert.That(messages.Count, Is.EqualTo(0));
}

[Test]
public void Logger_SetsLogLevelAtGivenCategory()
{
var categories = LogCategory.NameToCategory.Values;
foreach (var category in categories)
{
Logger.SetLogLevel(LogLevel.All, category);
Assert.That(Logger.GetLogLevel(category), Is.EqualTo(LogLevel.All));
}
}

[TestCase(LogLevel.Error)]
[TestCase(LogLevel.Info)]
[TestCase(LogLevel.Debug)]
public void Logger_WhenLevelIsSet_LogsOnlyExpectedLevels(LogLevel level)
{
var messages = new List<string>();
Logger.Default = Logger.Function(message => messages.Add(message));
Logger.LogLevel = level;
var categories = LogCategory.NameToCategory.Values;
foreach (var category in categories)
{
var messages = new List<string>();
Logger.Default = Logger.Function(message => messages.Add(message));
Logger.SetLogLevel(level, category);

Logger.LogDefault(level - 1, category, "This is at level - 1");
Logger.LogDefault(level, category, "This is at the same level");
Logger.LogDefault(level + 1, category, "This is at level + 1");

Assert.That(messages.Count, Is.EqualTo(2));
AssertLogMessageContains(messages[0], level, category, "This is at the same level");
AssertLogMessageContains(messages[1], level + 1, category, "This is at level + 1");
}
}

Logger.LogDefault(level - 1, "This is at level - 1");
Logger.LogDefault(level, "This is at the same level");
Logger.LogDefault(level + 1, "This is at level + 1");
[Test]
public void Logger_LogsAtGivenCategory()
{
var categories = LogCategory.NameToCategory.Values;
foreach (var category in categories)
{
var messages = new List<string>();
Logger.Default = Logger.Function((message) => messages.Add(message));

Logger.LogDefault(LogLevel.Warn, category, "A log message");

Assert.That(messages.Count, Is.EqualTo(1));
AssertLogMessageContains(messages[0], LogLevel.Warn, category, "A log message");
}
}

Assert.That(messages.Count, Is.EqualTo(2));
[Test]
public void Logger_CallsCustomFunction()
{
var messages = new List<string>();
Logger.Default = Logger.Function((level, category, message) => messages.Add(Logger.FormatLog(level, category, message)));

Assert.That(messages[0], Does.Contain(level.ToString()));
Assert.That(messages[0], Does.Contain("This is at the same level"));
Logger.LogDefault(LogLevel.Warn, LogCategory.Realm.SDK, "A log message");

Assert.That(messages[1], Does.Contain((level + 1).ToString()));
Assert.That(messages[1], Does.Contain("This is at level + 1"));
Assert.That(messages.Count, Is.EqualTo(1));
AssertLogMessageContains(messages[0], LogLevel.Warn, LogCategory.Realm.SDK, "A log message");
}

// TODO(lj): Test that all Core categories are being used and matches names.

Check warning on line 139 in Tests/Realm.Tests/Database/LoggerTests.cs

View workflow job for this annotation

GitHub Actions / Verify TODOs

Tests/Realm.Tests/Database/LoggerTests.cs#L139

TODO entry doesn't have a link to Github issue or Jira ticket lj): Test that all Core categories are being used and matches names.

[Test]
public void FileLogger()
{
Expand Down

0 comments on commit 5683aeb

Please sign in to comment.