From 2927d5aac19d41c1c835c8f9a95a54d08d3441e2 Mon Sep 17 00:00:00 2001
From: Stephanie Buadu <47737608+acn-sbuad@users.noreply.github.com>
Date: Fri, 22 Sep 2023 14:38:10 +0200
Subject: [PATCH] from address optional to provide (#249)
---
.../NotificationTemplate/EmailTemplate.cs | 4 +-
.../EmailNotificationOrderRequestExt.cs | 2 +-
.../EmailNotificationOrderRequestValidator.cs | 1 -
.../EmailNotificationOrdersControllerTests.cs | 59 +++++++++++++++++++
...lNotificationOrderRequestValidatorTests.cs | 15 -----
5 files changed, 62 insertions(+), 19 deletions(-)
diff --git a/src/Altinn.Notifications.Core/Models/NotificationTemplate/EmailTemplate.cs b/src/Altinn.Notifications.Core/Models/NotificationTemplate/EmailTemplate.cs
index 0f3353d1..dbee9a59 100644
--- a/src/Altinn.Notifications.Core/Models/NotificationTemplate/EmailTemplate.cs
+++ b/src/Altinn.Notifications.Core/Models/NotificationTemplate/EmailTemplate.cs
@@ -33,9 +33,9 @@ public class EmailTemplate : INotificationTemplate
///
/// Initializes a new instance of the class.
///
- public EmailTemplate(string fromAddress, string subject, string body, EmailContentType contentType)
+ public EmailTemplate(string? fromAddress, string subject, string body, EmailContentType contentType)
{
- FromAddress = fromAddress;
+ FromAddress = fromAddress ?? string.Empty;
Subject = subject;
Body = body;
ContentType = contentType;
diff --git a/src/Altinn.Notifications/Models/EmailNotificationOrderRequestExt.cs b/src/Altinn.Notifications/Models/EmailNotificationOrderRequestExt.cs
index dbfcf7a5..51ebe5e2 100644
--- a/src/Altinn.Notifications/Models/EmailNotificationOrderRequestExt.cs
+++ b/src/Altinn.Notifications/Models/EmailNotificationOrderRequestExt.cs
@@ -17,7 +17,7 @@ public class EmailNotificationOrderRequestExt
/// Gets or sets the from address to use as sender of the email
///
[JsonPropertyName("fromAddress")]
- public string FromAddress { get; set; } = string.Empty;
+ public string? FromAddress { get; set; }
///
/// Gets or sets the subject of the email
diff --git a/src/Altinn.Notifications/Validators/EmailNotificationOrderRequestValidator.cs b/src/Altinn.Notifications/Validators/EmailNotificationOrderRequestValidator.cs
index 5750fc84..f1250f51 100644
--- a/src/Altinn.Notifications/Validators/EmailNotificationOrderRequestValidator.cs
+++ b/src/Altinn.Notifications/Validators/EmailNotificationOrderRequestValidator.cs
@@ -26,6 +26,5 @@ public EmailNotificationOrderRequestValidator()
RuleFor(order => order.Body).NotEmpty();
RuleFor(order => order.Subject).NotEmpty();
- RuleFor(order => order.FromAddress).NotEmpty();
}
}
diff --git a/test/Altinn.Notifications.IntegrationTests/Notifications/EmailNotificationsOrderController/EmailNotificationOrdersControllerTests.cs b/test/Altinn.Notifications.IntegrationTests/Notifications/EmailNotificationsOrderController/EmailNotificationOrdersControllerTests.cs
index 157de9ac..6c27f27f 100644
--- a/test/Altinn.Notifications.IntegrationTests/Notifications/EmailNotificationsOrderController/EmailNotificationOrdersControllerTests.cs
+++ b/test/Altinn.Notifications.IntegrationTests/Notifications/EmailNotificationsOrderController/EmailNotificationOrdersControllerTests.cs
@@ -181,8 +181,19 @@ public async Task Post_ServiceReturnsError_ServerError()
public async Task Post_ServiceReturnsOrder_Accepted()
{
// Arrange
+ string expectedFromAddress = "sender@domain.com";
+
Mock serviceMock = new();
serviceMock.Setup(s => s.RegisterEmailNotificationOrder(It.IsAny()))
+ .Callback(orderRequest =>
+ {
+ var emailTemplate = orderRequest.Templates
+ .OfType()
+ .FirstOrDefault();
+
+ Assert.NotNull(emailTemplate);
+ Assert.Equal(expectedFromAddress, emailTemplate.FromAddress);
+ })
.ReturnsAsync((_order, null));
HttpClient client = GetTestClient(orderService: serviceMock.Object);
@@ -205,6 +216,54 @@ public async Task Post_ServiceReturnsOrder_Accepted()
serviceMock.VerifyAll();
}
+ [Fact]
+ public async Task Post_OrderWithoutFromAddress_StringEmptyUsedAsServiceInput_Accepted()
+ {
+ // Arrange
+ Mock serviceMock = new();
+
+ serviceMock.Setup(s => s.RegisterEmailNotificationOrder(It.IsAny()))
+ .Callback(orderRequest =>
+ {
+ var emailTemplate = orderRequest.Templates
+ .OfType()
+ .FirstOrDefault();
+
+ Assert.NotNull(emailTemplate);
+ Assert.Empty(emailTemplate.FromAddress);
+ })
+ .ReturnsAsync((_order, null));
+
+ HttpClient client = GetTestClient(orderService: serviceMock.Object);
+ client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", PrincipalUtil.GetOrgToken("ttd"));
+
+ EmailNotificationOrderRequestExt request = new()
+ {
+ Body = "email-body",
+ ContentType = EmailContentType.Html,
+ Recipients = new List() { new RecipientExt() { EmailAddress = "recipient1@domain.com" }, new RecipientExt() { EmailAddress = "recipient2@domain.com" } },
+ SendersReference = "senders-reference",
+ RequestedSendTime = DateTime.UtcNow,
+ Subject = "email-subject",
+ };
+
+ HttpRequestMessage httpRequestMessage = new(HttpMethod.Post, _basePath)
+ {
+ Content = new StringContent(request.Serialize(), Encoding.UTF8, "application/json")
+ };
+
+ // Act
+ HttpResponseMessage response = await client.SendAsync(httpRequestMessage);
+ string actualOrderId = await response.Content.ReadAsStringAsync();
+
+ // Assert
+ Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
+ Assert.Equal("http://localhost:5090/notifications/api/v1/orders/" + _order.Id, response.Headers?.Location?.ToString());
+ Assert.Equal($"{_order.Id}", actualOrderId);
+
+ serviceMock.VerifyAll();
+ }
+
private HttpClient GetTestClient(IValidator? validator = null, IEmailNotificationOrderService? orderService = null)
{
if (validator == null)
diff --git a/test/Altinn.Notifications.Tests/Notifications/TestingValidators/EmailNotificationOrderRequestValidatorTests.cs b/test/Altinn.Notifications.Tests/Notifications/TestingValidators/EmailNotificationOrderRequestValidatorTests.cs
index 9a8e83b2..e1e8186c 100644
--- a/test/Altinn.Notifications.Tests/Notifications/TestingValidators/EmailNotificationOrderRequestValidatorTests.cs
+++ b/test/Altinn.Notifications.Tests/Notifications/TestingValidators/EmailNotificationOrderRequestValidatorTests.cs
@@ -71,21 +71,6 @@ public void Validate_SendTimePassed_ReturnsFalse()
Assert.Contains(actual.Errors, a => a.ErrorMessage.Equals("Send time must be in the future. Leave blank to send immediately."));
}
- [Fact]
- public void Validate_FromAddressMissing_ReturnsFalse()
- {
- var order = new EmailNotificationOrderRequestExt()
- {
- Subject = "This is an email subject",
- Recipients = new List() { new RecipientExt() { Id = "16069412345", EmailAddress = "recipient2@domain.com" } },
- Body = "This is an email body"
- };
-
- var actual = _validator.Validate(order);
- Assert.False(actual.IsValid);
- Assert.Contains(actual.Errors, a => a.ErrorMessage.Equals("'From Address' must not be empty."));
- }
-
[Fact]
public void Validate_SubjectMissing_ReturnsFalse()
{