Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Text.Json;
using Microsoft.Extensions.Logging.Testing;
using System.Text.Json.Serialization;
using NUnit.Framework;
using SchematicHQ.Client.Datastream;
Expand All @@ -10,7 +11,7 @@ namespace SchematicHQ.Client.Test.Datastream
public class DatastreamCacheTests
{
private MockWebSocket _mockWebSocket;
private MockSchematicLogger _mockLogger;
private FakeLogger _mockLogger;
private DatastreamClient _client;

[SetUp]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Microsoft.Extensions.Logging.Testing;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -13,15 +14,15 @@ public class DatastreamClientAdapterTests
{
private DatastreamClientAdapter _adapter;
private MockWebSocket _mockWebSocket;
private MockSchematicLogger _mockLogger;
private FakeLogger _mockLogger;
private Action<bool> _connectionCallback;

[SetUp]
public void Setup()
{
// We need to capture the connection callback to trigger connection state changes in tests
_connectionCallback = null;
_mockLogger = new MockSchematicLogger();
_mockLogger = new FakeLogger();
_mockWebSocket = new MockWebSocket();
_mockWebSocket.SetState(WebSocketState.Open);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System.Text;
using Microsoft.Extensions.Logging.Testing;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using SchematicHQ.Client.RulesEngine.Utils;
using SchematicHQ.Client.Datastream;
Expand All @@ -12,7 +14,7 @@ namespace SchematicHQ.Client.Test.Datastream
public class DatastreamClientTests
{
private MockWebSocket _mockWebSocket;
private MockSchematicLogger _mockLogger;
private FakeLogger _mockLogger;
private DatastreamClient _client;
private JsonSerializerOptions _jsonOptions;

Expand Down Expand Up @@ -228,7 +230,7 @@ public void Dispose_ClosesWebSocketConnection()
_client.Dispose();

// Assert
Assert.That(_mockLogger.HasLogEntry(LogLevel.Info, "Connected to Schematic WebSocket"), Is.False);
Assert.That(_mockLogger.HasLogEntry(LogLevel.Information, "Connected to Schematic WebSocket"), Is.False);
}

private void SetupFlagsResponse()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System.Text;
using Microsoft.Extensions.Logging.Testing;
using System.Text.Json;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using SchematicHQ.Client.RulesEngine;
using SchematicHQ.Client.RulesEngine.Utils;
Expand All @@ -12,7 +14,7 @@ namespace SchematicHQ.Client.Test.Datastream
public class DatastreamConcurrencyTests
{
private MockWebSocket _mockWebSocket;
private MockSchematicLogger _mockLogger;
private FakeLogger _mockLogger;
private DatastreamClient _client;

[SetUp]
Expand Down Expand Up @@ -112,7 +114,7 @@ public async Task EmptyResponse_LogsWarning()
await Task.Delay(100);

// Assert
Assert.That(_mockLogger.HasLogEntry(LogLevel.Warn, "Received empty company data"), Is.True);
Assert.That(_mockLogger.HasLogEntry(LogLevel.Warning, "Received empty company data"), Is.True);
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Microsoft.Extensions.Logging.Testing;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -11,12 +12,12 @@ namespace SchematicHQ.Client.Test.Datastream
[TestFixture]
public class DatastreamConnectionMonitoringTests
{
private MockSchematicLogger _logger;
private FakeLogger _logger;

[SetUp]
public void Setup()
{
_logger = new MockSchematicLogger();
_logger = new FakeLogger();
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System.Net.WebSockets;
using Microsoft.Extensions.Logging.Testing;
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using SchematicHQ.Client.Datastream;
using SchematicHQ.Client.Test.Datastream.Mocks;
Expand All @@ -11,7 +13,7 @@ namespace SchematicHQ.Client.Test.Datastream
public class DatastreamConnectionTests
{
private MockWebSocket _mockWebSocket;
private MockSchematicLogger _mockLogger;
private FakeLogger _mockLogger;
private DatastreamClient _client;
private Action<bool> _connectionCallback;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Net.WebSockets;
using Microsoft.Extensions.Logging.Testing;
using System.Reflection;
using SchematicHQ.Client.Datastream;

Expand All @@ -9,10 +10,10 @@ namespace SchematicHQ.Client.Test.Datastream.Mocks
/// </summary>
public class DatastreamClientTestFactory
{
public static (DatastreamClient Client, MockWebSocket WebSocket, MockSchematicLogger Logger, Action<bool> ConnectionCallback)
public static (DatastreamClient Client, MockWebSocket WebSocket, FakeLogger Logger, Action<bool> ConnectionCallback)
CreateClientWithMocks(string apiKey = "test-api-key", TimeSpan? cacheTtl = null, Action<bool>? connectionCallback = null)
{
var logger = new MockSchematicLogger();
var logger = new FakeLogger();
var mockWebSocket = new MockWebSocket();
mockWebSocket.SetState(WebSocketState.Open);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;

namespace SchematicHQ.Client.Test.Datastream.Mocks
{
public static class FakeLoggerExtensions
{
public static bool HasLogEntry(this FakeLogger logger, LogLevel level, string messageContains)
{
return logger.Collector.GetSnapshot().Any(r => r.Level == level && r.Message.Contains(messageContains));
}

public static ILoggerFactory ToLoggerFactory(this FakeLogger logger)
{
return LoggerFactory.Create(b => b
.SetMinimumLevel(LogLevel.Trace)
.AddProvider(new FakeLoggerProvider(logger.Collector)));
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using NUnit.Framework;
using Microsoft.Extensions.Logging.Testing;
using Moq;
using Moq.Protected;
using System;
Expand All @@ -20,7 +21,7 @@ public async Task PerformHealthCheck_WhenReplicatorReady_SetsHealthyToTrue()
// Arrange
var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
var httpClient = new HttpClient(mockHttpMessageHandler.Object);
var logger = new MockSchematicLogger();
var logger = new FakeLogger();

var healthResponse = """
{
Expand Down Expand Up @@ -66,7 +67,7 @@ public async Task PerformHealthCheck_WhenReplicatorNotReady_SetsHealthyToFalse()
// Arrange
var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
var httpClient = new HttpClient(mockHttpMessageHandler.Object);
var logger = new MockSchematicLogger();
var logger = new FakeLogger();

var healthResponse = """
{
Expand Down Expand Up @@ -113,7 +114,7 @@ public async Task CacheVersionChanged_WhenVersionChanges_FiresEvent()
// Arrange
var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
var httpClient = new HttpClient(mockHttpMessageHandler.Object);
var logger = new MockSchematicLogger();
var logger = new FakeLogger();

var eventCallCount = 0;
string? firstEventOldVersion = null;
Expand Down Expand Up @@ -225,7 +226,7 @@ public void Dispose_CleansUpResources()
{
// Arrange
var httpClient = new HttpClient();
var logger = new MockSchematicLogger();
var logger = new FakeLogger();
var service = new ReplicatorHealthService(httpClient, "http://test/ready", logger);

// Act & Assert - should not throw
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Configure additional MSBuild properties for your project in this file:
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.10.0" />
<PackageReference Include="OpenFeature" Version="2.9.0" />
</ItemGroup>
</Project>
17 changes: 10 additions & 7 deletions src/SchematicHQ.Client.Test/TestClient.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Moq;
using NUnit.Framework;
using System.Net;
Expand All @@ -8,6 +10,7 @@
using SchematicHQ.Client.Core;
using SchematicHQ.Client.Cache;
using SchematicHQ.Client.RulesEngine;
using SchematicHQ.Client.Test.Datastream.Mocks;

namespace SchematicHQ.Client.Test
{
Expand All @@ -16,7 +19,7 @@ public class SchematicTests
{
private Schematic _schematic;
private ClientOptions _options;
private Mock<ISchematicLogger> _logger;
private FakeLogger _logger;
private int _defaultEventBufferPeriod = 3; // seconds

private HttpResponseMessage CreateCheckFlagResponse(HttpStatusCode code, bool flagValue)
Expand Down Expand Up @@ -101,7 +104,7 @@ private void SetupSchematicTestClient(bool isOffline, HttpResponseMessage respon
HttpClient testClient = new HttpClient(new OfflineHttpMessageHandler());
_options = new ClientOptions
{
Logger = _logger.Object,
LoggerFactory = _logger.ToLoggerFactory(),
Offline = isOffline,
FlagDefaults = flagDefaults ?? new Dictionary<string, bool>(),
DefaultEventBufferPeriod = TimeSpan.FromSeconds(_defaultEventBufferPeriod),
Expand All @@ -122,7 +125,7 @@ private void SetupSchematicTestClient(bool isOffline, HttpResponseMessage respon
[SetUp]
public void Setup()
{
_logger = new Mock<ISchematicLogger>();
_logger = new FakeLogger();
}

[TearDown]
Expand Down Expand Up @@ -207,7 +210,7 @@ public async Task CheckFlag_LogsErrorAndReturnsDefaultOnException()

// Assert
Assert.That(result, Is.True); // default is true for the test flag
_logger.Verify(logger => logger.Error("Error checking flag via API: {0}", It.IsAny<string>()), Times.Once);
Assert.That(_logger.HasLogEntry(LogLevel.Error, "Error checking flag via API"), Is.True);
}

[Test]
Expand Down Expand Up @@ -450,7 +453,7 @@ public async Task CheckFlag_WithCacheDisabled_AlwaysCallsAPI()
var testClient = handler.CreateClient();
_options = new ClientOptions
{
Logger = _logger.Object,
LoggerFactory = _logger.ToLoggerFactory(),
Offline = false,
FlagDefaults = new Dictionary<string, bool>(),
DefaultEventBufferPeriod = TimeSpan.FromSeconds(_defaultEventBufferPeriod),
Expand Down Expand Up @@ -486,7 +489,7 @@ public async Task CheckFlag_ReturnsFalseOnErrorWithNoDefault()

// Assert
Assert.That(result, Is.False);
_logger.Verify(logger => logger.Error("Error checking flag via API: {0}", It.IsAny<string>()), Times.Once);
Assert.That(_logger.HasLogEntry(LogLevel.Error, "Error checking flag via API"), Is.True);
}

[Test]
Expand All @@ -500,7 +503,7 @@ public async Task CheckFlag_DifferentContextsProduceDifferentCacheKeys()
var testClient = handler.CreateClient();
_options = new ClientOptions
{
Logger = _logger.Object,
LoggerFactory = _logger.ToLoggerFactory(),
Offline = false,
FlagDefaults = new Dictionary<string, bool>(),
DefaultEventBufferPeriod = TimeSpan.FromSeconds(_defaultEventBufferPeriod),
Expand Down
7 changes: 4 additions & 3 deletions src/SchematicHQ.Client.Test/TestCompaniesClient.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Logging.Testing;
using Moq;
using NUnit.Framework;
using System.Net;
Expand All @@ -13,7 +16,6 @@ public class CompaniesClientTests
{
private Schematic _schematic;
private ClientOptions _options;
private Mock<ISchematicLogger> _logger;

private HttpResponseMessage CreateUpsertCompanyResponse(HttpStatusCode code)
{
Expand Down Expand Up @@ -58,10 +60,9 @@ private HttpResponseMessage CreateUpsertUserResponse(HttpStatusCode code)

private void SetupSchematicTestClient(HttpResponseMessage response)
{
_logger = new Mock<ISchematicLogger>();
_options = new ClientOptions
{
Logger = _logger.Object
LoggerFactory = NullLoggerFactory.Instance
};

var handler = new Mock<HttpMessageHandler>(MockBehavior.Strict);
Expand Down
Loading