diff --git a/FlexiMail.Tests.Unit/Services/FlexiExchangeServiceTests.Validations.cs b/FlexiMail.Tests.Unit/Services/FlexiExchangeServiceTests.Validations.cs new file mode 100644 index 0000000..5cee250 --- /dev/null +++ b/FlexiMail.Tests.Unit/Services/FlexiExchangeServiceTests.Validations.cs @@ -0,0 +1,56 @@ +// --------------------------------------- +// Copyright (c) 2024 Mabrouk Mahdhi. +// Made with love for the .NET Community +// --------------------------------------- + +using System; +using FlexiMail.Models.Foundations.Messages; +using FlexiMail.Models.Foundations.Messages.Exceptions; +using FluentAssertions; +using Microsoft.Exchange.WebServices.Data; +using Moq; + +namespace FlexiMail.Tests.Unit.Services +{ + public partial class FlexiExchangeServiceTests + { + [Fact] + public void ShouldThrowValidationExceptionIfFlexiMessageIsNull() + { + // given + FlexiMessage nullMessage = null; + + var nullFlexiMessageException = + new NullFlexiMessageException( + message: "FlexiMessage is null."); + + var expectedFlexiMessageValidationException = + new FlexiMessageValidationException( + message: "Flexi Message validation error occurred, fix errors and try again.", + innerException: nullFlexiMessageException); + + // when + void SendMessageAction() => this.flexiExchangeService.SendAndSaveCopyAsync(nullMessage); + + var actualException = Assert.Throws((Action)SendMessageAction); + // then + + actualException.Should().BeEquivalentTo(expectedFlexiMessageValidationException); + + this.exchangeBrokerMock.Verify(broker => + broker.GetAccessTokenAsync(), + Times.Never); + + this.exchangeBrokerMock.Verify(broker => + broker.CreateExchangeService( + ExchangeVersion.Exchange2013, + It.IsAny(), + It.IsAny()), + Times.Never); + + this.exchangeBrokerMock.Verify(broker => + broker.SendAndSaveCopy(It.IsAny()), + Times.Never); + } + } +} \ No newline at end of file diff --git a/FlexiMail/Models/Foundations/Messages/Exceptions/FlexiMessageValidationException.cs b/FlexiMail/Models/Foundations/Messages/Exceptions/FlexiMessageValidationException.cs new file mode 100644 index 0000000..f3f2fcd --- /dev/null +++ b/FlexiMail/Models/Foundations/Messages/Exceptions/FlexiMessageValidationException.cs @@ -0,0 +1,14 @@ +// --------------------------------------- +// Copyright (c) 2024 Mabrouk Mahdhi. +// Made with love for the .NET Community +// --------------------------------------- + +using System; + +namespace FlexiMail.Models.Foundations.Messages.Exceptions +{ + public class FlexiMessageValidationException(string message, Exception innerException) + : Exception(message, innerException) + { + } +} \ No newline at end of file diff --git a/FlexiMail/Models/Foundations/Messages/Exceptions/NullFlexiMessageException.cs b/FlexiMail/Models/Foundations/Messages/Exceptions/NullFlexiMessageException.cs new file mode 100644 index 0000000..9a8c3b0 --- /dev/null +++ b/FlexiMail/Models/Foundations/Messages/Exceptions/NullFlexiMessageException.cs @@ -0,0 +1,13 @@ +// --------------------------------------- +// Copyright (c) 2024 Mabrouk Mahdhi. +// Made with love for the .NET Community +// --------------------------------------- + +using System; + +namespace FlexiMail.Models.Foundations.Messages.Exceptions +{ + public class NullFlexiMessageException(string message) : Exception(message) + { + } +} \ No newline at end of file