From 195db06bfd6b7de0aa57165d2e48a3512fa6efe7 Mon Sep 17 00:00:00 2001 From: Emre Date: Sat, 18 Mar 2023 15:41:12 +0100 Subject: [PATCH] RunePagesController and UT done :white_check_mark: --- .../ApiLol/Controllers/RunePagesController.cs | 50 +++++- .../ApiLol/Controllers/SkinsController.cs | 2 +- .../Sources/ApiLol/Mapper/RunePageMapper.cs | 16 +- .../Sources/DTO/RunePageDto.cs | 2 +- .../ApiTests/ChampionsControllerTestV1.cs | 3 - .../ApiTests/ChampionsControllerTestV2.cs | 3 - .../Tests/ApiTests/RunePagesControllerTest.cs | 162 ++++++++++++++++++ .../Tests/ApiTests/RunesControllerTest.cs | 5 +- .../Tests/ApiTests/SkinsControllerTest.cs | 3 - 9 files changed, 224 insertions(+), 22 deletions(-) create mode 100644 src/EntityFramework_LoL/Sources/Tests/ApiTests/RunePagesControllerTest.cs diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunePagesController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunePagesController.cs index 8fadab8..426cedd 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunePagesController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/RunePagesController.cs @@ -108,19 +108,44 @@ namespace ApiLol.Controllers } // PUT api//5 - [HttpPut("{id}")] - public void Put(int id, [FromBody] string value) + [HttpPut("{name}")] + public async Task Put(string name, [FromBody] RunePageDto runePage) { + _logger.LogInformation("method {Action} - RUNEPAGE call with {name} and {item}", nameof(Put), name, runePage); + try + { + var dtos = (await _manager.RunePagesMgr.GetItemByName(name, 0, await _manager.RunePagesMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + return NotFound($"Name {name} not exist"); + } + // Checks if the new name exists + if (name != runePage.Name) + { + var dtos2 = (await _manager.RunesMgr.GetItemByName(runePage.Name, 0, await _manager.RunePagesMgr.GetNbItems())); + if (!dtos2.IsNullOrEmpty() || dtos2.Count() > 0) + { + return BadRequest($"New Name {runePage.Name} is already exist"); + } + } + return Ok((await _manager.RunePagesMgr.UpdateItem(dtos.First(), runePage.ToModel())).ToDto()); + + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + } } // DELETE api//5 [HttpDelete("{name}")] public async Task Delete(string name) { - _logger.LogInformation("method {Action} - RUNE call with {name}", nameof(Delete), name); + _logger.LogInformation("method {Action} - RUNEPAGE call with {name}", nameof(Delete), name); try { - var dtos = (await _manager.RunePagesMgr.GetItemByName(name, 0, await _manager.RunesMgr.GetNbItems())); + var dtos = (await _manager.RunePagesMgr.GetItemByName(name, 0, await _manager.RunePagesMgr.GetNbItems())); if (dtos.IsNullOrEmpty()) { _logger.LogWarning("{name} was not found", name); @@ -135,5 +160,22 @@ namespace ApiLol.Controllers return BadRequest(error.Message); } } + + [HttpGet("/countRunePages")] + public async Task GetCountRunePages() + { + _logger.LogInformation("method {Action} - RUNEPAGE call", nameof(GetCountRunePages)); + try + { + return Ok(await _manager.RunePagesMgr.GetNbItems()); + } + catch (Exception error) + { + _logger.LogError(error.Message); + return BadRequest(error.Message); + + } + } + } } diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs index 3722f6e..eb9192a 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/SkinsController.cs @@ -67,7 +67,7 @@ namespace ApiLol.Controllers _logger.LogInformation("method {Action} - SKIN call with {name}", nameof(Get), name); try { - var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + var dtos = (await _manager.SkinsMgr.GetItemByName(name, 0, await _manager.SkinsMgr.GetNbItems())) .Select(x => x.ToDtoC()); if (dtos.IsNullOrEmpty()) { diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RunePageMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RunePageMapper.cs index 8501391..6ea2bd8 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RunePageMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/RunePageMapper.cs @@ -1,6 +1,7 @@ using ApiLol.Mapper.enums; using DTO; using Model; +using static Model.RunePage; namespace ApiLol.Mapper { @@ -12,17 +13,26 @@ namespace ApiLol.Mapper return new RunePageDto() { Name = runePage.Name, - Runes = runePage.Runes.ToDictionary(c => c.Key.ToDto(), r => r.Value.ToDto()) + Runes = runePage.Runes.ToDictionary(c => c.Key.ToString(), r => r.Value.ToDto()) }; } public static RunePage ToModel(this RunePageDto runePageDto) { + Category category; + Dictionary runDico = runePageDto.Runes.ToDictionary( + r => (RunePage.Category)Enum.Parse(typeof(RunePage.Category), r.Key), + r => r.Value.ToModel() + ); var runePage = new RunePage(runePageDto.Name); - foreach( var rune in runePageDto.Runes) + foreach (var rune in runePageDto.Runes) { - runePage[rune.Key.ToModel()] = rune.Value.ToModel(); + if (!Enum.TryParse(rune.Key, true, out category)) + { + continue; + } + runePage[category] = rune.Value.ToModel(); } return runePage; diff --git a/src/EntityFramework_LoL/Sources/DTO/RunePageDto.cs b/src/EntityFramework_LoL/Sources/DTO/RunePageDto.cs index 1056417..ee5468c 100644 --- a/src/EntityFramework_LoL/Sources/DTO/RunePageDto.cs +++ b/src/EntityFramework_LoL/Sources/DTO/RunePageDto.cs @@ -9,7 +9,7 @@ namespace DTO public partial class RunePageDto { public string Name { get; set; } - public Dictionary Runes { get; set; } + public Dictionary Runes { get; set; } } } diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV1.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV1.cs index 27128c5..a769cb5 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV1.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV1.cs @@ -111,9 +111,6 @@ namespace ApiTests var oldResult = await champs.GetCountChampions(); await champs.Post(ChampionDto); - var objectResult = oldResult as OkObjectResult; - Assert.IsNotNull(objectResult); - var newTotal = await stub.ChampionsMgr.GetNbItems(); var newResult = await champs.GetCountChampions(); diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV2.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV2.cs index b388d4a..4e8ee42 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV2.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTestV2.cs @@ -88,9 +88,6 @@ namespace ApiTests var oldResult = await champs.GetCountChampions(); await champs.Post(ChampionDto); - var objectResult = oldResult as OkObjectResult; - Assert.IsNotNull(objectResult); - var newTotal = await stub.ChampionsMgr.GetNbItems(); var newResult = await champs.GetCountChampions(); diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunePagesControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunePagesControllerTest.cs new file mode 100644 index 0000000..f0340d3 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunePagesControllerTest.cs @@ -0,0 +1,162 @@ +using ApiLol.Controllers; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging.Abstractions; +using StubLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ApiTests +{ + [TestClass] + public class RunePagesControllerTest + { + private readonly StubData stub; + private readonly RunePagesController runePages; + + public RunePagesControllerTest() + { + stub = new StubData(); + runePages = new RunePagesController(stub, new NullLogger()); + } + + [TestMethod] + public async Task TestGetRunePage() + { + //Arrange + + //Act + var total = await stub.RunePagesMgr.GetNbItems(); + var runePage = await runePages.Get(new PageRequest()); + + //Assert + var objectResult = runePage as OkObjectResult; + Assert.IsNotNull(objectResult); + + var runePResult = objectResult.Value as PageResponse; + Assert.IsNotNull(runePResult); + + var runePagesResult = runePResult.Data as IEnumerable; + Assert.IsNotNull(runePagesResult); + + Assert.AreEqual(runePagesResult.Count(), total); + + } + + [TestMethod] + public async Task TestCountRunePage() + { + //Arange + var runePageDto = new RunePageDto + { + Name = "rune page 2", + Runes = new Dictionary() + }; + + //Act + var oldTotal = await stub.RunePagesMgr.GetNbItems(); + var oldResult = await runePages.GetCountRunePages(); + await runePages.Post(runePageDto); + + var newTotal = await stub.RunePagesMgr.GetNbItems(); + var newResult = await runePages.GetCountRunePages(); + + //Assert + var objectResultOld = oldResult as OkObjectResult; + Assert.IsNotNull(objectResultOld); + + var objectResultNew = newResult as OkObjectResult; + Assert.IsNotNull(objectResultNew); + + Assert.AreEqual(objectResultOld.Value, oldTotal); + Assert.AreNotEqual(objectResultOld.Value, newTotal); + + Assert.AreEqual(objectResultNew.Value, newTotal); + Assert.AreNotEqual(objectResultNew.Value, oldTotal); + + } + + [TestMethod] + public async Task TestPostRunePage() + { + //Arange + var runePageDto = new RunePageDto + { + Name = "rune page 2", + Runes = new Dictionary() + }; + + //Act + var total = await stub.RunePagesMgr.GetNbItems(); + var runePageResult = await runePages.Post(runePageDto); + + //Assert + var objectResult = runePageResult as CreatedAtActionResult; + Assert.IsNotNull(objectResult); + + var rp = objectResult?.Value as RunePageDto; + Assert.IsNotNull(rp); + + Assert.AreEqual("rune page 2", rp.Name); + Assert.AreNotEqual(total, await stub.RunePagesMgr.GetNbItems()); + + + } + + [TestMethod] + public async Task TestPutRunePage() + { + //Arange + var runePageDto = new RunePageDto + { + Name = "rune page 2", + Runes = new Dictionary() + }; + var runePageDtoPut = new RunePageDto + { + Name = "rune page 3", + Runes = new Dictionary() + }; + + //Act + await runePages.Post(runePageDto); + var runePagesResult = await runePages.Put(runePageDto.Name, runePageDtoPut); + + //Assert + var objectResult = runePagesResult as OkObjectResult; + Assert.IsNotNull(objectResult); + + var rpResult = objectResult?.Value as RunePageDto; + Assert.IsNotNull(rpResult); + + Assert.AreNotEqual(runePageDto.Name, rpResult.Name); + Assert.AreEqual(runePageDtoPut.Name, rpResult.Name); + + } + + [TestMethod] + public async Task TestDeleteRunePage() + { + //Arange + + + //Act + var total = await stub.RunePagesMgr.GetNbItems(); + var runePagesResult = await runePages.Delete("rune page 1"); + + //Assert + var objectResult = runePagesResult as NoContentResult; + Assert.IsNotNull(objectResult); + + Assert.AreNotEqual(await stub.RunePagesMgr.GetNbItems(), total); + + } + + + + + } +} diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunesControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunesControllerTest.cs index 492ed34..abae299 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunesControllerTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/RunesControllerTest.cs @@ -71,7 +71,7 @@ namespace ApiTests var isRuneDto = objectResult?.Value as RuneDto; Assert.IsNotNull(isRuneDto); - Assert.AreEqual(total + 1, await stub.RunesMgr.GetNbItems()); + Assert.AreNotEqual(total, await stub.RunesMgr.GetNbItems()); } @@ -93,9 +93,6 @@ namespace ApiTests var oldResult = await runes.GetCountRunes(); await runes.Post(runeDto); - var objectResult = oldResult as OkObjectResult; - Assert.IsNotNull(objectResult); - var newTotal = await stub.RunesMgr.GetNbItems(); var newResult = await runes.GetCountRunes(); diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs index 4c525f8..db55e3e 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/SkinsControllerTest.cs @@ -94,9 +94,6 @@ namespace ApiTests var oldResult = await skins.GetCountSkins(); await skins.Post(SkinDto); - var objectResult = oldResult as OkObjectResult; - Assert.IsNotNull(objectResult); - var newTotal = await stub.SkinsMgr.GetNbItems(); var newResult = await skins.GetCountSkins();