Skip to content

Commit

Permalink
Add GetUser tests, add UserRepository, update GetUser method
Browse files Browse the repository at this point in the history
  • Loading branch information
iggy808 committed May 19, 2024
1 parent cb59dc5 commit 98b2f76
Show file tree
Hide file tree
Showing 16 changed files with 235 additions and 112 deletions.
22 changes: 8 additions & 14 deletions src/FocusAPI/Methods/User/GetUser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,19 @@
using FocusCore.Queries.User;
using FocusCore.Models;
using MediatR;
using FocusAPI.Data;
using FocusAPI.Helpers;
using FocusCore.Responses;
using FocusCore.Responses.User;
using Microsoft.EntityFrameworkCore;
using FocusAPI.Repositories;

namespace FocusAPI.Methods.User;
public class GetUser
{
public class Handler : IRequestHandler<GetUserQuery, MediatrResultWrapper<GetUserResponse>>
{
IFocusAPIContext _apiContext;
public Handler(IFocusAPIContext apiContext)
IUserRepository _userRepository;
public Handler(IUserRepository userRepository)
{
_apiContext = apiContext;
_userRepository = userRepository;
}

public async Task<MediatrResultWrapper<GetUserResponse>> Handle(
Expand Down Expand Up @@ -63,14 +61,10 @@ public async Task<MediatrResultWrapper<GetUserResponse>> Handle(
{
try
{
return await _apiContext.Users
.Where(u => u.Auth0Id == query.Auth0Id)
.Include(user => user.Islands)
.Include(user => user.Pets)
.Include(user => user.Decor)
.Include(user => user.Badges)
.Select(user => ProjectionHelper.ProjectToBaseUser(user))
.FirstOrDefaultAsync(cancellationToken);
return await _userRepository.GetBaseUserWithItemsByAuth0IdAsync(
auth0Id: query.Auth0Id,
cancellationToken: cancellationToken
);
}
catch (Exception e)
{
Expand Down
13 changes: 13 additions & 0 deletions src/FocusAPI/Repositories/IUserRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.Linq.Expressions;
using FocusAPI.Models;
using FocusCore.Models;

namespace FocusAPI.Repositories;
public interface IUserRepository
{
public Task<BaseUser?> GetBaseUserWithItemsByAuth0IdAsync(
string? auth0Id,
Expression<Func<User, bool>>[]? wherePredicates = null,
CancellationToken cancellationToken = default
);
}
40 changes: 40 additions & 0 deletions src/FocusAPI/Repositories/UserRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System.Linq.Expressions;
using FocusAPI.Data;
using FocusAPI.Helpers;
using FocusAPI.Models;
using FocusCore.Models;
using Microsoft.EntityFrameworkCore;

namespace FocusAPI.Repositories;
public class UserRepository : IUserRepository
{
private readonly FocusAPIContext _context;

public UserRepository(FocusAPIContext context)
{
_context = context;
}

public async Task<BaseUser?> GetBaseUserWithItemsByAuth0IdAsync(
string? auth0Id,
Expression<Func<User, bool>>[]? wherePredicates = null,
CancellationToken cancellationToken = default
)
{
IQueryable<User> query = _context.Users.Where(u => u.Auth0Id == auth0Id);

if (wherePredicates != null)
{
foreach (var wherePredicate in wherePredicates)
query = query.Where(wherePredicate);
}

query = query
.Include(user => user.Islands)
.Include(user => user.Pets)
.Include(user => user.Decor)
.Include(user => user.Badges);

return await query.Select(user => ProjectionHelper.ProjectToBaseUser(user)).FirstOrDefaultAsync(cancellationToken);
}
}
12 changes: 12 additions & 0 deletions test/FocusAPI.Tests/Fakers/BaseUserBadgeFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Bogus;
using FocusCore.Models;

namespace FocusAPI.Tests.Fakers;
internal class BaseUserBadgeFaker : Faker<BaseUserBadge>
{
internal BaseUserBadgeFaker(Guid? userId = null)
{
RuleFor(userBadge => userBadge.UserId, f => userId ??= f.Random.Guid());
RuleFor(userBadge => userBadge.BadgeId, f => f.Random.Guid());
}
}
12 changes: 12 additions & 0 deletions test/FocusAPI.Tests/Fakers/BaseUserDecorFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Bogus;
using FocusCore.Models;

namespace FocusAPI.Tests.Fakers;
internal class BaseUserDecorFaker : Faker<BaseUserDecor>
{
internal BaseUserDecorFaker(Guid? userId = null)
{
RuleFor(userDecor => userDecor.UserId, f => userId ??= f.Random.Guid());
RuleFor(userDecor => userDecor.DecorId, f => f.Random.Guid());
}
}
25 changes: 25 additions & 0 deletions test/FocusAPI.Tests/Fakers/BaseUserFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Bogus;
using FocusCore.Models;

namespace FocusAPI.Tests.Fakers;
internal class BaseUserFaker : Faker<BaseUser>
{
internal BaseUserFaker()
{
Guid userId = Guid.NewGuid();
RuleFor(user => user.Id, f => userId);
RuleFor(user => user.Auth0Id, f => f.Random.Word());

BaseUserPetFaker userPetFaker = new(userId);
RuleFor(user => user.Pets, f => userPetFaker.Generate(2));

BaseUserIslandFaker userIslandFaker = new(userId);
RuleFor(user => user.Islands, f => userIslandFaker.Generate(2));

BaseUserDecorFaker userDecorFaker = new(userId);
RuleFor(user => user.Decor, f => userDecorFaker.Generate(2));

BaseUserBadgeFaker userBadgeFaker = new(userId);
RuleFor(user => user.Badges, f => userBadgeFaker.Generate(2));
}
}
13 changes: 13 additions & 0 deletions test/FocusAPI.Tests/Fakers/BaseUserIslandFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Bogus;
using FocusAPI.Models;
using FocusCore.Models;

namespace FocusAPI.Tests.Fakers;
internal class BaseUserIslandFaker : Faker<BaseUserIsland>
{
internal BaseUserIslandFaker(Guid? userId = null)
{
RuleFor(userIsland => userIsland.UserId, f => userId ??= f.Random.Guid());
RuleFor(userIsland => userIsland.IslandId, f => f.Random.Guid());
}
}
12 changes: 12 additions & 0 deletions test/FocusAPI.Tests/Fakers/BaseUserPetFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Bogus;
using FocusCore.Models;

namespace FocusAPI.Tests.Fakers;
internal class BaseUserPetFaker : Faker<BaseUserPet>
{
internal BaseUserPetFaker(Guid? userId = null)
{
RuleFor(userPet => userPet.UserId, f => userId ??= f.Random.Guid());
RuleFor(userPet => userPet.PetId, f => f.Random.Guid());
}
}
10 changes: 0 additions & 10 deletions test/FocusAPI.Tests/Fakers/UserBadgeFaker.cs

This file was deleted.

10 changes: 0 additions & 10 deletions test/FocusAPI.Tests/Fakers/UserDecorFaker.cs

This file was deleted.

10 changes: 0 additions & 10 deletions test/FocusAPI.Tests/Fakers/UserFaker.cs

This file was deleted.

10 changes: 0 additions & 10 deletions test/FocusAPI.Tests/Fakers/UserIslandFaker.cs

This file was deleted.

10 changes: 0 additions & 10 deletions test/FocusAPI.Tests/Fakers/UserPetFaker.cs

This file was deleted.

4 changes: 3 additions & 1 deletion test/FocusAPI.Tests/Helpers/MockSetHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
using Microsoft.EntityFrameworkCore;
using Moq;

/* !! Potentially outdated / useless kek
namespace FocusAPI.Tests.Helpers
{
internal static class MockSetHelper
{
internal static void SetupEntities<T>(List<T> sourceList, Mock<TestAPIContext> context, Expression<Func<TestAPIContext, DbSet<T>>> setupExpression) where T : class
internal static void SetupEntities<T>(List<T> sourceList, Mock<FocusAPIContext> context, Expression<Func<FocusAPIContext, DbSet<T>>> setupExpression) where T : class
{
var queryable = sourceList.AsQueryable();
Expand All @@ -27,3 +28,4 @@ internal static void SetupEntities<T>(List<T> sourceList, Mock<TestAPIContext> c
}
}
}
*/
27 changes: 0 additions & 27 deletions test/FocusAPI.Tests/Helpers/TestAPIContext.cs

This file was deleted.

Loading

0 comments on commit 98b2f76

Please sign in to comment.