Skip to content

Commit

Permalink
ShouldThrowValidationExceptionIfNoReceiverWasAdded -> PASS
Browse files Browse the repository at this point in the history
  • Loading branch information
mabroukmahdhi committed Aug 11, 2024
1 parent 314b9f0 commit 2fb8df9
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,19 @@ public async void ShouldThrowValidationExceptionIfNoReceiverWasAdded()

var invalidFlexiMessageException =
new InvalidFlexiMessageException(
message: "FlexiMessage has no receiver.");
message: "Invalid message error occurred, fix errors and try again.");

invalidFlexiMessageException.AddData(
key: nameof(FlexiMessage.To),
values: "To is not set.");
values: "Value is not set");

invalidFlexiMessageException.AddData(
key: nameof(FlexiMessage.Cc),
values: "Cc is not set.");
values: "Value is not set");

invalidFlexiMessageException.AddData(
key: nameof(FlexiMessage.Bcc),
values: "Bcc is not set.");
values: "Value is not set");

var expectedFlexiMessageValidationException =
new FlexiMessageValidationException(
Expand Down
4 changes: 4 additions & 0 deletions FlexiMail/Services/FlexiExchangeService.Exceptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ private static async ValueTask TryCatch(SendFunction sendFunction)
{
throw CreateValidationException(nullFlexiMessageException);
}
catch (InvalidFlexiMessageException invalidFlexiMessageException)
{
throw CreateValidationException(invalidFlexiMessageException);
}
}

private static FlexiMessageValidationException CreateValidationException(Xeption exception)
Expand Down
31 changes: 29 additions & 2 deletions FlexiMail/Services/FlexiExchangeService.Validations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,41 @@ internal partial class FlexiExchangeService
private static void ValidFlexiMessage(FlexiMessage flexiMessage)
{
ValidFlexiMessageIsNotNull(flexiMessage);



Validate((Rule: IsInvalid(flexiMessage.To), Parameter: nameof(FlexiMessage.To)),
(Rule: IsInvalid(flexiMessage.Cc), Parameter: nameof(FlexiMessage.Cc)),
(Rule: IsInvalid(flexiMessage.Bcc), Parameter: nameof(FlexiMessage.Bcc)));
}

private static void ValidFlexiMessageIsNotNull(FlexiMessage flexiMessage)
{
if (flexiMessage == null)
throw new NullFlexiMessageException(message: "FlexiMessage is null.");
}

private static dynamic IsInvalid(object @object) => new
{
Condition = @object is null,
Message = "Value is not set"
};

private static void Validate(params (dynamic Rule, string Parameter)[] validations)
{
var invalidCompletionException =
new InvalidFlexiMessageException(
message: "Invalid message error occurred, fix errors and try again.");

foreach (var (rule, parameter) in validations)
{
if (rule.Condition)
{
invalidCompletionException.UpsertDataList(
key: parameter,
value: rule.Message);
}
}

invalidCompletionException.ThrowIfContainsErrors();
}
}
}

0 comments on commit 2fb8df9

Please sign in to comment.