diff --git a/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs b/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs index 39de6b1..3b208f3 100644 --- a/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs +++ b/ArenaService.Tests/Controllers/LeaderboardControllerTests.cs @@ -17,6 +17,7 @@ public class LeaderboardControllerTests private readonly Mock _mockRankingRepo; private readonly Mock _mockLeaderboardRepo; private readonly Mock _mockSeasonService; + private readonly Mock _mockSeasonCacheRepo; private readonly LeaderboardController _controller; public LeaderboardControllerTests() @@ -25,12 +26,14 @@ public LeaderboardControllerTests() _mockRankingRepo = new Mock(); _mockLeaderboardRepo = new Mock(); _mockSeasonService = new Mock(); + _mockSeasonCacheRepo = new Mock(); _controller = new LeaderboardController( _mockAllClanRankingRepo.Object, _mockRankingRepo.Object, _mockLeaderboardRepo.Object, - _mockSeasonService.Object + _mockSeasonService.Object, + _mockSeasonCacheRepo.Object ); } @@ -55,6 +58,8 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu EndBlock = 800000, }; + var currentSeasonInfo = (Id: 2, StartBlock: 1200000L, EndBlock: 1600000L); + var user = new User { AvatarAddress = new Address("0x1234567890123456789012345678901234567890"), @@ -79,6 +84,10 @@ public async Task GetCompletedArenaLeaderboard_WithValidBlockIndex_ReturnsOkResu .Setup(x => x.GetSeasonAndRoundByBlock(blockIndex)) .ReturnsAsync((season, round)); + _mockSeasonCacheRepo + .Setup(x => x.GetSeasonAsync()) + .ReturnsAsync(currentSeasonInfo); + _mockLeaderboardRepo .Setup(x => x.GetLeaderboardAsync(season.Id)) .ReturnsAsync(leaderboardData); @@ -125,16 +134,22 @@ public async Task GetCompletedArenaLeaderboard_WithOngoingSeason_ReturnsBadReque EndBlock = 800000, }; + var currentSeasonInfo = (Id: 1, StartBlock: 400000L, EndBlock: 800000L); + _mockSeasonService .Setup(x => x.GetSeasonAndRoundByBlock(blockIndex)) .ReturnsAsync((season, round)); + _mockSeasonCacheRepo + .Setup(x => x.GetSeasonAsync()) + .ReturnsAsync(currentSeasonInfo); + // Act var result = await _controller.GetCompletedArenaLeaderboard(blockIndex); // Assert var badRequestResult = Assert.IsType(result.Result); - Assert.Equal("The requested block index corresponds to an ongoing season.", badRequestResult.Value); + Assert.Equal("The requested block index corresponds to an ongoing or future season.", badRequestResult.Value); } [Fact] diff --git a/ArenaService/Controllers/LeaderboardController.cs b/ArenaService/Controllers/LeaderboardController.cs index 3fdda87..93b56e6 100644 --- a/ArenaService/Controllers/LeaderboardController.cs +++ b/ArenaService/Controllers/LeaderboardController.cs @@ -15,18 +15,21 @@ public class LeaderboardController : ControllerBase private readonly IRankingRepository _rankingRepo; private readonly ILeaderboardRepository _leaderboardRepo; private readonly ISeasonService _seasonService; + private readonly ISeasonCacheRepository _seasonCacheRepo; public LeaderboardController( IAllClanRankingRepository allClanRankingRepo, IRankingRepository rankingRepo, ILeaderboardRepository leaderboardRepo, - ISeasonService seasonService + ISeasonService seasonService, + ISeasonCacheRepository seasonCacheRepo ) { _allClanRankingRepo = allClanRankingRepo; _rankingRepo = rankingRepo; _leaderboardRepo = leaderboardRepo; _seasonService = seasonService; + _seasonCacheRepo = seasonCacheRepo; } [HttpGet("count")] @@ -44,22 +47,26 @@ public async Task> GetRankingCount(int seasonId, int roundInde "Completed Arena Leaderboard Response", typeof(CompletedSeasonLeaderboardResponse) )] - public async Task> GetCompletedArenaLeaderboard( - long blockIndex - ) + public async Task< + ActionResult + > GetCompletedArenaLeaderboard(long blockIndex) { try { var seasonInfo = await _seasonService.GetSeasonAndRoundByBlock(blockIndex); var season = seasonInfo.Season; - if (season.EndBlock >= blockIndex) + var currentSeasonInfo = await _seasonCacheRepo.GetSeasonAsync(); + + if (blockIndex >= currentSeasonInfo.StartBlock) { - return BadRequest("The requested block index corresponds to an ongoing season."); + return BadRequest( + "The requested block index corresponds to an ongoing or future season." + ); } var leaderboardData = await _leaderboardRepo.GetLeaderboardAsync(season.Id); - + var response = new CompletedSeasonLeaderboardResponse { Season = new SimpleSeasonResponse