Sieve/SieveUnitTests/Mapper.cs

104 lines
3.2 KiB
C#
Raw Permalink Normal View History

2019-11-17 00:15:07 +01:00
using System.Collections.Generic;
using System.Linq;
using Sieve.Exceptions;
2018-02-10 06:37:04 +01:00
using Sieve.Models;
using Sieve.Services;
2018-02-10 06:37:04 +01:00
using SieveUnitTests.Entities;
using SieveUnitTests.Services;
using Xunit;
2018-02-10 06:37:04 +01:00
namespace SieveUnitTests
{
public class Mapper
{
2018-05-15 01:34:37 +02:00
private readonly IQueryable<Post> _posts;
2018-02-10 06:37:04 +01:00
public Mapper()
{
_posts = new List<Post>
{
new Post
{
2018-02-10 06:37:04 +01:00
Id = 1,
ThisHasNoAttributeButIsAccessible = "A",
ThisHasNoAttribute = "A",
OnlySortableViaFluentApi = 100
},
new Post
{
2018-02-10 06:37:04 +01:00
Id = 2,
ThisHasNoAttributeButIsAccessible = "B",
ThisHasNoAttribute = "B",
OnlySortableViaFluentApi = 50
},
new Post
{
2018-02-10 06:37:04 +01:00
Id = 3,
ThisHasNoAttributeButIsAccessible = "C",
ThisHasNoAttribute = "C",
OnlySortableViaFluentApi = 0
},
}.AsQueryable();
}
2018-05-15 01:34:37 +02:00
/// <summary>
/// Processors with the same mappings but configured via a different method.
/// </summary>
/// <returns></returns>
public static IEnumerable<object[]> GetProcessors()
{
yield return new object[] {
new ApplicationSieveProcessor(
new SieveOptionsAccessor(),
new SieveCustomSortMethods(),
new SieveCustomFilterMethods())};
yield return new object[] {
new ModularConfigurationSieveProcessor(
new SieveOptionsAccessor(),
new SieveCustomSortMethods(),
new SieveCustomFilterMethods())};
yield return new object[] {
new ModularConfigurationWithScanSieveProcessor(
new SieveOptionsAccessor(),
new SieveCustomSortMethods(),
new SieveCustomFilterMethods())};
}
[Theory]
[MemberData(nameof(GetProcessors))]
public void MapperWorks(ISieveProcessor processor)
2018-02-10 06:37:04 +01:00
{
var model = new SieveModel
2018-02-10 06:37:04 +01:00
{
Filters = "shortname@=A",
};
var result = processor.Apply(model, _posts);
2018-02-10 06:37:04 +01:00
Assert.Equal("A", result.First().ThisHasNoAttributeButIsAccessible);
2018-02-10 06:37:04 +01:00
Assert.True(result.Count() == 1);
2018-02-10 06:37:04 +01:00
}
[Theory]
[MemberData(nameof(GetProcessors))]
public void MapperSortOnlyWorks(ISieveProcessor processor)
2018-02-10 06:37:04 +01:00
{
var model = new SieveModel
2018-02-10 06:37:04 +01:00
{
Filters = "OnlySortableViaFluentApi@=50",
Sorts = "OnlySortableViaFluentApi"
};
var result = processor.Apply(model, _posts, applyFiltering: false, applyPagination: false);
2018-02-13 23:43:33 +01:00
Assert.Throws<SieveMethodNotFoundException>(() => processor.Apply(model, _posts));
2018-02-10 06:37:04 +01:00
Assert.Equal(3, result.First().Id);
2018-02-10 06:37:04 +01:00
Assert.True(result.Count() == 3);
2018-02-10 06:37:04 +01:00
}
}
}