Skip to content

Commit

Permalink
Started on unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pmachapman committed Dec 10, 2024
1 parent defa9c4 commit 1598c55
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/SIL.XForge/EventMetrics/EventMetricLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ namespace SIL.XForge.EventMetrics;
/// [Intercept(typeof(EventMetricLogger))]
/// public interface IMyService
/// {
/// [LogEventMetric(Scope.Settings)]
/// [LogEventMetric(EventScope.Settings)]
/// void ThisMethodWillBeLogged();
///
/// void ThisMethodWillNot();
///
/// [LogEventMetric(Scope.Settings)]
/// [LogEventMetric(EventScope.Settings)]
/// void ThisMethodUsesDefaultParameterNames(string userId, string projectId);
///
/// [LogEventMetric(Scope.Settings, nameof(curUserId), nameof(targetProjectId))]
/// [LogEventMetric(EventScope.Settings, nameof(curUserId), nameof(targetProjectId))]
/// void ThisMethodUsesDifferentParameterNames(string curUserId, string targetProjectId);
///
/// [LogEventMetric(EventScope.Sync, userId: "syncConfig.UserId", projectId: "syncConfig.ProjectId")]
Expand Down
60 changes: 60 additions & 0 deletions test/SIL.XForge.Tests/Services/EventMetricLoggerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Autofac.Extras.DynamicProxy;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using SIL.XForge.DataAccess;
using SIL.XForge.EventMetrics;

namespace SIL.XForge.Services;

[TestFixture]
public class EventMetricLoggerTests
{
[Test]
public void MyTest_Success()
{
var env = new TestEnvironment();

// SUT
bool actual = env.TestClass.TestNoArguments();
Assert.IsTrue(actual);

// TODO: The interceptor starts an asynchronous task, so we need to wait for that
// Maybe use TaskCompletionSource?
}

private class TestEnvironment
{
public TestEnvironment()
{
var services = new ServiceCollection();
services.AddSingleton<TestClass>();
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(services);
containerBuilder.RegisterEventMetrics();
containerBuilder.RegisterEventMetrics<TestClass>();
containerBuilder.RegisterInstance(EventMetrics);
containerBuilder.RegisterInstance<ILogger<EventMetric>>(MockLogger);
var container = containerBuilder.Build();
EventMetricLogger = container.Resolve<EventMetricLogger>();
TestClass = container.Resolve<TestClass>();
}

public EventMetricLogger EventMetricLogger { get; }
public IRepository<EventMetric> EventMetrics { get; } = new MemoryRepository<EventMetric>();
public MockLogger<EventMetric> MockLogger { get; } = new MockLogger<EventMetric>();
public TestClass TestClass { get; }
}

/// <summary>
/// The class that will test the interceptor.
/// </summary>
[Intercept(typeof(EventMetricLogger))]
public class TestClass
{
[LogEventMetric(EventScope.Drafting)]
public virtual bool TestNoArguments() => true;
}
}

0 comments on commit 1598c55

Please sign in to comment.