Browse Source

Noop sender.

pull/354/head
Sebastian Stehle 7 years ago
parent
commit
e0391bb5bb
  1. 2
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/IInvitationEmailSender.cs
  2. 5
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailEventConsumer.cs
  3. 5
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailSender.cs
  4. 31
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/NoopInvitationEmailSender.cs
  5. 17
      src/Squidex/Config/Domain/EntitiesServices.cs
  6. 3
      src/Squidex/appsettings.json
  7. 23
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/Invitation/InvitationEmailEventConsumerTests.cs

2
src/Squidex.Domain.Apps.Entities/Apps/Invitation/IInvitationEmailSender.cs

@ -12,6 +12,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
{
public interface IInvitationEmailSender
{
bool IsActive { get; }
Task SendNewUserEmailAsync(IUser assigner, IUser assignee, string appName);
Task SendExistingUserEmailAsync(IUser assigner, IUser assignee, string appName);

5
src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailEventConsumer.cs

@ -55,6 +55,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
public async Task On(Envelope<IEvent> @event)
{
if (!emailSender.IsActive)
{
return;
}
if (@event.Payload is AppContributorAssigned appContributorAssigned && appContributorAssigned.Actor.IsSubject)
{
var assignerId = appContributorAssigned.Actor.Identifier;

5
src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailSender.cs

@ -21,6 +21,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
private readonly ISemanticLog log;
private readonly InvitationEmailTextOptions texts;
public bool IsActive
{
get { return true; }
}
public InvitationEmailSender(
IOptions<InvitationEmailTextOptions> texts,
IEmailSender emailSender,

31
src/Squidex.Domain.Apps.Entities/Apps/Invitation/NoopInvitationEmailSender.cs

@ -0,0 +1,31 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Threading.Tasks;
using Squidex.Infrastructure.Tasks;
using Squidex.Shared.Users;
namespace Squidex.Domain.Apps.Entities.Apps.Invitation
{
public sealed class NoopInvitationEmailSender : IInvitationEmailSender
{
public bool IsActive
{
get { return false; }
}
public Task SendExistingUserEmailAsync(IUser assigner, IUser assignee, string appName)
{
return TaskHelper.Done;
}
public Task SendNewUserEmailAsync(IUser assigner, IUser assignee, string appName)
{
return TaskHelper.Done;
}
}
}

17
src/Squidex/Config/Domain/EntitiesServices.cs

@ -156,18 +156,23 @@ namespace Squidex.Config.Domain
{
services.AddSingleton(Options.Create(emailOptions));
services.Configure<InvitationEmailTextOptions>(
config.GetSection("email:invitations"));
services.AddSingletonAs<SmtpEmailSender>()
.As<IEmailSender>();
services.AddSingletonAs<InvitationEmailEventConsumer>()
.As<IEventConsumer>();
services.AddSingletonAs<InvitationEmailSender>()
.AsOptional<IInvitationEmailSender>();
services.Configure<InvitationEmailTextOptions>(
config.GetSection("email:invitations"));
}
else
{
services.AddSingletonAs<NoopInvitationEmailSender>()
.AsOptional<IInvitationEmailSender>();
}
services.AddSingletonAs<InvitationEmailEventConsumer>()
.As<IEventConsumer>();
}
private static void AddCommandPipeline(this IServiceCollection services)

3
src/Squidex/appsettings.json

@ -89,11 +89,12 @@
/*
* Always use SSL if possible.
*/
"enableSsl": true,
/*
* The port to your email server.
*/
"port": 587
"port": 465
},
"invitiations": {
/*

23
tests/Squidex.Domain.Apps.Entities.Tests/Apps/Invitation/InvitationEmailEventConsumerTests.cs

@ -31,6 +31,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
public InvitationEmailEventConsumerTests()
{
A.CallTo(() => emailSender.IsActive)
.Returns(true);
sut = new InvitationEmailEventConsumer(emailSender, userResolver, log);
}
@ -48,6 +51,26 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
.MustNotHaveHappened();
}
[Fact]
public async Task Should_not_send_email_if_sender_not_active()
{
var @event = Envelope.Create(CreateEvent(RefTokenType.Subject, true));
A.CallTo(() => emailSender.IsActive)
.Returns(false);
A.CallTo(() => userResolver.FindByIdOrEmailAsync(assignerId))
.Returns(Task.FromResult<IUser>(null));
await sut.On(@event);
A.CallTo(() => userResolver.FindByIdOrEmailAsync(A<string>.Ignored))
.MustNotHaveHappened();
A.CallTo(() => emailSender.SendNewUserEmailAsync(A<IUser>.Ignored, A<IUser>.Ignored, appName))
.MustNotHaveHappened();
}
[Fact]
public async Task Should_not_send_email_if_assigner_not_found()
{

Loading…
Cancel
Save