using Autofac; using System.Data; using Insight.Database; using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.Extensions.Logging; using Core.Telemetry; using Microsoft.ApplicationInsights; namespace Tests { [TestClass] public class MessageChannelIntegrationTests : TestFixture { private IMessageChannel _messageChannel; private SeqBackgroundService _service; private CancellationTokenSource _cts; [TestInitialize] public void SetupThis() { _messageChannel = new MessageChannel(); var telemetryClient = Container.Resolve(); var httpClient = new HttpClient(new TestMessageHandler()); _service = new SeqBackgroundService(telemetryClient, _messageChannel, httpClient); _cts = new CancellationTokenSource(); } [TestMethod] public async Task Messages_ShouldBeProcessedFromQueue() { // Arrange var processedMessages = new List(); // Start service var serviceTask = _service.StartAsync(_cts.Token); // Act // Send nogle beskeder til køen for (int i = 0; i < 5; i++) { var message = new HttpRequestMessage(HttpMethod.Post, $"http://test.com/{i}"); await _messageChannel.Writer.WriteAsync(message); } // Vent lidt for at sikre processing await Task.Delay(5000); // Stop servicen _cts.Cancel(); await _service.StopAsync(CancellationToken.None); // Assert // Check at køen er tom bool hasMoreMessages = await _messageChannel.Reader.WaitToReadAsync(); Assert.IsFalse(hasMoreMessages, "Køen burde være tom"); } private class TestMessageHandler : HttpMessageHandler { protected override Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { return Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.OK)); } } [TestCleanup] public void Cleanup() { _cts?.Dispose(); } } }