Skip to content

Commit

Permalink
nore tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vb-ssc committed Feb 13, 2025
1 parent d9318f9 commit c7d999c
Show file tree
Hide file tree
Showing 13 changed files with 694 additions and 45 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,4 @@ ResourceProvisioner/test/ResourceProvisioner_PyFunctions_Tests/venv/*
/Portal/src/Datahub.Portal/MissingTranslations-default..json
ServerlessOperations/test/CodeCoverage/
ServerlessOperations/test/Datahub.Functions.UnitTests/TestResults/
TestResults/
21 changes: 17 additions & 4 deletions CleanCoverage.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,24 @@ if (-Not $coverageFilePath) {
# Read the entire file as a single string
[xml]$coverageXml = Get-Content $coverageFilePath.FullName -Raw

# Find and remove the class nodes for DirectFunctionExecutor
$classesToRemove = $coverageXml.coverage.packages.package.classes.class | Where-Object { $_.name -like "Datahub.Functions.DirectFunctionExecutor*" }
# Define the list of class name patterns to remove
$classPatternsToRemove = @(
"Datahub.Functions.DirectFunctionExecutor*",
"Datahub.Functions.FunctionExecutorHostBuilderExtensions",
"Datahub.Functions.FunctionExecutorAutoStartup*",
"Datahub.Functions.FunctionExecutorHostBuilderExtensions*",
"Datahub.Functions.FunctionMetadataProviderAutoStartup*",
"Datahub.Functions.GeneratedFunctionMetadataProvider",
"Datahub.Functions.WorkerHostBuilderFunctionMetadataProviderExtension",
"Datahub.Functions.WorkerExtensionStartupCodeExecutor"
)

foreach ($class in $classesToRemove) {
$class.ParentNode.RemoveChild($class) | Out-Null
# Find and remove the class nodes matching the patterns
foreach ($pattern in $classPatternsToRemove) {
$classesToRemove = $coverageXml.coverage.packages.package.classes.class | Where-Object { $_.name -like $pattern }
foreach ($class in $classesToRemove) {
$class.ParentNode.RemoveChild($class) | Out-Null
}
}

# Save the modified XML back to the file
Expand Down
7 changes: 5 additions & 2 deletions Datahub.sln
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
Analyzers.ruleset = Analyzers.ruleset
bleach.ps1 = bleach.ps1
CleanCoverage.ps1 = CleanCoverage.ps1
COPYRIGHT.md = COPYRIGHT.md
coverage.runsettings = coverage.runsettings
dh-portal.ps1 = dh-portal.ps1
dotnet-upgrade.ps1 = dotnet-upgrade.ps1
gen-all-settings.ps1 = gen-all-settings.ps1
global.json = global.json
LICENSE.md = LICENSE.md
nuget.config = nuget.config
README.md = README.md
RunTest.bat = RunTest.bat
stylecop.json = stylecop.json
EndProjectSection
EndProject
Expand Down Expand Up @@ -356,9 +359,9 @@ Global
{DB462B58-CFC4-4AEE-920E-AA308F14029C} = {8620F501-1D36-439E-9BF0-3BBEFB84DC56}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9DC4B901-16FF-4FF2-9ED6-B286EA17048E}
RESX_AutoCreateNewLanguageFiles = True
RESX_ConfirmAddLanguageFile = True
RESX_AutoCreateNewLanguageFiles = True
SolutionGuid = {9DC4B901-16FF-4FF2-9ED6-B286EA17048E}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Shared\src\Datahub.Shared\Datahub.Shared.projitems*{57703cec-08b9-40b8-b5e2-064a196b1587}*SharedItemsImports = 5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
<ItemGroup>
<InternalsVisibleTo Include="Datahub.Functions.UnitTests" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\Portal\src\Datahub.Core\Datahub.Core.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public GetUsersStatus(ILoggerFactory loggerFactory, AzureConfig configuration)
_configuration = configuration;
}

private GraphServiceClient GetAuthenticatedGraphClient()
internal virtual GraphServiceClient GetAuthenticatedGraphClient()
{
var scopes = new[] { "https://graph.microsoft.com/.default" };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,8 @@
</None>
</ItemGroup>

<ItemGroup>
<Folder Include="TestResults\" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using Datahub.Functions.Domain.Exceptions;
using FluentAssertions;

namespace Datahub.Functions.UnitTests
{
[TestFixture]
public class ProjectUsageExceptionsTests
{
[TestCase("Blob download error")]
public void BlobDownloadException_ShouldSetMessage(string message)
{
var exception = new BlobDownloadException(message);
message.Should().Be(exception.Message);
}

[TestCase("Blob upload error")]
public void BlobUploadException_ShouldSetMessage(string message)
{
var exception = new BlobUploadException(message);
message.Should().Be(exception.Message);
}

[TestCase("Cost update error")]
public void CostUpdateException_ShouldSetMessage(string message)
{
var exception = new CostUpdateException(message);
message.Should().Be(exception.Message);
}

[TestCase("Cost refresh error")]
public void CostRefreshException_ShouldSetMessage(string message)
{
var exception = new CostRefreshException(message);
message.Should().Be(exception.Message);
}

[TestCase("Budget update error")]
public void BudgetUpdateException_ShouldSetMessage(string message)
{
var exception = new BudgetUpdateException(message);
message.Should().Be(exception.Message);
}

[TestCase("Rollover error")]
public void RolloverException_ShouldSetMessage(string message)
{
var exception = new RolloverException(message);
message.Should().Be(exception.Message);
}

[TestCase("Cost query error")]
public void CostQueryException_ShouldSetMessage(string message)
{
var exception = new CostQueryException(message);
message.Should().Be(exception.Message);
}

[TestCase("Project filtering error")]
public void ProjectFilteringException_ShouldSetMessage(string message)
{
var exception = new ProjectFilteringException(message);
message.Should().Be(exception.Message);
}

[TestCase("Message scheduling error")]
public void MessageSchedulingException_ShouldSetMessage(string message)
{
var exception = new MessageSchedulingException(message);
message.Should().Be(exception.Message);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Azure.Core.Amqp;
using Azure.Messaging.ServiceBus;
using Datahub.Functions.Entities;
using Datahub.Functions.Services;
using Datahub.Infrastructure.Queues.Messages;
using FluentAssertions;
Expand All @@ -8,7 +9,10 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Moq.Protected;
using Moq;
using NSubstitute;
using System.Net;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
Expand Down Expand Up @@ -37,14 +41,31 @@ public void SetUp()
_logger = _loggerFactory.CreateLogger<BugReport>();

var httpClientFactory = Substitute.For<IHttpClientFactory>();
var httpClient = new HttpClient();


var handlerMock = new Mock<HttpMessageHandler>();
handlerMock
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>()
)
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("Success"),
});

var httpClient = new HttpClient(handlerMock.Object);

httpClientFactory.CreateClient(Arg.Any<string>()).Returns(httpClient);

_config["BugReportTeamsWebhookUrl"].Returns("https://fake_webhook_url.tld");
_azureConfig = new AzureConfig(_config);

_emailService = new EmailService(_loggerFactory.CreateLogger<EmailService>());
_alertRecordService = new AlertRecordService(_azureConfig);

_alertRecordService = Substitute.For<IAlertRecordService>();

_bugReport = new BugReport(_logger, _azureConfig, _emailService, _iSendEndpointProvider, _alertRecordService, httpClientFactory);
_bugReportMessage = new BugReportMessage(
Expand Down Expand Up @@ -116,6 +137,10 @@ public void Run_WithValidMessage_ReturnsSuccess()
{
Encoding.UTF8.GetBytes(messageEnvelope.ToJsonString())
})), new BinaryData("lockToken"u8.ToArray()));

_alertRecordService.GetRecentAlertForBugMessage(Arg.Any<BugReportMessage>())
.Returns(Task.FromResult(new ReceivedAlert { EmailSent=true }));



// Act
Expand All @@ -126,4 +151,89 @@ public void Run_WithValidMessage_ReturnsSuccess()
//result.To[0].Should().Be(_azureConfig.Email.AdminEmail);
//result.Template.Should().Be("bug_report.html");
}

[Test]
public void Run_WithNewInfrastructureError_ReturnsSuccess()
{
// Arrange
var bugInfrastructureErrorMessage = new BugReportMessage(
UserName: "Test",
UserEmail: "example@email.com",
UserOrganization: "ssc-spc",
PortalLanguage: "en",
PreferredLanguage: "en",
Timezone: "EST",
Workspaces: "DIE1",
Topics: "Test",
URL: "google.com",
UserAgent: "test",
Resolution: "1920x1080",
LocalStorage: "{}",
BugReportType: BugReportTypes.InfrastructureError,
Description: "Test report"
);

var messageEnvelope = new JsonObject
{
["message"] = JsonSerializer.SerializeToNode(bugInfrastructureErrorMessage)
};
var serviceBusReceivedMessage = ServiceBusReceivedMessage.FromAmqpMessage(
new AmqpAnnotatedMessage(new AmqpMessageBody(new List<ReadOnlyMemory<byte>>
{
Encoding.UTF8.GetBytes(messageEnvelope.ToJsonString())
})), new BinaryData("lockToken"u8.ToArray()));

_alertRecordService.GetRecentAlertForBugMessage(Arg.Any<BugReportMessage>())
.Returns(Task.FromResult(new ReceivedAlert { EmailSent = false }));

// Act
var result = _bugReport.Run(serviceBusReceivedMessage);

// Assert
result.Should().NotBeNull();
// Failing to post the issue to ADO.
// TODO: continue tests after TODO in BugReport.cs is done - enable configuration for _postToDevops
}

[Test]
public void Run_WithInfrastructureErrorAlreadySent_ReturnsSuccess()
{
// Arrange
var bugInfrastructureErrorMessage = new BugReportMessage(
UserName: "Test",
UserEmail: "example@email.com",
UserOrganization: "ssc-spc",
PortalLanguage: "en",
PreferredLanguage: "en",
Timezone: "EST",
Workspaces: "DIE1",
Topics: "Test",
URL: "google.com",
UserAgent: "test",
Resolution: "1920x1080",
LocalStorage: "{}",
BugReportType: BugReportTypes.InfrastructureError,
Description: "Test report"
);

var messageEnvelope = new JsonObject
{
["message"] = JsonSerializer.SerializeToNode(bugInfrastructureErrorMessage)
};
var serviceBusReceivedMessage = ServiceBusReceivedMessage.FromAmqpMessage(
new AmqpAnnotatedMessage(new AmqpMessageBody(new List<ReadOnlyMemory<byte>>
{
Encoding.UTF8.GetBytes(messageEnvelope.ToJsonString())
})), new BinaryData("lockToken"u8.ToArray()));

_alertRecordService.GetRecentAlertForBugMessage(Arg.Any<BugReportMessage>())
.Returns(Task.FromResult(new ReceivedAlert { EmailSent = true }));

// Act
var result = _bugReport.Run(serviceBusReceivedMessage);

// Assert
result.Should().NotBeNull();
result.Status.Should().Be(TaskStatus.RanToCompletion);
}
}
Loading

0 comments on commit c7d999c

Please sign in to comment.