Added tests

This commit is contained in:
2026-05-29 13:49:44 +02:00
parent 0d5a6df27b
commit 51dd877a44
29 changed files with 2212 additions and 6 deletions
@@ -0,0 +1,83 @@
using FluentAssertions;
using Musify.Application.Tests.Infrastructure;
using Musify.Application.Tracks.Handlers;
using Musify.Application.Tracks.Queries;
using Musify.Domain.Entities;
using Xunit;
namespace Musify.Application.Tests.Handlers;
public sealed class GetTracksByUserIdQueryHandlerTests
{
private static async Task SeedTrackForUserAsync(SqliteTestContext ctx, Guid userId, string title, DateTime created)
{
var track = TestData.Track(title: title);
track.CreatedDate = created;
ctx.Database.Tracks.Add(track);
ctx.Database.UserHasTracks.Add(new UserHasTrack { UserId = userId, TrackId = track.Id });
await ctx.Database.SaveChangesAsync(CancellationToken.None);
}
[Fact]
public async Task Returns_only_tracks_owned_by_the_user_ordered_by_created_date()
{
await using var ctx = new SqliteTestContext();
var userId = Guid.NewGuid();
var otherUser = Guid.NewGuid();
await SeedTrackForUserAsync(ctx, userId, "Beta", new DateTime(2026, 1, 2, 0, 0, 0, DateTimeKind.Utc));
await SeedTrackForUserAsync(ctx, userId, "Alpha", new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc));
await SeedTrackForUserAsync(ctx, otherUser, "Gamma", new DateTime(2026, 1, 3, 0, 0, 0, DateTimeKind.Utc));
var sut = new GetTracksByUserIdQueryHandler(ctx.Database);
var result = await sut.Handle(new GetTracksByUserIdQuery(userId), CancellationToken.None);
result.IsSuccess.Should().BeTrue();
result.Value.TotalItemCount.Should().Be(2);
result.Value.Items.Select(t => t.Title).Should().Equal("Alpha", "Beta");
}
[Fact]
public async Task Filters_by_normalized_name_contains()
{
await using var ctx = new SqliteTestContext();
var userId = Guid.NewGuid();
await SeedTrackForUserAsync(ctx, userId, "Summer Hit", DateTime.UtcNow);
await SeedTrackForUserAsync(ctx, userId, "Winter Song", DateTime.UtcNow);
var sut = new GetTracksByUserIdQueryHandler(ctx.Database);
var result = await sut.Handle(new GetTracksByUserIdQuery(userId, Name: "summer"), CancellationToken.None);
result.Value.TotalItemCount.Should().Be(1);
result.Value.Items.Single().Title.Should().Be("Summer Hit");
}
[Fact]
public async Task Normalizes_invalid_paging_arguments_to_defaults()
{
await using var ctx = new SqliteTestContext();
var userId = Guid.NewGuid();
for (var i = 0; i < 3; i++)
await SeedTrackForUserAsync(ctx, userId, $"Track {i}", DateTime.UtcNow.AddSeconds(i));
var sut = new GetTracksByUserIdQueryHandler(ctx.Database);
var result = await sut.Handle(
new GetTracksByUserIdQuery(userId, PageNumber: 0, PageSize: -5), CancellationToken.None);
result.Value.PageNumber.Should().Be(1);
result.Value.PageSize.Should().Be(10);
result.Value.TotalItemCount.Should().Be(3);
}
[Fact]
public async Task Returns_empty_page_when_user_has_no_tracks()
{
await using var ctx = new SqliteTestContext();
var sut = new GetTracksByUserIdQueryHandler(ctx.Database);
var result = await sut.Handle(new GetTracksByUserIdQuery(Guid.NewGuid()), CancellationToken.None);
result.IsSuccess.Should().BeTrue();
result.Value.TotalItemCount.Should().Be(0);
result.Value.Items.Should().BeEmpty();
}
}