using AutoMapper; using GoodWood.Application.DTOs; using GoodWood.Domain.Entities; using GoodWood.Domain.Interfaces; using Moq; namespace GoodWood.Tests.Common; /// /// Extensions for setting up common mocks. /// public static class TestMockHelpers { /// /// Sets up IClubRepository mock with standard behavior. /// public static Mock SetupGetAllAsync( this Mock mock, List clubs) { mock.Setup(r => r.GetAllAsync(It.IsAny())) .ReturnsAsync(clubs); return mock; } /// /// Sets up IClubRepository mock GetByIdAsync. /// public static Mock SetupGetByIdAsync( this Mock mock, Club? club) { mock.Setup(r => r.GetByIdAsync(It.IsAny(), It.IsAny())) .ReturnsAsync(club); return mock; } /// /// Sets up IClubRepository mock GetByIdAsync for specific ID. /// public static Mock SetupGetByIdAsync( this Mock mock, Guid id, Club? club) { mock.Setup(r => r.GetByIdAsync(id, It.IsAny())) .ReturnsAsync(club); return mock; } /// /// Sets up IClubRepository mock AddAsync. /// public static Mock SetupAddAsync( this Mock mock, Func? transform = null) { mock.Setup(r => r.AddAsync(It.IsAny(), It.IsAny())) .ReturnsAsync((Club c, CancellationToken _) => transform?.Invoke(c) ?? c); return mock; } /// /// Sets up IClubRepository mock UpdateAsync. /// public static Mock SetupUpdateAsync( this Mock mock) { mock.Setup(r => r.UpdateAsync(It.IsAny(), It.IsAny())) .ReturnsAsync((Club c, CancellationToken _) => c); return mock; } /// /// Sets up IClubRepository mock DeleteAsync. /// public static Mock SetupDeleteAsync( this Mock mock, bool result = true) { mock.Setup(r => r.DeleteAsync(It.IsAny(), It.IsAny())) .ReturnsAsync(result); return mock; } /// /// Creates a simple mapper mock that maps Club to ClubDto. /// public static Mock CreateClubMapperMock() { var mock = new Mock(); mock.Setup(m => m.Map(It.IsAny())) .Returns((Club c) => new ClubDto { Id = c.Id, Name = c.Name, ExpenseCalculation = c.ExpenseCalculation, CreatedAt = c.CreatedAt, ModifiedAt = c.ModifiedAt }); mock.Setup(m => m.Map>(It.IsAny>())) .Returns((List clubs) => clubs.Select(c => new ClubDto { Id = c.Id, Name = c.Name, ExpenseCalculation = c.ExpenseCalculation, CreatedAt = c.CreatedAt, ModifiedAt = c.ModifiedAt }).ToList()); return mock; } }