using JSMR.Application.Common.Search; using JSMR.Application.Creators.Queries.Search.Contracts; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Data.Repositories.Creators; using JSMR.Tests.Fixtures; using Shouldly; namespace JSMR.Tests.Integration; public class CreatorSearchProviderTests(CreatorSearchProviderFixture2 fixture) : IClassFixture { [Fact] public async Task Filter_None_Sort_Name_Ascending() { //await using AppDbContext context = fixture.CreateDbContext(); AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() { SortOptions = [new(CreatorSortField.Name, Application.Common.Search.SortDirection.Ascending)] }; var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); result.Items[0].Name.ShouldBe("Jane Doe"); result.Items[2].Name.ShouldBe("John Smith"); } [Fact] public async Task Filter_None_Sort_Name_Descending() { //await using AppDbContext context = fixture.CreateDbContext(); AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() { SortOptions = [new(CreatorSortField.Name, Application.Common.Search.SortDirection.Descending)] }; var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); result.Items[0].Name.ShouldBe("John Smith"); result.Items[2].Name.ShouldBe("Jane Doe"); } [Fact] public async Task Filter_None_Sort_Favorite_Descending() { //await using AppDbContext context = fixture.CreateDbContext(); AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() { SortOptions = [new(CreatorSortField.Favorite, Application.Common.Search.SortDirection.Ascending)] }; var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items[0].Name.ShouldBe("John Doe"); } [Fact] public async Task Filter_None_Sort_Blacklisted_Descending() { //await using AppDbContext context = fixture.CreateDbContext(); AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() { SortOptions = [new(CreatorSortField.Blacklisted, Application.Common.Search.SortDirection.Ascending)] }; var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items[0].Name.ShouldBe("Jane Doe"); } [Fact] public async Task Filter_By_Name_Creator_Name() { //await using AppDbContext context = fixture.CreateDbContext(); AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() { Criteria = new() { Name = "Jane" } }; var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); // Assert result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); result.Items.ShouldContain(creatorView => creatorView.Name == "Jane Doe"); } }