Skip to content

Commit 4fc87fe

Browse files
fix: adding unit tests for AzureQueueStorageHelper (#789)
* fix: adding unit tests for AzureQueueStorageHelper * chore: adding extra assertions to tests
1 parent 5919866 commit 4fc87fe

7 files changed

Lines changed: 152 additions & 6 deletions

File tree

application/CohortManager/src/Functions/CaasIntegration/receiveCaasFile/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
client.BaseAddress = new Uri(Environment.GetEnvironmentVariable("DemographicURI"));
4141
});
4242
services.AddScoped<IValidateDates, ValidateDates>();
43+
services.AddScoped<IQueueClientFactory, QueueClientFactory>();
4344
// Register health checks
4445
services.AddBlobStorageHealthCheck("receiveCaasFile");
4546
})

application/CohortManager/src/Functions/Functions.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HealthChecks", "Shared\Heal
212212
EndProject
213213
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnumHelperTests", "..\..\..\..\tests\UnitTests\SharedTests\EnumHelperTests\EnumHelperTests.csproj", "{1FCC5D88-C291-46E0-84BE-A8FD465FD509}"
214214
EndProject
215+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureQueueStorageHelperTests", "..\..\..\..\tests\UnitTests\AzureQueueStorageHelperTests\AzureQueueStorageHelperTests.csproj", "{870D1FAF-5928-4853-85DD-77154D39F3ED}"
216+
EndProject
215217
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReadRulesTests", "..\..\..\..\tests\UnitTests\SharedTests\ReadRulesTests\ReadRulesTests.csproj", "{115F417D-C015-4ABE-9438-09CE31114CEE}"
216218
EndProject
217219
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpParserTests", "..\..\..\..\tests\UnitTests\SharedTests\HttpParserTests\HttpParserTests.csproj", "{C86FDA63-AA51-4B5F-A69B-DEF0266E268F}"
@@ -592,6 +594,10 @@ Global
592594
{1FCC5D88-C291-46E0-84BE-A8FD465FD509}.Debug|Any CPU.Build.0 = Debug|Any CPU
593595
{1FCC5D88-C291-46E0-84BE-A8FD465FD509}.Release|Any CPU.ActiveCfg = Release|Any CPU
594596
{1FCC5D88-C291-46E0-84BE-A8FD465FD509}.Release|Any CPU.Build.0 = Release|Any CPU
597+
{870D1FAF-5928-4853-85DD-77154D39F3ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
598+
{870D1FAF-5928-4853-85DD-77154D39F3ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
599+
{870D1FAF-5928-4853-85DD-77154D39F3ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
600+
{870D1FAF-5928-4853-85DD-77154D39F3ED}.Release|Any CPU.Build.0 = Release|Any CPU
595601
{0A68E48A-8249-4A74-B5B7-5921017D07BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
596602
{0A68E48A-8249-4A74-B5B7-5921017D07BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
597603
{0A68E48A-8249-4A74-B5B7-5921017D07BD}.Release|Any CPU.ActiveCfg = Release|Any CPU

application/CohortManager/src/Functions/Shared/Common/AzureQueueStorageHelper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,18 @@ namespace Common;
99

1010
public class AzureQueueStorageHelper : IAzureQueueStorageHelper
1111
{
12-
13-
private readonly string storageConnectionString;
14-
1512
public readonly ILogger<AzureQueueStorageHelper> _logger;
13+
public readonly IQueueClientFactory _queueClientFactory;
1614

17-
public AzureQueueStorageHelper(ILogger<AzureQueueStorageHelper> logger)
15+
public AzureQueueStorageHelper(ILogger<AzureQueueStorageHelper> logger, IQueueClientFactory queueClientFactory)
1816
{
19-
storageConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
2017
_logger = logger;
18+
_queueClientFactory = queueClientFactory;
2119
}
2220

2321
public async Task<bool> AddItemToQueueAsync<T>(T participantCsvRecord, string queueName)
2422
{
25-
var _queueClient = new QueueClient(storageConnectionString, queueName);
23+
var _queueClient = _queueClientFactory.CreateClient(queueName);
2624
await _queueClient.CreateIfNotExistsAsync();
2725
var json = JsonSerializer.Serialize(participantCsvRecord);
2826
var bytes = Encoding.UTF8.GetBytes(json);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Common;
2+
3+
using Azure.Storage.Queues;
4+
5+
public interface IQueueClientFactory
6+
{
7+
public QueueClient CreateClient(string queueName);
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
namespace Common;
2+
using Azure.Storage.Queues;
3+
4+
5+
public class QueueClientFactory : IQueueClientFactory
6+
{
7+
private readonly string _storageConnectionString;
8+
9+
public QueueClientFactory()
10+
{
11+
_storageConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
12+
}
13+
14+
public QueueClient CreateClient(string queueName)
15+
{
16+
return new QueueClient(_storageConnectionString, queueName);
17+
}
18+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
using System.Reflection;
2+
using System.Text;
3+
using System.Text.Json;
4+
using System.Xml.Xsl;
5+
using Azure.Storage.Queues;
6+
using Common;
7+
using Microsoft.Extensions.Azure;
8+
using Microsoft.Extensions.Logging;
9+
using Model;
10+
using Moq;
11+
12+
namespace AzureQueueStorageHelperTests;
13+
14+
[TestClass]
15+
public class AzureQueueStorageHelperTests
16+
{
17+
18+
AzureQueueStorageHelper _queueHelper;
19+
20+
Mock<IQueueClientFactory> mockQueueClientFactory;
21+
22+
Mock<QueueClient> _mockQueueClient;
23+
24+
Mock<ILogger<AzureQueueStorageHelper>> _loggerMock;
25+
26+
public AzureQueueStorageHelperTests()
27+
{
28+
mockQueueClientFactory = new Mock<IQueueClientFactory>();
29+
_loggerMock = new Mock<ILogger<AzureQueueStorageHelper>>();
30+
_mockQueueClient = new("UseDevelopmentStorage=true", "testqueue");
31+
32+
mockQueueClientFactory
33+
.Setup(f => f.CreateClient(It.IsAny<string>()))
34+
.Returns(_mockQueueClient.Object);
35+
36+
_queueHelper = new AzureQueueStorageHelper(_loggerMock.Object, mockQueueClientFactory.Object);
37+
38+
}
39+
40+
[TestMethod]
41+
public async Task AddItemToQueueAsync_AddsRecordToQueue_True()
42+
{
43+
var testRecord = new ParticipantCsvRecord
44+
{
45+
Participant = new Participant(),
46+
FileName = "test file name",
47+
48+
};
49+
50+
// Act
51+
var result = await _queueHelper.AddItemToQueueAsync(testRecord, "testqueue");
52+
53+
// Assert
54+
Assert.IsTrue(result);
55+
56+
var expectedJson = JsonSerializer.Serialize(testRecord);
57+
var expectedBase64Message = Convert.ToBase64String(Encoding.UTF8.GetBytes(expectedJson));
58+
59+
_mockQueueClient.Verify(x => x.SendMessageAsync(It.Is<string>(msg => msg == expectedBase64Message)), Times.Once);
60+
61+
_loggerMock.Verify(x => x.Log(It.Is<LogLevel>(l => l == LogLevel.Error),
62+
It.IsAny<EventId>(),
63+
It.Is<It.IsAnyType>((v, t) => v.ToString().Contains($"There was an error while putting item on queue for queue: testqueue")),
64+
It.IsAny<Exception>(),
65+
It.IsAny<Func<It.IsAnyType, Exception, string>>()),
66+
Times.Never);
67+
}
68+
69+
[TestMethod]
70+
public async Task AddItemToQueueAsync_AddsRecordToQueue_False()
71+
{
72+
var mockQueueClientFactory = new Mock<IQueueClientFactory>();
73+
Mock<QueueClient> mockQueueClient = new("UseDevelopmentStorage=true", "Some_Bad_Queue_Name");
74+
75+
mockQueueClient.Setup(x => x.SendMessageAsync(It.IsAny<string>())).Throws(new Exception("some new error"));
76+
mockQueueClientFactory
77+
.Setup(f => f.CreateClient(It.IsAny<string>()))
78+
.Returns(mockQueueClient.Object);
79+
80+
var _queueHelper = new AzureQueueStorageHelper(new Mock<ILogger<AzureQueueStorageHelper>>().Object, mockQueueClientFactory.Object);
81+
82+
var res = await _queueHelper.AddItemToQueueAsync<ParticipantCsvRecord>(new ParticipantCsvRecord(), "Some_Bad_Queue_Name");
83+
84+
Assert.IsFalse(res);
85+
}
86+
87+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
9+
<IsPackable>false</IsPackable>
10+
<IsTestProject>true</IsTestProject>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="coverlet.collector" Version="6.0.0" />
15+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
16+
<PackageReference Include="Moq" Version="4.20.70" />
17+
<PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
18+
<PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
19+
</ItemGroup>
20+
21+
<ItemGroup>
22+
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
23+
</ItemGroup>
24+
25+
<ItemGroup>
26+
<ProjectReference Include="..\..\..\application\CohortManager\src\Functions\Shared\Common\Common.csproj" />
27+
</ItemGroup>
28+
</Project>

0 commit comments

Comments
 (0)