247 lines
8.2 KiB
C#
247 lines
8.2 KiB
C#
using JSMR.Application.Circles.Contracts;
|
|
using JSMR.Application.Circles.Queries.Search;
|
|
using JSMR.Application.Common.Search;
|
|
using JSMR.Infrastructure.Data;
|
|
using JSMR.Infrastructure.Data.Repositories.Circles;
|
|
using JSMR.Tests.Fixtures;
|
|
using Shouldly;
|
|
|
|
namespace JSMR.Tests.Integration;
|
|
|
|
public class CircleSearchProviderTests(CircleSearchProviderFixture2 fixture) : IClassFixture<CircleSearchProviderFixture2>
|
|
{
|
|
[Fact]
|
|
public async Task Filter_None()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(4);
|
|
result.TotalItems.ShouldBe(4);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Status_Not_Blacklisted()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Status = Application.Circles.Queries.Search.CircleStatus.NotBlacklisted
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(3);
|
|
result.TotalItems.ShouldBe(3);
|
|
result.Items.ShouldNotContain(item => item.Blacklisted);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Status_Favorited()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Status = Application.Circles.Queries.Search.CircleStatus.Favorited
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(1);
|
|
result.TotalItems.ShouldBe(1);
|
|
result.Items.ShouldAllBe(item => item.Favorite);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Status_Blacklisted()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Status = Application.Circles.Queries.Search.CircleStatus.Blacklisted
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(1);
|
|
result.TotalItems.ShouldBe(1);
|
|
result.Items.ShouldAllBe(item => item.Blacklisted);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Status_Spam()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Status = Application.Circles.Queries.Search.CircleStatus.Spam
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(1);
|
|
result.TotalItems.ShouldBe(1);
|
|
result.Items.ShouldAllBe(item => item.Spam);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Name_Circle_Name()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Name = "Dreams"
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(2);
|
|
result.TotalItems.ShouldBe(2);
|
|
result.Items.ShouldAllBe(item => item.Name.Contains("Dreams", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Filter_By_Name_Circle_Id()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
Criteria = new()
|
|
{
|
|
Name = "003"
|
|
}
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(1);
|
|
result.TotalItems.ShouldBe(1);
|
|
result.Items.ShouldContain(item => item.MakerId.Contains("003", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Sort_By_Name_Descending()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
SortOptions = [new(CircleSortField.Name, Application.Common.Search.SortDirection.Descending)]
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(4);
|
|
result.TotalItems.ShouldBe(4);
|
|
result.Items[0].Name.ShouldBe("Sweet Dreams");
|
|
result.Items[1].Name.ShouldBe("Nightmare Fuel");
|
|
result.Items[2].Name.ShouldBe("Good Dreams");
|
|
result.Items[3].Name.ShouldBe("Garbage Studio");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Sort_By_Favorite_Ascending()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
SortOptions = [new(CircleSortField.Favorite, Application.Common.Search.SortDirection.Ascending)]
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(4);
|
|
result.TotalItems.ShouldBe(4);
|
|
result.Items[0].Name.ShouldBe("Sweet Dreams");
|
|
result.Items[1].Name.ShouldBe("Garbage Studio");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Sort_By_Blacklisted_Ascending()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
SortOptions = [new(CircleSortField.Blacklisted, Application.Common.Search.SortDirection.Ascending)]
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(4);
|
|
result.TotalItems.ShouldBe(4);
|
|
result.Items[0].Name.ShouldBe("Nightmare Fuel");
|
|
result.Items[1].Name.ShouldBe("Garbage Studio");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Sort_By_Spam_Ascending()
|
|
{
|
|
//await using AppDbContext context = fixture.CreateDbContext();
|
|
AppDbContext context = fixture.DbContext!;
|
|
CircleSearchProvider provider = new(context);
|
|
|
|
var options = new SearchOptions<CircleSearchCriteria, CircleSortField>()
|
|
{
|
|
SortOptions = [new(CircleSortField.Spam, Application.Common.Search.SortDirection.Ascending)]
|
|
};
|
|
|
|
var result = await provider.SearchAsync(options, CancellationToken.None);
|
|
|
|
result.Items.Length.ShouldBe(4);
|
|
result.TotalItems.ShouldBe(4);
|
|
result.Items[0].Name.ShouldBe("Garbage Studio");
|
|
result.Items[1].Name.ShouldBe("Good Dreams");
|
|
}
|
|
} |