Skip to content

refactor(tests): more idiomatic Fake methods and result assertions #206

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Dotnet.Samples.AspNetCore.WebApi/Data/PlayerData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,167 +5,167 @@
namespace Dotnet.Samples.AspNetCore.WebApi.Data;

public static class PlayerData
{
public static List<Player> CreateStarting11()
public static List<Player> MakeStarting11()
{
return
[
new()
{
Id = 1,
FirstName = "Damián",
MiddleName = "Emiliano",
LastName = "Martínez",
DateOfBirth = new DateTime(1992, 9, 1, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 23,
Position = Position.Goalkeeper.Text,
AbbrPosition = Position.Goalkeeper.Abbr,
Team = "Aston Villa FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 2,
FirstName = "Nahuel",
LastName = "Molina",
DateOfBirth = new DateTime(1998, 4, 5, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 26,
Position = Position.RightBack.Text,
AbbrPosition = Position.RightBack.Abbr,
Team = "Altético Madrid",
League = "La Liga",
Starting11 = true,
},
new()
{
Id = 3,
FirstName = "Cristian",
MiddleName = "Gabriel",
LastName = "Romero",
DateOfBirth = new DateTime(1998, 4, 26, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 13,
Position = Position.CentreBack.Text,
AbbrPosition = Position.CentreBack.Abbr,
Team = "Tottenham Hotspur",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 4,
FirstName = "Nicolás",
MiddleName = "Hernán Gonzalo",
LastName = "Otamendi",
DateOfBirth = new DateTime(1988, 2, 11, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 19,
Position = Position.CentreBack.Text,
AbbrPosition = Position.CentreBack.Abbr,
Team = "SL Benfica",
League = "Liga Portugal",
Starting11 = true,
},
new()
{
Id = 5,
FirstName = "Nicolás",
MiddleName = "Alejandro",
LastName = "Tagliafico",
DateOfBirth = new DateTime(1992, 8, 30, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 3,
Position = Position.LeftBack.Text,
AbbrPosition = Position.LeftBack.Abbr,
Team = "Olympique Lyon",
League = "Ligue 1",
Starting11 = true,
},
new()
{
Id = 6,
FirstName = "Ángel",
MiddleName = "Fabián",
LastName = "Di María",
DateOfBirth = new DateTime(1988, 2, 13, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 11,
Position = Position.RightWinger.Text,
AbbrPosition = Position.RightWinger.Abbr,
Team = "SL Benfica",
League = "Liga Portugal",
Starting11 = true,
},
new()
{
Id = 7,
FirstName = "Rodrigo",
MiddleName = "Javier",
LastName = "de Paul",
DateOfBirth = new DateTime(1994, 5, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 7,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Altético Madrid",
League = "La Liga",
Starting11 = true,
},
new()
{
Id = 8,
FirstName = "Enzo",
MiddleName = "Jeremías",
LastName = "Fernández",
DateOfBirth = new DateTime(2001, 1, 16, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 24,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Chelsea FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 9,
FirstName = "Alexis",
LastName = "Mac Allister",
DateOfBirth = new DateTime(1998, 12, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 20,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Liverpool FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 10,
FirstName = "Lionel",
MiddleName = "Andrés",
LastName = "Messi",
DateOfBirth = new DateTime(1987, 6, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 10,
Position = Position.RightWinger.Text,
AbbrPosition = Position.RightWinger.Abbr,
Team = "Inter Miami CF",
League = "Major League Soccer",
Starting11 = true,
},
new()
{
Id = 11,
FirstName = "Julián",
LastName = "Álvarez",
DateOfBirth = new DateTime(2000, 1, 30, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 9,
Position = Position.CentreForward.Text,
AbbrPosition = Position.CentreForward.Abbr,
Team = "Manchester City",
League = "Premier League",
Starting11 = true,
}
];
}

/// <summary>
/// The purpose of this method is to demonstrate the capabilities of

Check warning on line 168 in src/Dotnet.Samples.AspNetCore.WebApi/Data/PlayerData.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 160 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:14
/// System.Text.Json.JsonSerializer
/// https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/deserialization
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static async Task SeedDbContextAsync(this IApplicationBuilder app)

if (!await dbContext.Players.AnyAsync())
{
await dbContext.Players.AddRangeAsync(PlayerData.CreateStarting11());
await dbContext.Players.AddRangeAsync(PlayerData.MakeStarting11());
await dbContext.SaveChangesAsync();
logger.LogInformation("Successfully seeded database with initial data.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CancellationToken cancellationToken
{
if (!await dbContext.Players.AnyAsync(cancellationToken))
{
await dbContext.Players.AddRangeAsync(PlayerData.CreateStarting11(), cancellationToken);
await dbContext.Players.AddRangeAsync(PlayerData.MakeStarting11(), cancellationToken);
await dbContext.SaveChangesAsync(cancellationToken);
}
}
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@
public async Task GivenCreateAsync_WhenRepositoryAddAsync_ThenAddsPlayerToRepositoryAndRemovesCache()
{
// Arrange
var response = PlayerFakes.CreateResponseModelForOneExistingById(9);
var request = PlayerFakes.MakeRequestModelForCreate();
var response = PlayerFakes.MakeResponseModelForCreate();
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
mapper
.Setup(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<PlayerRequestModel>()))
.Returns(response);
mapper.Setup(mapper => mapper.Map<PlayerResponseModel>(request)).Returns(response);

var service = new PlayerService(
repository.Object,
Expand All @@ -39,7 +38,7 @@
);

// Act
await service.CreateAsync(It.IsAny<PlayerRequestModel>());
await service.CreateAsync(request);

// Assert
repository.Verify(repository => repository.AddAsync(It.IsAny<Player>()), Times.Once);
Expand All @@ -56,28 +55,26 @@

[Fact]
[Trait("Category", "Unit")]
public async Task GivenRetrieveAsync_WhenRepositoryGetAllAsyncReturnsPlayers_ThenCacheCreateEntryAndResultShouldBeListOfPlayers()
{
// Arrange
var players = PlayerFakes.GetStarting11();
var response = PlayerFakes.CreateStarting11ResponseModels();
var value = It.IsAny<object>();
var players = PlayerFakes.MakeStarting11();
var response = PlayerFakes.MakeResponseModelsForRetrieve();
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository.Setup(repository => repository.GetAllAsync()).ReturnsAsync(players);
mapper
.Setup(mapper => mapper.Map<List<PlayerResponseModel>>(It.IsAny<List<Player>>()))
.Returns(response);
var value = It.IsAny<object>();
mapper.Setup(mapper => mapper.Map<List<PlayerResponseModel>>(players)).Returns(response);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var result = await service.RetrieveAsync();

Check warning on line 77 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 19 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:91
// Assert
repository.Verify(repository => repository.GetAllAsync(), Times.Once);
memoryCache.Verify(cache => cache.TryGetValue(It.IsAny<object>(), out value), Times.Once);
Expand All @@ -91,28 +88,26 @@

[Fact]
[Trait("Category", "Unit")]
public async Task GivenRetrieveAsync_WhenExecutedForTheSecondTime_ThenSecondExecutionTimeShouldBeLessThanFirst()
{
// Arrange
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.GetAllAsync())
.ReturnsAsync(PlayerFakes.GetStarting11());
mapper
.Setup(mapper => mapper.Map<List<PlayerResponseModel>>(It.IsAny<List<Player>>()))
.Returns(PlayerFakes.CreateStarting11ResponseModels());
var value = It.IsAny<object>();
var players = PlayerFakes.MakeStarting11();
var response = PlayerFakes.MakeResponseModelsForRetrieve();
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository.Setup(repository => repository.GetAllAsync()).ReturnsAsync(players);
mapper.Setup(mapper => mapper.Map<List<PlayerResponseModel>>(players)).Returns(response);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var first = await ExecutionTimeAsync(() => service.RetrieveAsync());
var second = await ExecutionTimeAsync(() => service.RetrieveAsync());

Check warning on line 110 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 19 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:58

// Assert
memoryCache.Verify(
Expand All @@ -133,141 +128,134 @@
public async Task GivenRetrieveByIdAsync_WhenRepositoryFindByIdAsyncReturnsNull_TheResultShouldBeNull()
{
// Arrange
var id = 999;
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindByIdAsync(It.IsAny<long>()))
.ReturnsAsync((Player?)null);
repository.Setup(repository => repository.FindByIdAsync(id)).ReturnsAsync(null as Player);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var result = await service.RetrieveByIdAsync(It.IsAny<long>());
var result = await service.RetrieveByIdAsync(id);

// Assert
repository.Verify(repository => repository.FindByIdAsync(It.IsAny<long>()), Times.Once);
mapper.Verify(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()), Times.Never);
result.Should().BeNull();

Check warning on line 148 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 15 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:161
}

[Fact]
[Trait("Category", "Unit")]
public async Task GivenRetrieveByIdAsync_WhenRepositoryFindByIdAsyncReturnsPlayer_TheResultShouldBePlayer()
{
// Arrange
var id = 9;
var player = PlayerFakes.GetOneExistingById(id);
var response = PlayerFakes.CreateResponseModelForOneExistingById(id);
var id = 1;

Check warning on line 156 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 10 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:203
var player = PlayerFakes.MakeFromStarting11ById(id);
var response = PlayerFakes.MakeResponseModelForRetrieve(id);
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindByIdAsync(It.IsAny<long>()))
.ReturnsAsync(player);
mapper
.Setup(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()))
.Returns(response);
repository.Setup(repository => repository.FindByIdAsync(id)).ReturnsAsync(player);
mapper.Setup(mapper => mapper.Map<PlayerResponseModel>(player)).Returns(response);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var result = await service.RetrieveByIdAsync(It.IsAny<long>());
var result = await service.RetrieveByIdAsync(id);

// Assert

Check warning on line 173 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 13 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:221
repository.Verify(repository => repository.FindByIdAsync(It.IsAny<long>()), Times.Once);
mapper.Verify(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()), Times.Once);
result.Should().BeOfType<PlayerResponseModel>();

Check warning on line 176 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 15 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:133
result.Should().BeEquivalentTo(response);
}

[Fact]
[Trait("Category", "Unit")]
public async Task GivenRetrieveBySquadNumberAsync_WhenRepositoryFindBySquadNumberAsyncReturnsNull_ThenResultShouldBeNull()
{
// Arrange
var squadNumber = 999;

Check warning on line 185 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 11 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:237
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindBySquadNumberAsync(It.IsAny<int>()))
.ReturnsAsync((Player?)null);
.Setup(repository => repository.FindBySquadNumberAsync(squadNumber))
.ReturnsAsync(null as Player);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var result = await service.RetrieveBySquadNumberAsync(It.IsAny<int>());
var result = await service.RetrieveBySquadNumberAsync(squadNumber);

// Assert
repository.Verify(
repository => repository.FindBySquadNumberAsync(It.IsAny<int>()),
Times.Once
);
mapper.Verify(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()), Times.Never);
result.Should().BeNull();

Check warning on line 207 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 18 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:223
}

[Fact]
[Trait("Category", "Unit")]
public async Task GivenRetrieveBySquadNumberAsync_WhenRepositoryFindBySquadNumberAsyncReturnsPlayer_ThenResultShouldBePlayer()
{

Check warning on line 213 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 10 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:146
// Arrange
var id = 9;
var player = PlayerFakes.GetOneExistingById(id);
var response = PlayerFakes.CreateResponseModelForOneExistingById(id);
var id = 1;
var player = PlayerFakes.MakeFromStarting11ById(id);
var squadNumber = player.SquadNumber;
var response = PlayerFakes.MakeResponseModelForRetrieve(id);
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindBySquadNumberAsync(It.IsAny<int>()))
.Setup(repository => repository.FindBySquadNumberAsync(squadNumber))
.ReturnsAsync(player);
mapper
.Setup(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()))
.Returns(response);
mapper.Setup(mapper => mapper.Map<PlayerResponseModel>(player)).Returns(response);

var service = new PlayerService(
repository.Object,
logger.Object,
memoryCache.Object,
mapper.Object
);

// Act
var result = await service.RetrieveBySquadNumberAsync(It.IsAny<int>());
var result = await service.RetrieveBySquadNumberAsync(squadNumber);

Check warning on line 234 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 13 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:160
// Assert
repository.Verify(
repository => repository.FindBySquadNumberAsync(It.IsAny<int>()),
Times.Once
);
mapper.Verify(mapper => mapper.Map<PlayerResponseModel>(It.IsAny<Player>()), Times.Once);
result.Should().BeOfType<PlayerResponseModel>();

Check warning on line 241 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 18 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:189
result.Should().BeEquivalentTo(response);
}

/* -------------------------------------------------------------------------
* Update
* ---------------------------------------------------------------------- */

Check warning on line 248 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 11 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Unit/PlayerServiceTests.cs:174
[Fact]
[Trait("Category", "Unit")]
public async Task GivenUpdateAsync_WhenRepositoryFindByIdAsyncReturnsPlayer_ThenRepositoryUpdateAsyncAndCacheRemove()
{
// Arrange
var id = 9;
var player = PlayerFakes.GetOneExistingById(id);
var request = PlayerFakes.CreateRequestModelForOneExistingById(id);
var id = 1;
var player = PlayerFakes.MakeFromStarting11ById(id);
var request = PlayerFakes.MakeRequestModelForUpdate(id);
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindByIdAsync(It.IsAny<long>()))
.ReturnsAsync(player);
repository.Setup(repository => repository.FindByIdAsync(id)).ReturnsAsync(player);

var service = new PlayerService(
repository.Object,
Expand Down Expand Up @@ -298,8 +286,8 @@
public async Task GivenDeleteAsync_WhenRepositoryFindByIdAsyncReturnsPlayer_ThenRepositoryDeleteAsyncAndCacheRemove()
{
// Arrange
var id = 9;
var player = PlayerFakes.GetOneExistingById(id);
var id = 2;
var player = PlayerFakes.MakeFromStarting11ById(id);
var (repository, logger, memoryCache, mapper) = PlayerMocks.InitServiceMocks();
repository
.Setup(repository => repository.FindByIdAsync(It.IsAny<long>()))
Expand Down Expand Up @@ -330,20 +318,20 @@
stopwatch.Stop();

return stopwatch.ElapsedMilliseconds;
}

protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", null);
_disposed = true;
}
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ CREATE TABLE players (

public static void Seed(this PlayerDbContext context)
{
context.Players.AddRange(PlayerFakes.GetStarting11());
context.Players.AddRange(PlayerFakes.MakeStarting11());
context.SaveChanges();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,183 +11,175 @@
/// to avoid external dependencies.
/// </summary>
public static class PlayerFakes
{
public static List<Player> GetStarting11()
public static List<Player> MakeStarting11()
{
return
[
new()
{
Id = 1,
FirstName = "Damián",
MiddleName = "Emiliano",
LastName = "Martínez",
DateOfBirth = new DateTime(1992, 9, 1, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 23,
Position = Position.Goalkeeper.Text,
AbbrPosition = Position.Goalkeeper.Abbr,
Team = "Aston Villa FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 2,
FirstName = "Nahuel",
LastName = "Molina",
DateOfBirth = new DateTime(1998, 4, 5, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 26,
Position = Position.RightBack.Text,
AbbrPosition = Position.RightBack.Abbr,
Team = "Altético Madrid",
League = "La Liga",
Starting11 = true,
},
new()
{
Id = 3,
FirstName = "Cristian",
MiddleName = "Gabriel",
LastName = "Romero",
DateOfBirth = new DateTime(1998, 4, 26, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 13,
Position = Position.CentreBack.Text,
AbbrPosition = Position.CentreBack.Abbr,
Team = "Tottenham Hotspur",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 4,
FirstName = "Nicolás",
MiddleName = "Hernán Gonzalo",
LastName = "Otamendi",
DateOfBirth = new DateTime(1988, 2, 11, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 19,
Position = Position.CentreBack.Text,
AbbrPosition = Position.CentreBack.Abbr,
Team = "SL Benfica",
League = "Liga Portugal",
Starting11 = true,
},
new()
{
Id = 5,
FirstName = "Nicolás",
MiddleName = "Alejandro",
LastName = "Tagliafico",
DateOfBirth = new DateTime(1992, 8, 30, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 3,
Position = Position.LeftBack.Text,
AbbrPosition = Position.LeftBack.Abbr,
Team = "Olympique Lyon",
League = "Ligue 1",
Starting11 = true,
},
new()
{
Id = 6,
FirstName = "Ángel",
MiddleName = "Fabián",
LastName = "Di María",
DateOfBirth = new DateTime(1988, 2, 13, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 11,
Position = Position.RightWinger.Text,
AbbrPosition = Position.RightWinger.Abbr,
Team = "SL Benfica",
League = "Liga Portugal",
Starting11 = true,
},
new()
{
Id = 7,
FirstName = "Rodrigo",
MiddleName = "Javier",
LastName = "de Paul",
DateOfBirth = new DateTime(1994, 5, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 7,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Altético Madrid",
League = "La Liga",
Starting11 = true,
},
new()
{
Id = 8,
FirstName = "Enzo",
MiddleName = "Jeremías",
LastName = "Fernández",
DateOfBirth = new DateTime(2001, 1, 16, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 24,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Chelsea FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 9,
FirstName = "Alexis",
LastName = "Mac Allister",
DateOfBirth = new DateTime(1998, 12, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 20,
Position = Position.CentralMidfield.Text,
AbbrPosition = Position.CentralMidfield.Abbr,
Team = "Liverpool FC",
League = "Premier League",
Starting11 = true,
},
new()
{
Id = 10,
FirstName = "Lionel",
MiddleName = "Andrés",
LastName = "Messi",
DateOfBirth = new DateTime(1987, 6, 23, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 10,
Position = Position.RightWinger.Text,
AbbrPosition = Position.RightWinger.Abbr,
Team = "Inter Miami CF",
League = "Major League Soccer",
Starting11 = true,
},
new()
{
Id = 11,
FirstName = "Julián",
LastName = "Álvarez",
DateOfBirth = new DateTime(2000, 1, 30, 0, 0, 0, DateTimeKind.Utc),
SquadNumber = 9,
Position = Position.CentreForward.Text,
AbbrPosition = Position.CentreForward.Abbr,
Team = "Manchester City",
League = "Premier League",
Starting11 = true,
}
];
}

public static List<PlayerResponseModel> CreateStarting11ResponseModels() =>
[
.. GetStarting11()
.Select(player => new PlayerResponseModel
{
Id = player.Id,
FullName =
$"{player.FirstName} {(string.IsNullOrWhiteSpace(player.MiddleName) ? "" : player.MiddleName + " ")}{player.LastName}".Trim(),
Birth = $"{player.DateOfBirth:MMMM d, yyyy}",
Dorsal = player.SquadNumber,
Position = player.Position,
Club = player.Team,
League = player.League,
Starting11 = player.Starting11 ? "Yes" : "No"
})
];
public static Player MakeFromStarting11ById(long id)
{

Check warning on line 174 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 160 lines is too similar to src/Dotnet.Samples.AspNetCore.WebApi/Data/PlayerData.cs:8
var player =
MakeStarting11().SingleOrDefault(player => player.Id == id)
?? throw new ArgumentNullException($"Player with ID {id} not found.");

return player;
}

public static Player CreateOneNew()
public static Player MakeNew()
{
return new()
{
Expand All @@ -205,88 +197,118 @@
};
}

public static PlayerRequestModel CreateRequestModelForOneNew()
/* -------------------------------------------------------------------------
* Create
* ---------------------------------------------------------------------- */

public static PlayerRequestModel MakeRequestModelForCreate()
{
var player = CreateOneNew();
var player = MakeNew();

return new()
return new PlayerRequestModel()
{
Id = player.Id,
FirstName = player.FirstName,
MiddleName = player.MiddleName,
LastName = player.LastName,
DateOfBirth = player.DateOfBirth,
SquadNumber = player.SquadNumber,
AbbrPosition = player.AbbrPosition,
Team = player.Team,
League = player.League
};
}

public static PlayerResponseModel CreateResponseModelForOneNew()
public static PlayerResponseModel MakeResponseModelForCreate()
{

Check warning on line 223 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 14 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:251
var player = CreateOneNew();
var player = MakeNew();

return new PlayerResponseModel
{
Id = player.Id,
FullName =
$"{player.FirstName} {(string.IsNullOrWhiteSpace(player.MiddleName) ? "" : player.MiddleName + " ")}{player.LastName}".Trim(),
Birth = $"{player.DateOfBirth:MMMM d, yyyy}",
Dorsal = player.SquadNumber,
Position = player.Position,
Club = player.Team,
League = player.League,
Starting11 = player.Starting11 ? "Yes" : "No"
};
}

Check warning on line 238 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 12 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:287

public static Player GetOneExistingById(long id)
{
var player =
GetStarting11().SingleOrDefault(player => player.Id == id)
?? throw new ArgumentNullException($"Player with ID {id} not found.");

return player;
}
/* -------------------------------------------------------------------------
* Retrieve

Check warning on line 241 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 17 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:268
* ---------------------------------------------------------------------- */

public static PlayerRequestModel CreateRequestModelForOneExistingById(long id)
public static PlayerRequestModel MakeRequestModelForRetrieve(long id)
{
var player =
GetStarting11().SingleOrDefault(player => player.Id == id)
MakeStarting11().SingleOrDefault(player => player.Id == id)
?? throw new ArgumentNullException($"Player with ID {id} not found.");

return new PlayerRequestModel
{
Id = player.Id,
FirstName = player.FirstName,
MiddleName = player.MiddleName,
LastName = player.LastName,
DateOfBirth = player.DateOfBirth,
SquadNumber = player.SquadNumber,
AbbrPosition = player.AbbrPosition,
Team = player.Team,
League = player.League
};
}

public static PlayerResponseModel CreateResponseModelForOneExistingById(long id)
public static PlayerResponseModel MakeResponseModelForRetrieve(long id)
{

Check warning on line 265 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 14 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:209
var player =
GetStarting11().SingleOrDefault(player => player.Id == id)
MakeStarting11().SingleOrDefault(player => player.Id == id)
?? throw new ArgumentNullException($"Player with ID {id} not found.");

return new PlayerResponseModel
{
Id = player.Id,
FullName =
$"{player.FirstName} {(string.IsNullOrWhiteSpace(player.MiddleName) ? "" : player.MiddleName + " ")}{player.LastName}".Trim(),
Birth = $"{player.DateOfBirth:MMMM d, yyyy}",
Dorsal = player.SquadNumber,
Position = player.Position,
Club = player.Team,
League = player.League,
Starting11 = player.Starting11 ? "Yes" : "No"
};
}

public static List<PlayerResponseModel> MakeResponseModelsForRetrieve() =>
[

Check warning on line 285 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 17 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:224
.. MakeStarting11()
.Select(player => new PlayerResponseModel
{
Id = player.Id,
FullName =
$"{player.FirstName} {(string.IsNullOrWhiteSpace(player.MiddleName) ? "" : player.MiddleName + " ")}{player.LastName}".Trim(),
Birth = $"{player.DateOfBirth:MMMM d, yyyy}",
Dorsal = player.SquadNumber,
Position = player.Position,
Club = player.Team,
League = player.League,
Starting11 = player.Starting11 ? "Yes" : "No"
})
];

Check warning on line 299 in test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs

View check run for this annotation

Codeac.io / Codeac Code Quality

CodeDuplication

This block of 12 lines is too similar to test/Dotnet.Samples.AspNetCore.WebApi.Tests/Utilities/PlayerFakes.cs:226

/* -------------------------------------------------------------------------
* Update
* ---------------------------------------------------------------------- */

public static PlayerRequestModel MakeRequestModelForUpdate(long id)
{
return MakeRequestModelForRetrieve(id);
}

public static PlayerResponseModel MakeResponseModelForUpdate(long id)
{
return MakeResponseModelForRetrieve(id);
}
}
Loading