Adding
This commit is contained in:
+395
@@ -0,0 +1,395 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Enums;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace LCU.Library.Internal.MemberPreferencesApiModels.UnitTests.Entities
|
||||
{
|
||||
public class MemberOptInSettingsTests
|
||||
{
|
||||
private MemberOptInSettings _settings;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_settings = new MemberOptInSettings();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptIn_SetsUniversalOptInAndLegalVersionAndLegalDate()
|
||||
{
|
||||
_settings.UniversalOptIn = Guid.NewGuid().ToString();
|
||||
_settings.LegalVersion = Guid.NewGuid().ToString();
|
||||
_settings.LegalDate = DateTime.MinValue;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptIn,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
LegalReference = Guid.NewGuid().ToString()
|
||||
};
|
||||
var actionStart = DateTime.Now;
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
var elapsedActionTime = DateTime.Now - actionStart;
|
||||
Assert.AreEqual(preference.Value, _settings.UniversalOptIn);
|
||||
Assert.AreEqual(preference.LegalReference, _settings.LegalVersion);
|
||||
Assert.That(actionStart, Is.EqualTo(_settings.LegalDate).Within(elapsedActionTime));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptInUnchanged_DoesNotClearEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.UnifiedOptInEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.UnifiedOptInEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.UnifiedOptInEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.UnifiedOptInEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptIn,
|
||||
Value = _settings.UniversalOptIn = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(originalStatus, _settings.UnifiedOptInEmailStatus);
|
||||
Assert.AreEqual(originalFirstSent, _settings.UnifiedOptInEmailFirstSent);
|
||||
Assert.AreEqual(originalLastSent, _settings.UnifiedOptInEmailLastSent);
|
||||
Assert.AreEqual(originalCount, _settings.UnifiedOptInEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptInChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.UniversalOptIn = Guid.NewGuid().ToString();
|
||||
_settings.UnifiedOptInEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.UnifiedOptInEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.UnifiedOptInEmailLastSent = DateTime.Now;
|
||||
_settings.UnifiedOptInEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptIn,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailStatus);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailFirstSent);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.UnifiedOptInEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptInEmail_SetsUnifiedOptInEmail()
|
||||
{
|
||||
_settings.UnifiedOptInEmail = Guid.NewGuid().ToString();
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptInEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(preference.Value, _settings.UnifiedOptInEmail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptInEmailUnchanged_ClearsEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.UnifiedOptInEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.UnifiedOptInEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.UnifiedOptInEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.UnifiedOptInEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptInEmail,
|
||||
Value = _settings.UnifiedOptInEmail = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailStatus);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailFirstSent);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.UnifiedOptInEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnifiedOptInEmailChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.UnifiedOptInEmail = Guid.NewGuid().ToString();
|
||||
_settings.UnifiedOptInEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.UnifiedOptInEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.UnifiedOptInEmailLastSent = DateTime.Now;
|
||||
_settings.UnifiedOptInEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.UnifiedOptInEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailStatus);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailFirstSent);
|
||||
Assert.IsNull(_settings.UnifiedOptInEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.UnifiedOptInEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotification_SetsENotifications()
|
||||
{
|
||||
_settings.ENotifications = Guid.NewGuid().ToString();
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotification,
|
||||
Value = Guid.NewGuid().ToString()
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(preference.Value, _settings.ENotifications);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotificationsUnchanged_DoesNotClearEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.ENotificationsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.ENotificationsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.ENotificationsEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.ENotificationsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotification,
|
||||
Value = _settings.ENotifications = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(originalStatus, _settings.ENotificationsEmailStatus);
|
||||
Assert.AreEqual(originalFirstSent, _settings.ENotificationsEmailFirstSent);
|
||||
Assert.AreEqual(originalLastSent, _settings.ENotificationsEmailLastSent);
|
||||
Assert.AreEqual(originalCount, _settings.ENotificationsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotificationsChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.ENotifications = Guid.NewGuid().ToString();
|
||||
_settings.ENotificationsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.ENotificationsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.ENotificationsEmailLastSent = DateTime.Now;
|
||||
_settings.ENotificationsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotification,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.ENotificationsEmailStatus);
|
||||
Assert.IsNull(_settings.ENotificationsEmailFirstSent);
|
||||
Assert.IsNull(_settings.ENotificationsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.ENotificationsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotificationsEmail_SetsENotificationsEmail()
|
||||
{
|
||||
_settings.ENotificationsEmail = Guid.NewGuid().ToString();
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotificationsEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(preference.Value, _settings.ENotificationsEmail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotificationsEmailUnchanged_ClearsEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.ENotificationsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.ENotificationsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.ENotificationsEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.ENotificationsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotificationsEmail,
|
||||
Value = _settings.ENotificationsEmail = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.ENotificationsEmailStatus);
|
||||
Assert.IsNull(_settings.ENotificationsEmailFirstSent);
|
||||
Assert.IsNull(_settings.ENotificationsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.ENotificationsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_ENotificationsEmailChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.ENotificationsEmail = Guid.NewGuid().ToString();
|
||||
_settings.ENotificationsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.ENotificationsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.ENotificationsEmailLastSent = DateTime.Now;
|
||||
_settings.ENotificationsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.ENotificationsEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.ENotificationsEmailStatus);
|
||||
Assert.IsNull(_settings.ENotificationsEmailFirstSent);
|
||||
Assert.IsNull(_settings.ENotificationsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.ENotificationsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatements_SetsEStatements()
|
||||
{
|
||||
_settings.EStatements = Guid.NewGuid().ToString();
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatements,
|
||||
Value = Guid.NewGuid().ToString()
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(preference.Value, _settings.EStatements);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatementsUnchanged_DoesNotClearEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.EStatementsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.EStatementsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.EStatementsEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.EStatementsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatements,
|
||||
Value = _settings.EStatements = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(originalStatus, _settings.EStatementsEmailStatus);
|
||||
Assert.AreEqual(originalFirstSent, _settings.EStatementsEmailFirstSent);
|
||||
Assert.AreEqual(originalLastSent, _settings.EStatementsEmailLastSent);
|
||||
Assert.AreEqual(originalCount, _settings.EStatementsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatementsChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.EStatements = Guid.NewGuid().ToString();
|
||||
_settings.EStatementsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.EStatementsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.EStatementsEmailLastSent = DateTime.Now;
|
||||
_settings.EStatementsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatements,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.EStatementsEmailStatus);
|
||||
Assert.IsNull(_settings.EStatementsEmailFirstSent);
|
||||
Assert.IsNull(_settings.EStatementsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.EStatementsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatementsEmail_SetsEStatementsEmail()
|
||||
{
|
||||
_settings.EStatementsEmail = Guid.NewGuid().ToString();
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatementsEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.AreEqual(preference.Value, _settings.EStatementsEmail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatementsEmailUnchanged_ClearsEmailTracking()
|
||||
{
|
||||
var originalStatus = _settings.EStatementsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
var originalFirstSent = _settings.EStatementsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
var originalLastSent = _settings.EStatementsEmailLastSent = DateTime.Now;
|
||||
var originalCount = _settings.EStatementsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatementsEmail,
|
||||
Value = _settings.EStatementsEmail = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.EStatementsEmailStatus);
|
||||
Assert.IsNull(_settings.EStatementsEmailFirstSent);
|
||||
Assert.IsNull(_settings.EStatementsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.EStatementsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_EStatementsEmailChanged_ClearsEmailTracking()
|
||||
{
|
||||
_settings.EStatementsEmail = Guid.NewGuid().ToString();
|
||||
_settings.EStatementsEmailStatus = RandomEnumValueFactory<EmailStatus>();
|
||||
_settings.EStatementsEmailFirstSent = DateTime.Now.AddHours(-1);
|
||||
_settings.EStatementsEmailLastSent = DateTime.Now;
|
||||
_settings.EStatementsEmailStatusCount = DateTime.Now.Millisecond;
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = PreferenceType.EStatementsEmail,
|
||||
Value = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
_settings.Apply(preference);
|
||||
|
||||
Assert.IsNull(_settings.EStatementsEmailStatus);
|
||||
Assert.IsNull(_settings.EStatementsEmailFirstSent);
|
||||
Assert.IsNull(_settings.EStatementsEmailLastSent);
|
||||
Assert.AreEqual(0, _settings.EStatementsEmailStatusCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Apply_UnknownPreference_ThrowsException()
|
||||
{
|
||||
var preference = new MemberPreference
|
||||
{
|
||||
Preference = (PreferenceType)(Enum.GetValues(typeof(PreferenceType)).Length + 1)
|
||||
};
|
||||
|
||||
var thrown = Assert.Throws<InvalidOperationException>(() => _settings.Apply(preference));
|
||||
|
||||
StringAssert.Contains(preference.Preference.ToString(), thrown?.Message);
|
||||
}
|
||||
|
||||
private static T RandomEnumValueFactory<T>()
|
||||
where T : Enum
|
||||
{
|
||||
var values = Enum.GetValues(typeof(T)).Cast<T>().ToArray();
|
||||
|
||||
return values[DateTime.Now.Millisecond % values.Length];
|
||||
}
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using LCU.API.Internal.MemberPreferencesApi.Models.EmailPolicies;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Enums;
|
||||
|
||||
namespace LCU.Library.Internal.MemberPreferencesApiModels.UnitTests.Policies.Email.FailedToSend
|
||||
{
|
||||
public class EStatementsSixtyDaysUndeliverableEmailPolicyTest : SixtyDaysUndeliverableEmailPolicyTest
|
||||
{
|
||||
protected override SixtyDaysUndeliverableEmailPolicy Policy { get; }
|
||||
|
||||
public EStatementsSixtyDaysUndeliverableEmailPolicyTest()
|
||||
{
|
||||
Policy = new EStatementsSixtyDaysUndeliverableEmailPolicy(AuditableChanges, MemberPreferences);
|
||||
}
|
||||
|
||||
protected override void SetEmailStatus(MemberOptInSettings settings, EmailStatus status)
|
||||
=> settings.EStatementsEmailStatus = status;
|
||||
protected override void SetFirstSent(MemberOptInSettings settings, DateTime firstSent)
|
||||
=> settings.EStatementsEmailFirstSent = firstSent;
|
||||
protected override void SetLastSend(MemberOptInSettings settings, DateTime lastSent)
|
||||
=> settings.EStatementsEmailLastSent = lastSent;
|
||||
protected override void SetEligibleForPreferenceFlip(MemberOptInSettings settings)
|
||||
=> settings.UniversalOptIn = null;
|
||||
protected override string GetPreference(MemberOptInSettings settings)
|
||||
=> settings.UniversalOptIn;
|
||||
}
|
||||
}
|
||||
+187
@@ -0,0 +1,187 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Enums;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Models;
|
||||
using LCU.API.Internal.MemberPreferencesApi.Models.EmailPolicies;
|
||||
|
||||
namespace LCU.Library.Internal.MemberPreferencesApiModels.UnitTests.Policies.Email.FailedToSend
|
||||
{
|
||||
public abstract class SixtyDaysUndeliverableEmailPolicyTest
|
||||
{
|
||||
protected abstract SixtyDaysUndeliverableEmailPolicy Policy { get; }
|
||||
protected IAuditableChanges AuditableChanges => _auditableChanges;
|
||||
protected IMemberPreferences MemberPreferences => _memberPreferences;
|
||||
|
||||
protected abstract void SetEmailStatus(MemberOptInSettings settings, EmailStatus status);
|
||||
protected abstract void SetFirstSent(MemberOptInSettings settings, DateTime firstSent);
|
||||
protected abstract void SetLastSend(MemberOptInSettings settings, DateTime lastSent);
|
||||
protected abstract void SetEligibleForPreferenceFlip(MemberOptInSettings settings);
|
||||
protected abstract string GetPreference(MemberOptInSettings settings);
|
||||
|
||||
private readonly FakeAuditableChanges _auditableChanges = new FakeAuditableChanges();
|
||||
private readonly FakeMemberPreferences _memberPreferences = new FakeMemberPreferences();
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_memberPreferences.Changes.Clear();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Apply_NotFailingDelivery_ReturnsFalse()
|
||||
{
|
||||
var settings = SettingsFactory();
|
||||
SetEmailStatus(settings, EmailStatus.DeliveredSuccessfully);
|
||||
var originalSettings = Clone(settings);
|
||||
var anyChanges = await Policy.Apply(settings, true);
|
||||
|
||||
Assert.That(anyChanges, Is.False);
|
||||
Assert.That(_memberPreferences.Changes.Any(), Is.False);
|
||||
settings.Should().BeEquivalentTo(originalSettings);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Apply_FailingDeliveryForLessThanSixtyDays_ReturnsFalse()
|
||||
{
|
||||
var settings = SettingsFactory();
|
||||
SetEmailStatus(settings, EmailStatus.FailingDelivery);
|
||||
SetFirstSent(settings, DateTime.Now.AddDays(-59));
|
||||
SetLastSend(settings, DateTime.Now);
|
||||
var originalSettings = Clone(settings);
|
||||
var anyChanges = await Policy.Apply(settings, true);
|
||||
Assert.That(anyChanges, Is.False);
|
||||
Assert.That(_memberPreferences.Changes.Any(), Is.False);
|
||||
settings.Should().BeEquivalentTo(originalSettings);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Apply_FailingDeliveryForSixtyDaysOrMore_ReturnsTrueAndSetsToPaper()
|
||||
{
|
||||
var settings = SettingsFactory();
|
||||
SetEmailStatus(settings, EmailStatus.FailingDelivery);
|
||||
SetFirstSent(settings, DateTime.Now.AddDays(-60));
|
||||
SetLastSend(settings, DateTime.Now);
|
||||
SetEligibleForPreferenceFlip(settings);
|
||||
|
||||
var originalSettings = Clone(settings);
|
||||
var anyChanges = await Policy.Apply(settings, true);
|
||||
|
||||
var preference = GetPreference(settings);
|
||||
Assert.That(anyChanges, Is.True);
|
||||
settings.Should().BeEquivalentTo
|
||||
(
|
||||
originalSettings,
|
||||
except => except
|
||||
.Excluding(s => s.LastUpdatedBy)
|
||||
.Excluding(s => s.UniversalOptIn)
|
||||
.Excluding(s => s.ENotifications)
|
||||
.Excluding(s => s.EStatements)
|
||||
);
|
||||
Assert.That(preference, Is.EqualTo(DeliveryPreference.Paper));
|
||||
Assert.That(settings.LastUpdatedBy, Is.EqualTo("BounceBackLimitReached"));
|
||||
Assert.That(_memberPreferences.Changes.Count(p => p.Value == DeliveryPreference.Paper && p.UserId == settings.UserId && p.LastUpdatedBy == "BounceBackLimitReached"), Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Apply_FailingDeliveryForSixtyDaysOrMore_FeatureFlagReturnsFalse()
|
||||
{
|
||||
var settings = SettingsFactory();
|
||||
SetEmailStatus(settings, EmailStatus.FailingDelivery);
|
||||
SetFirstSent(settings, DateTime.Now.AddDays(-60));
|
||||
SetLastSend(settings, DateTime.Now);
|
||||
var originalSettings = Clone(settings);
|
||||
var anyChanges = await Policy.Apply(settings, false);
|
||||
var preference = GetPreference(settings);
|
||||
|
||||
Assert.That(anyChanges, Is.False);
|
||||
Assert.That(_memberPreferences.Changes.Any(), Is.False);
|
||||
settings.Should().BeEquivalentTo(originalSettings);
|
||||
Assert.That(_memberPreferences.Changes.Count(p => p.Value == DeliveryPreference.Paper && p.UserId == settings.UserId && p.LastUpdatedBy == "BounceBackLimitReached"), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Apply_FailingDeliveryForSixtyDaysOrMore_SetsTrackingToBounceBackSystem()
|
||||
{
|
||||
var settings = SettingsFactory();
|
||||
SetEmailStatus(settings, EmailStatus.FailingDelivery);
|
||||
SetFirstSent(settings, DateTime.Now.AddDays(-60));
|
||||
SetLastSend(settings, DateTime.Now);
|
||||
SetEligibleForPreferenceFlip(settings);
|
||||
await Policy.Apply(settings, true);
|
||||
|
||||
Assert.That(settings.LastUpdatedBy, Is.EqualTo("BounceBackLimitReached"));
|
||||
Assert.That(_auditableChanges.SystemModifiedAuditableEntities.ContainsKey(settings), Is.True);
|
||||
Assert.That(_auditableChanges.SystemModifiedAuditableEntities[settings], Is.EqualTo("BounceBackLimitReached"));
|
||||
}
|
||||
|
||||
private static MemberOptInSettings SettingsFactory()
|
||||
=> new MemberOptInSettings
|
||||
{
|
||||
LastUpdatedBy = Guid.NewGuid().ToString(),
|
||||
|
||||
UniversalOptIn = DeliveryPreference.Electronic,
|
||||
UnifiedOptInEmailStatus = EmailStatus.DeliveredSuccessfully,
|
||||
UnifiedOptInEmailFirstSent = DateTime.Now,
|
||||
UnifiedOptInEmailLastSent = DateTime.Now,
|
||||
|
||||
ENotifications = DeliveryPreference.Electronic,
|
||||
ENotificationsEmailStatus = EmailStatus.DeliveredSuccessfully,
|
||||
ENotificationsEmailFirstSent = DateTime.Now,
|
||||
ENotificationsEmailLastSent = DateTime.Now,
|
||||
|
||||
EStatements = DeliveryPreference.Electronic,
|
||||
EStatementsEmailStatus = EmailStatus.DeliveredSuccessfully,
|
||||
EStatementsEmailFirstSent = DateTime.Now,
|
||||
EStatementsEmailLastSent = DateTime.Now
|
||||
};
|
||||
|
||||
private static MemberOptInSettings Clone(MemberOptInSettings settings)
|
||||
=> new MemberOptInSettings
|
||||
{
|
||||
LastUpdatedBy = settings.LastUpdatedBy,
|
||||
|
||||
UniversalOptIn = settings.UniversalOptIn,
|
||||
UnifiedOptInEmailStatus = settings.UnifiedOptInEmailStatus,
|
||||
UnifiedOptInEmailFirstSent = settings.UnifiedOptInEmailFirstSent,
|
||||
UnifiedOptInEmailLastSent = settings.UnifiedOptInEmailLastSent,
|
||||
|
||||
ENotifications = settings.ENotifications,
|
||||
ENotificationsEmailStatus = settings.ENotificationsEmailStatus,
|
||||
ENotificationsEmailFirstSent = settings.ENotificationsEmailFirstSent,
|
||||
ENotificationsEmailLastSent = settings.ENotificationsEmailLastSent,
|
||||
|
||||
EStatements = settings.EStatements,
|
||||
EStatementsEmailStatus = settings.EStatementsEmailStatus,
|
||||
EStatementsEmailFirstSent = settings.EStatementsEmailFirstSent,
|
||||
EStatementsEmailLastSent = settings.EStatementsEmailLastSent
|
||||
};
|
||||
|
||||
private class FakeAuditableChanges : IAuditableChanges
|
||||
{
|
||||
public IDictionary<Auditable, string> SystemModifiedAuditableEntities { get; } =
|
||||
new Dictionary<Auditable, string>();
|
||||
|
||||
public void SystemModified(Auditable entity, string modifiedBy)
|
||||
{
|
||||
SystemModifiedAuditableEntities[entity] = modifiedBy;
|
||||
}
|
||||
}
|
||||
|
||||
private class FakeMemberPreferences : IMemberPreferences
|
||||
{
|
||||
public IList<MemberPreference> Changes { get; }= new List<MemberPreference>();
|
||||
|
||||
public Task Add(MemberPreference preferenceChange)
|
||||
{
|
||||
Changes.Add(preferenceChange);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using LCU.API.Internal.MemberPreferencesApi.Models.EmailPolicies;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
|
||||
using LCU.Library.Internal.MemberPreferencesApiModels.Enums;
|
||||
|
||||
namespace LCU.Library.Internal.MemberPreferencesApiModels.UnitTests.Policies.Email.FailedToSend
|
||||
{
|
||||
public class UnifiedSixtyDaysUndeliverableEmailPolicyTest : SixtyDaysUndeliverableEmailPolicyTest
|
||||
{
|
||||
protected override SixtyDaysUndeliverableEmailPolicy Policy { get; }
|
||||
|
||||
public UnifiedSixtyDaysUndeliverableEmailPolicyTest()
|
||||
{
|
||||
Policy= new UnifiedSixtyDaysUndeliverableEmailPolicy(AuditableChanges, MemberPreferences);
|
||||
}
|
||||
|
||||
protected override void SetEmailStatus(MemberOptInSettings settings, EmailStatus status)
|
||||
=> settings.UnifiedOptInEmailStatus = status;
|
||||
protected override void SetFirstSent(MemberOptInSettings settings, DateTime firstSent)
|
||||
=> settings.UnifiedOptInEmailFirstSent = firstSent;
|
||||
protected override void SetLastSend(MemberOptInSettings settings, DateTime lastSent)
|
||||
=> settings.UnifiedOptInEmailLastSent = lastSent;
|
||||
protected override void SetEligibleForPreferenceFlip(MemberOptInSettings settings)
|
||||
=> settings.UniversalOptIn = "Electronic";
|
||||
protected override string GetPreference(MemberOptInSettings settings)
|
||||
=> settings.UniversalOptIn;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user