Skip to content

Commit

Permalink
Test signing correspondance send receipt
Browse files Browse the repository at this point in the history
  • Loading branch information
HauklandJ committed Feb 25, 2025
1 parent 1d8712f commit 4760ed7
Showing 1 changed file with 118 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Altinn.App.Core.Configuration;
using Altinn.App.Core.Features;
using Altinn.App.Core.Features.Correspondence;
using Altinn.App.Core.Features.Correspondence.Models;
Expand All @@ -8,27 +7,23 @@
using Altinn.App.Core.Internal.App;
using Altinn.App.Core.Internal.Data;
using Altinn.App.Core.Internal.Language;
using Altinn.App.Core.Internal.Process.Elements.AltinnExtensionProperties;
using Altinn.App.Core.Internal.Sign;
using Altinn.App.Core.Models;
using Altinn.App.Core.Models.UserAction;
using Altinn.Platform.Register.Enums;
using Altinn.Platform.Register.Models;
using Altinn.Platform.Storage.Interface.Models;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Moq;
using static Altinn.App.Core.Features.Signing.Models.Signee;
using Signee = Altinn.App.Core.Features.Signing.Models.Signee;

namespace Altinn.App.Core.Tests.Features.Signing;

public class SigningReceiptServiceTests
{
private readonly IOptions<GeneralSettings> _generalSettings;

public SigningReceiptServiceTests()
{
_generalSettings = Microsoft.Extensions.Options.Options.Create(new GeneralSettings());
}

SigningReceiptService SetupService(
Mock<ICorrespondenceClient>? correspondenceClientMockOverride = null,
Mock<IHostEnvironment>? hostEnvironmentMockOverride = null,
Expand Down Expand Up @@ -68,6 +63,119 @@ Mock<IAppResources> SetupAppResourcesMock(
return appResourcesMock;
}

[Fact]
public async Task SendSignatureReceipt_CallsCorrespondenceClientWithCorrectParameters()
{
// Arrange
SendCorrespondencePayload? capturedPayload = null;
Mock<ICorrespondenceClient> correspondenceClientMock = new();
correspondenceClientMock
.Setup(m => m.Send(It.IsAny<SendCorrespondencePayload>(), It.IsAny<CancellationToken>()))
.Callback<SendCorrespondencePayload, CancellationToken>((payload, token) => capturedPayload = payload);

Mock<IHostEnvironment> hostEnvironmentMock = new();
hostEnvironmentMock.Setup(m => m.EnvironmentName).Returns("tt02");
ApplicationMetadata applicationMetadata = new("org/app")
{
Title = new Dictionary<string, string> { { LanguageConst.Nb, "TestAppName" } },
Org = "brg",
};
Mock<IAppMetadata> appMetadataMock = new();
appMetadataMock.Setup(m => m.GetApplicationMetadata()).ReturnsAsync(applicationMetadata);

DataElement signedElement = new()
{
Id = "11111111-1111-1111-1111-111111111111",
Filename = "signed.pdf",
ContentType = "application/pdf",
DataType = "someType",
};

DataElement unsignedElement = new()
{
Id = "22222222-2222-2222-2222-222222222222",
Filename = "unsigned.pdf",
ContentType = "application/pdf",
DataType = "someType",
};

Instance instance = new() { Id = "org/app", Data = [signedElement, unsignedElement] };
InstanceIdentifier instanceIdentifier = new(123, Guid.Parse("ab0cdeb5-dc5e-4faa-966b-d18bb932ca07"));

Mock<IInstanceDataMutator> instanceDataMutatorMock = new();
instanceDataMutatorMock.Setup(x => x.Instance).Returns(instance);
UserActionContext context = new(instanceDataMutatorMock.Object, 123456);

var dataClientMock = new Mock<IDataClient>();
dataClientMock
.Setup(x =>
x.GetDataBytes(
It.Is<string>(org => org == applicationMetadata.AppIdentifier.Org),
It.Is<string>(app => app == applicationMetadata.AppIdentifier.App),
It.Is<int>(party => party == instanceIdentifier.InstanceOwnerPartyId),
It.Is<Guid>(guid => guid == instanceIdentifier.InstanceGuid),
It.Is<Guid>(id => id == Guid.Parse(signedElement.Id))
)
)
.ReturnsAsync([1, 2, 3]);

SigningReceiptService service = SetupService(
correspondenceClientMockOverride: correspondenceClientMock,
appMetadataMockOverride: appMetadataMock,
hostEnvironmentMockOverride: hostEnvironmentMock,
dataClientMockOverride: dataClientMock
);

Core.Internal.Sign.Signee signee = new()
{
UserId = 123.ToString(),
SystemUserId = null,
PersonNumber = "11854995997",
OrganisationNumber = null,
};

List<DataElementSignature> dataElementSignatures =
[
new DataElementSignature("11111111-1111-1111-1111-111111111111"),
];

List<AltinnEnvironmentConfig> CorrespondenceResources =
[
new AltinnEnvironmentConfig { Environment = "tt02", Value = "app_ttd_receipt" },
];

// Act
await service.SendSignatureReceipt(
instanceIdentifier,
signee,
dataElementSignatures,
context,
CorrespondenceResources
);

// Assert
Assert.NotNull(capturedPayload);
Assert.Equal("app_ttd_receipt", capturedPayload!.CorrespondenceRequest.ResourceId);
Assert.Equal(
"123/ab0cdeb5-dc5e-4faa-966b-d18bb932ca07",
capturedPayload.CorrespondenceRequest.SendersReference
);
Assert.Equal("974760673", capturedPayload.CorrespondenceRequest.Sender.ToString());
Assert.IsType<OrganisationOrPersonIdentifier.Person>(capturedPayload.CorrespondenceRequest.Recipients[0]);
Assert.Equal(
"11854995997",
(
capturedPayload.CorrespondenceRequest.Recipients[0] as OrganisationOrPersonIdentifier.Person
)!.Value.ToString()
);
Assert.Equal("TestAppName: Signeringen er bekreftet", capturedPayload.CorrespondenceRequest.Content.Title);
Assert.Equal("Du har signert for TestAppName.", capturedPayload.CorrespondenceRequest.Content.Summary);
Assert.Equal(
"Dokumentene du har signert er vedlagt. Disse kan lastes ned om ønskelig. <br /><br />Hvis du lurer på noe, kan du kontakte Brønnøysundregistrene.",
capturedPayload.CorrespondenceRequest.Content.Body
);
}

[Fact]
public async Task GetContent_WithCustomTexts_ReturnsCustomContent()
{
Expand All @@ -87,10 +195,7 @@ public async Task GetContent_WithCustomTexts_ReturnsCustomContent()

var service = SetupService(appResourcesMockOverride: appResourcesMock);

Instance instance = new()
{
Id = "org/app",
};
Instance instance = new() { Id = "org/app" };

Mock<IInstanceDataMutator> instanceDataMutatorMock = new();
instanceDataMutatorMock.Setup(x => x.Instance).Returns(instance);
Expand Down

0 comments on commit 4760ed7

Please sign in to comment.