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;
}
}