From 1598c55fb3d46381087e319251f4d22db99a4d3a Mon Sep 17 00:00:00 2001 From: Peter Chapman Date: Tue, 10 Dec 2024 14:30:58 +1300 Subject: [PATCH] Started on unit tests --- .../EventMetrics/EventMetricLogger.cs | 6 +- .../Services/EventMetricLoggerTests.cs | 60 +++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 test/SIL.XForge.Tests/Services/EventMetricLoggerTests.cs diff --git a/src/SIL.XForge/EventMetrics/EventMetricLogger.cs b/src/SIL.XForge/EventMetrics/EventMetricLogger.cs index 5dc92dd8127..2f3b3e7cdbf 100644 --- a/src/SIL.XForge/EventMetrics/EventMetricLogger.cs +++ b/src/SIL.XForge/EventMetrics/EventMetricLogger.cs @@ -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")] diff --git a/test/SIL.XForge.Tests/Services/EventMetricLoggerTests.cs b/test/SIL.XForge.Tests/Services/EventMetricLoggerTests.cs new file mode 100644 index 00000000000..12517eb196f --- /dev/null +++ b/test/SIL.XForge.Tests/Services/EventMetricLoggerTests.cs @@ -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(); + var containerBuilder = new ContainerBuilder(); + containerBuilder.Populate(services); + containerBuilder.RegisterEventMetrics(); + containerBuilder.RegisterEventMetrics(); + containerBuilder.RegisterInstance(EventMetrics); + containerBuilder.RegisterInstance>(MockLogger); + var container = containerBuilder.Build(); + EventMetricLogger = container.Resolve(); + TestClass = container.Resolve(); + } + + public EventMetricLogger EventMetricLogger { get; } + public IRepository EventMetrics { get; } = new MemoryRepository(); + public MockLogger MockLogger { get; } = new MockLogger(); + public TestClass TestClass { get; } + } + + /// + /// The class that will test the interceptor. + /// + [Intercept(typeof(EventMetricLogger))] + public class TestClass + { + [LogEventMetric(EventScope.Drafting)] + public virtual bool TestNoArguments() => true; + } +}