131 lines
3.9 KiB
C#
131 lines
3.9 KiB
C#
using FluentAssertions;
|
|
using LCU.Api.Internal.DocumentIngestorLib.Extensions.Queryables;
|
|
using LCU.Library.Internal.DocumentIngestorModels.Entities;
|
|
using LCU.Library.Internal.DocumentIngestorModels.Enums;
|
|
using LCU.Library.Internal.DocumentIngestorModels.Models.Pagination;
|
|
|
|
namespace LCU.API.Internal.DocumentIngestorLibTests.Extensions.Queryables;
|
|
|
|
public class DocumentProcessingInfoNotificationStatusQueryableTest
|
|
{
|
|
[Test]
|
|
public void FilterByNotificationStatusType_NotificationStatusFiltersIsNull_ReturnsUnmodifiedQueryable()
|
|
{
|
|
var processingInfo = InfoFactory();
|
|
var filter = new Filter
|
|
{
|
|
NotificationStatusFilters = null
|
|
};
|
|
var originalProcessingInfo = processingInfo.ToArray();
|
|
|
|
var filtered = processingInfo.FilterByNotificationStatusType(filter);
|
|
|
|
filtered.Should().BeEquivalentTo(originalProcessingInfo);
|
|
}
|
|
|
|
[Test]
|
|
public void FilterByNotificationStatusType_NotificationStatusFiltersIsEmpty_ReturnsUnmodifiedQueryable()
|
|
{
|
|
var processingInfo = InfoFactory();
|
|
var filter = new Filter
|
|
{
|
|
NotificationStatusFilters = new List<NotificationStatusTypes>()
|
|
};
|
|
var originalProcessingInfo = processingInfo.ToArray();
|
|
|
|
var filtered = processingInfo.FilterByNotificationStatusType(filter);
|
|
|
|
filtered.Should().BeEquivalentTo(originalProcessingInfo);
|
|
}
|
|
|
|
[Test]
|
|
public void FilterByNotificationStatusType_ProcessingInfoMemberNotificationInfoIsNull_IsFilteredOut()
|
|
{
|
|
var processingInfo = InfoFactory();
|
|
var filter = new Filter
|
|
{
|
|
NotificationStatusFilters = processingInfo
|
|
.Where(i => i.MemberNotificationInfos != null)
|
|
.SelectMany(i => i.MemberNotificationInfos.ToList())
|
|
.Select(i => i.NotificationStatusType)
|
|
.Distinct()
|
|
.ToList()
|
|
};
|
|
|
|
var filtered = processingInfo.FilterByNotificationStatusType(filter);
|
|
|
|
filtered.Should().NotContain(i => i.MemberNotificationInfos == null);
|
|
}
|
|
|
|
[Test]
|
|
public void FilterByNotificationStatusType_ProcessingInfoMemberNotificationInfoStatusNotInFilter_IsFilteredOut()
|
|
{
|
|
var processingInfo = InfoFactory();
|
|
var notIncludedStatuses = Enum.GetValues<NotificationStatusTypes>()[..(Enum.GetValues<NotificationStatusTypes>().Length / 2)];
|
|
var filter = new Filter
|
|
{
|
|
NotificationStatusFilters = processingInfo
|
|
.Where(i => i.MemberNotificationInfos != null)
|
|
.SelectMany(i => i.MemberNotificationInfos.ToList())
|
|
.Select(i => i.NotificationStatusType)
|
|
.Distinct()
|
|
.Except(notIncludedStatuses)
|
|
.ToList()
|
|
};
|
|
|
|
var filtered = processingInfo.FilterByNotificationStatusType(filter);
|
|
|
|
filtered.Should().NotContain(i => notIncludedStatuses.Contains(i.MemberNotificationInfos.FirstOrDefault().NotificationStatusType));
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void FilterByNotificationStatusType_ProcessingInfoMemberNotificationInfoStatusInFilter_IsRetained()
|
|
{
|
|
var processingInfo = InfoFactory();
|
|
var includedStatuses = Enum.GetValues<NotificationStatusTypes>()[..(Enum.GetValues<NotificationStatusTypes>().Length / 2)];
|
|
var filter = new Filter
|
|
{
|
|
NotificationStatusFilters = includedStatuses.Distinct().ToList()
|
|
};
|
|
|
|
var filtered = processingInfo.FilterByNotificationStatusType(filter);
|
|
|
|
filtered.Should().OnlyContain(i => includedStatuses.Contains(i.MemberNotificationInfos.FirstOrDefault().NotificationStatusType));
|
|
}
|
|
|
|
private static IQueryable<DocumentProcessingInfo> InfoFactory()
|
|
=> Enum.GetValues<NotificationStatusTypes>()
|
|
.Distinct()
|
|
.SelectMany(status => new[]
|
|
{
|
|
new DocumentProcessingInfo
|
|
{
|
|
MemberNotificationInfos = new List<MemberNotificationInfo>
|
|
{
|
|
new()
|
|
{
|
|
NotificationStatusType = status
|
|
}
|
|
}
|
|
},
|
|
new DocumentProcessingInfo//double each status
|
|
{
|
|
MemberNotificationInfos = new List<MemberNotificationInfo>
|
|
{
|
|
new()
|
|
{
|
|
NotificationStatusType = status
|
|
}
|
|
}
|
|
}
|
|
})
|
|
.Concat(new[]
|
|
{
|
|
new DocumentProcessingInfo
|
|
{
|
|
MemberNotificationInfos = null
|
|
}
|
|
})
|
|
.AsQueryable();
|
|
} |