using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using LCU.API.Internal.MemberPreferencesApi.Services; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; using Infrastructure.Services; using Microsoft.EntityFrameworkCore; using Moq; using NUnit.Framework; using LCU.API.Internal.MemberPreferencesApiLib.Persistence; using LCU.API.Internal.MemberPreferencesApiLib.Repositories; namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Repository { public class MemberPreferenceRepositoryTest { private ApplicationDbContext _context; private MemberPreferenceRepository _repository; private UnifiedOptInRepository _optInRepository; [SetUp] public void Setup() { var mockDateTime = new DateTimeService(); var options = new DbContextOptionsBuilder() .UseInMemoryDatabase(Guid.NewGuid().ToString()) .EnableSensitiveDataLogging() .Options; _context = new ApplicationDbContext(options); _repository = new MemberPreferenceRepository(_context); _optInRepository = new UnifiedOptInRepository(_context); } [Test] public async Task Basic_Flow_Test() { var saved = await _repository.GetMemberPreferencesAsync("99"); Assert.NotNull(saved); Assert.IsEmpty(saved); await _repository.SaveMemberPreferenceAsync(new MemberPreference { UserId = "99", Preference = PreferenceType.ENotification, Value = "True" }); await _context.SaveChangesAsync(); saved = await _repository.GetMemberPreferencesAsync("99"); Assert.NotNull(saved); Assert.IsNotEmpty(saved); var first = saved.First(); // Make sure our Auditable is working. Assert.NotNull(first.CreatedBy); Assert.NotNull(first.Created); Assert.NotNull(first.LastUpdatedBy); Assert.NotNull(first.LastUpdated); } [Test] public async Task Bulk_Flow_Test() { var memberResult = await _optInRepository.GetMemberOptInSettings("99"); Assert.Null(memberResult); var listOfPreferences = new List { new MemberPreference { UserId = "99", Preference = PreferenceType.EStatements, Value = "True" }, new MemberPreference { UserId = "100", Preference = PreferenceType.EStatements, Value = "True" }, new MemberPreference { UserId = "101", Preference = PreferenceType.EStatements, Value = "True" } }; await _repository.BulkSaveMemberPreferenceAsync(listOfPreferences); await _context.SaveChangesAsync(); var saved = await _repository.GetMemberPreferencesAsync("99"); Assert.NotNull(saved); Assert.IsNotEmpty(saved); var first = saved.First(); // Make sure our Auditable is working. Assert.NotNull(first.CreatedBy); Assert.NotNull(first.Created); Assert.NotNull(first.LastUpdatedBy); Assert.NotNull(first.LastUpdated); saved = await _repository.GetMemberPreferencesAsync("100"); Assert.NotNull(saved); Assert.IsNotEmpty(saved); first = saved.First(); // Make sure our Auditable is working. Assert.NotNull(first.CreatedBy); Assert.NotNull(first.Created); Assert.NotNull(first.LastUpdatedBy); Assert.NotNull(first.LastUpdated); saved = await _repository.GetMemberPreferencesAsync("101"); Assert.NotNull(saved); Assert.IsNotEmpty(saved); first = saved.First(); // Make sure our Auditable is working. Assert.NotNull(first.CreatedBy); Assert.NotNull(first.Created); Assert.NotNull(first.LastUpdatedBy); Assert.NotNull(first.LastUpdated); memberResult = await _optInRepository.GetMemberOptInSettings("99"); Assert.NotNull(memberResult); Assert.AreEqual("True", memberResult.EStatements); memberResult = await _optInRepository.GetMemberOptInSettings("100"); Assert.NotNull(memberResult); Assert.AreEqual("True", memberResult.EStatements); memberResult = await _optInRepository.GetMemberOptInSettings("101"); Assert.NotNull(memberResult); Assert.AreEqual("True", memberResult.EStatements); listOfPreferences = new List { new MemberPreference { UserId = "99", Preference = PreferenceType.ENotification, Value = "Yes" }, new MemberPreference { UserId = "100", Preference = PreferenceType.ENotification, Value = "Yes" }, new MemberPreference { UserId = "101", Preference = PreferenceType.ENotification, Value = "Yes" } }; await _repository.BulkSaveMemberPreferenceAsync(listOfPreferences); memberResult = await _optInRepository.GetMemberOptInSettings("99"); Assert.AreEqual(1, saved.Count); Assert.NotNull(memberResult); Assert.AreEqual("Yes", memberResult.ENotifications); memberResult = await _optInRepository.GetMemberOptInSettings("100"); Assert.AreEqual(1, saved.Count); Assert.NotNull(memberResult); Assert.AreEqual("Yes", memberResult.ENotifications); memberResult = await _optInRepository.GetMemberOptInSettings("101"); Assert.AreEqual(1, saved.Count); Assert.NotNull(memberResult); Assert.AreEqual("Yes", memberResult.ENotifications); } } }