diff --git a/ArenaService.Shared/Dtos/CompletedArenaLeaderboardResponse.cs b/ArenaService.Shared/Dtos/CompletedArenaLeaderboardResponse.cs index 4646609..d84e99a 100644 --- a/ArenaService.Shared/Dtos/CompletedArenaLeaderboardResponse.cs +++ b/ArenaService.Shared/Dtos/CompletedArenaLeaderboardResponse.cs @@ -2,12 +2,6 @@ namespace ArenaService.Shared.Dtos; -public class CompletedArenaLeaderboardResponse -{ - public SimpleSeasonResponse CurrentSeason { get; set; } = new(); - public List CompletedSeasons { get; set; } = new(); -} - public class CompletedSeasonLeaderboardResponse { public SimpleSeasonResponse Season { get; set; } = new(); diff --git a/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs b/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs index 5e2221b..39de6b1 100644 --- a/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs +++ b/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs @@ -39,29 +39,20 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu { // Arrange var blockIndex = 1000000L; - var currentSeason = new Season + var season = new Season { - Id = 2, - SeasonGroupId = 2, - StartBlock = 800000, - EndBlock = 1200000, + Id = 1, + SeasonGroupId = 1, + StartBlock = 400000, + EndBlock = 800000, ArenaType = ArenaType.SEASON, }; - var currentRound = new Round + var round = new Round { Id = 1, RoundIndex = 1, - StartBlock = 800000, - EndBlock = 1200000, - }; - - var completedSeason = new Season - { - Id = 1, - SeasonGroupId = 1, StartBlock = 400000, EndBlock = 800000, - ArenaType = ArenaType.SEASON, }; var user = new User @@ -86,14 +77,10 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu _mockSeasonService .Setup(x => x.GetSeasonAndRoundByBlock(blockIndex)) - .ReturnsAsync((currentSeason, currentRound)); - - _mockSeasonService - .Setup(x => x.GetCompletedSeasonsBeforeBlock(blockIndex)) - .ReturnsAsync(new List { completedSeason }); + .ReturnsAsync((season, round)); _mockLeaderboardRepo - .Setup(x => x.GetLeaderboardAsync(completedSeason.Id)) + .Setup(x => x.GetLeaderboardAsync(season.Id)) .ReturnsAsync(leaderboardData); // Act @@ -101,17 +88,12 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu // Assert var okResult = Assert.IsType(result.Result); - var response = Assert.IsType(okResult.Value); - - Assert.NotNull(response.CurrentSeason); - Assert.Equal(currentSeason.Id, response.CurrentSeason.Id); - Assert.Single(response.CompletedSeasons); - - var completedSeasonResponse = response.CompletedSeasons[0]; - Assert.Equal(completedSeason.Id, completedSeasonResponse.Season.Id); - Assert.Single(completedSeasonResponse.Leaderboard); - - var leaderboardEntry = completedSeasonResponse.Leaderboard[0]; + var response = Assert.IsType(okResult.Value); + + Assert.Equal(season.Id, response.Season.Id); + Assert.Single(response.Leaderboard); + + var leaderboardEntry = response.Leaderboard[0]; Assert.Equal(1, leaderboardEntry.Rank); Assert.Equal(100, leaderboardEntry.Score); Assert.Equal("0x1234567890123456789012345678901234567890", leaderboardEntry.AvatarAddress); @@ -123,44 +105,36 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu } [Fact] - public async Task GetCompletedArenaLeaderboard_WithNoCompletedSeasons_ReturnsEmptyList() + public async Task GetCompletedArenaLeaderboard_WithOngoingSeason_ReturnsBadRequest() { // Arrange - var blockIndex = 1000000L; - var currentSeason = new Season + var blockIndex = 600000L; + var season = new Season { Id = 1, SeasonGroupId = 1, StartBlock = 400000, - EndBlock = 1200000, + EndBlock = 800000, ArenaType = ArenaType.SEASON, }; - var currentRound = new Round + var round = new Round { Id = 1, RoundIndex = 1, StartBlock = 400000, - EndBlock = 1200000, + EndBlock = 800000, }; _mockSeasonService .Setup(x => x.GetSeasonAndRoundByBlock(blockIndex)) - .ReturnsAsync((currentSeason, currentRound)); - - _mockSeasonService - .Setup(x => x.GetCompletedSeasonsBeforeBlock(blockIndex)) - .ReturnsAsync(new List()); + .ReturnsAsync((season, round)); // Act var result = await _controller.GetCompletedArenaLeaderboard(blockIndex); // Assert - var okResult = Assert.IsType(result.Result); - var response = Assert.IsType(okResult.Value); - - Assert.NotNull(response.CurrentSeason); - Assert.Equal(currentSeason.Id, response.CurrentSeason.Id); - Assert.Empty(response.CompletedSeasons); + var badRequestResult = Assert.IsType(result.Result); + Assert.Equal("The requested block index corresponds to an ongoing season.", badRequestResult.Value); } [Fact] @@ -179,5 +153,6 @@ public async Task GetCompletedArenaLeaderboard_WithException_ReturnsBadRequest() // Assert var badRequestResult = Assert.IsType(result.Result); + Assert.Equal(errorMessage, badRequestResult.Value); } } diff --git a/ArenaService/Controllers/LeaderboardController.cs b/ArenaService/Controllers/LeaderboardController.cs index 3819a31..3fdda87 100644 --- a/ArenaService/Controllers/LeaderboardController.cs +++ b/ArenaService/Controllers/LeaderboardController.cs @@ -42,51 +42,25 @@ public async Task> GetRankingCount(int seasonId, int roundInde [SwaggerResponse( StatusCodes.Status200OK, "Completed Arena Leaderboard Response", - typeof(CompletedArenaLeaderboardResponse) + typeof(CompletedSeasonLeaderboardResponse) )] - public async Task> GetCompletedArenaLeaderboard( + public async Task> GetCompletedArenaLeaderboard( long blockIndex ) { - (Season Season, Round Round) currentSeasonInfo; try { - currentSeasonInfo = await _seasonService.GetSeasonAndRoundByBlock(blockIndex); - } - catch (Exception ex) - { - return BadRequest(ex.Message); - } - - var currentSeason = currentSeasonInfo.Season; - - var completedSeasons = await _seasonService.GetCompletedSeasonsBeforeBlock(blockIndex); + var seasonInfo = await _seasonService.GetSeasonAndRoundByBlock(blockIndex); + var season = seasonInfo.Season; - if (!completedSeasons.Any()) - { - return Ok( - new CompletedArenaLeaderboardResponse - { - CurrentSeason = new SimpleSeasonResponse - { - Id = currentSeason.Id, - SeasonGroupId = currentSeason.SeasonGroupId, - StartBlock = currentSeason.StartBlock, - EndBlock = currentSeason.EndBlock, - ArenaType = currentSeason.ArenaType, - }, - CompletedSeasons = new List(), - } - ); - } - - var completedSeasonLeaderboards = new List(); + if (season.EndBlock >= blockIndex) + { + return BadRequest("The requested block index corresponds to an ongoing season."); + } - foreach (var season in completedSeasons) - { var leaderboardData = await _leaderboardRepo.GetLeaderboardAsync(season.Id); - - var leaderboardResponse = new CompletedSeasonLeaderboardResponse + + var response = new CompletedSeasonLeaderboardResponse { Season = new SimpleSeasonResponse { @@ -111,22 +85,11 @@ long blockIndex .ToList(), }; - completedSeasonLeaderboards.Add(leaderboardResponse); + return Ok(response); + } + catch (Exception ex) + { + return BadRequest(ex.Message); } - - return Ok( - new CompletedArenaLeaderboardResponse - { - CurrentSeason = new SimpleSeasonResponse - { - Id = currentSeason.Id, - SeasonGroupId = currentSeason.SeasonGroupId, - StartBlock = currentSeason.StartBlock, - EndBlock = currentSeason.EndBlock, - ArenaType = currentSeason.ArenaType, - }, - CompletedSeasons = completedSeasonLeaderboards, - } - ); } }