diff --git a/.drone.yml b/.drone.yml index b773b1b..6aec404 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,19 +7,31 @@ trigger: - push steps: -# docker image build + + - name: build + image: mcr.microsoft.com/dotnet/sdk:6.0 + volumes: + - name: docs + path: /docs + commands: + - cd Sources/ + - dotnet restore LeagueOfLegends.sln + - dotnet build LeagueOfLegends.sln -c Release --no-restore + - dotnet publish LeagueOfLegends.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release + +# docker image build - name: docker-build-and-push image: plugins/docker settings: - dockerfile: Sources/API_LoL/Dockerfile - context: Sources/ - registry: hub.codefirst.iut.uca.fr - repo: hub.codefirst.iut.uca.fr/corentin.richard/entityframework_consodeservices_tp + dockerfile: Sources/API_LoL/Dockerfile + context: Sources/ + registry: hub.codefirst.iut.uca.fr + repo: hub.codefirst.iut.uca.fr/corentin.richard/entityframework_consodeservices_tp - username: - from_secret: SECRET_REGISTRY_USERNAME - password: - from_secret: SECRET_REGISTRY_PASSWORD + username: + from_secret: SECRET_REGISTRY_USERNAME + password: + from_secret: SECRET_REGISTRY_PASSWORD # docker test - name: tests @@ -30,3 +42,23 @@ steps: - dotnet test LeagueOfLegends.sln --no-restore depends_on: [docker-build-and-push] + - name: code-analysis + image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dronesonarplugin-dotnet6 + commands: + - cd Sources/ + - dotnet restore LeagueOfLegends.sln + - dotnet sonarscanner begin /k:entityframework_consodeservices_tp /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions="Tests/**" /d:sonar.login=$${PLUGIN_SONAR_TOKEN} + - dotnet build LeagueOfLegends.sln -c Release --no-restore + - dotnet test LeagueOfLegends.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage" + - reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport" + - dotnet publish LeagueOfLegends.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release + - dotnet sonarscanner end /d:sonar.login=$${PLUGIN_SONAR_TOKEN} + secrets: [ SECRET_SONAR_LOGIN ] + settings: + # accessible en ligne de commande par ${PLUGIN_SONAR_HOST} + sonar_host: https://codefirst.iut.uca.fr/sonar/ + # accessible en ligne de commande par ${PLUGIN_SONAR_TOKEN} + sonar_token: + from_secret: SECRET_SONAR_LOGIN + depends_on: [tests] + diff --git a/Sources/API_LoL/Controllers/ChampionsController.cs b/Sources/API_LoL/Controllers/ChampionsController.cs index 8ad3719..25faddb 100644 --- a/Sources/API_LoL/Controllers/ChampionsController.cs +++ b/Sources/API_LoL/Controllers/ChampionsController.cs @@ -3,6 +3,7 @@ using Model; using StubLib; using DTO; using DTO.Mapper; +using System.CodeDom.Compiler; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 @@ -19,26 +20,49 @@ namespace API_LoL.Controllers private IChampionsManager ChampionsManager; - // GET: api/ + // GET api//5 + [HttpGet] - public async Task Get() + public async Task Get(String? name= null,String? skill = null, String? characteristic = null,int index = 0,int size =10) { - var list = await ChampionsManager.GetItems(0,await ChampionsManager.GetNbItems()); - if (list.Count() != 0) { - return Ok(list.Select(champion => champion?.ToDTO())); - }else { - return NoContent(); + if (size - index > 10) + { + return BadRequest(); + } + if (!string.IsNullOrEmpty(name)) + { + var list = await ChampionsManager.GetItemsByName(name, index,size); + if (list.Count() != 0) + { + return Ok(list.Select(champion => champion?.toDTO())); + } + else { return NoContent(); } + }else if(!string.IsNullOrEmpty(skill)) { + var list = await ChampionsManager.GetItemsBySkill(skill, index, size); + if (list.Count() != 0) + { + return Ok(list.Select(champion => champion?.toDTO())); + } + else { return NoContent(); } + } + else if(!string.IsNullOrEmpty (characteristic)) { + var list = await ChampionsManager.GetItems(index, size); + if (list.Count() != 0) + { + return Ok(list.Select(champion => champion?.toDTO())); + } + else { return NoContent(); } + } + else { + var list = await ChampionsManager.GetItems(index, size); + if (list.Count() != 0) + { + return Ok(list.Select(champion => champion?.toDTO())); + } + else { return NoContent(); } } } - // GET api//5 - /* - [HttpGet("{id}")] - public string Get(String name) - { - return "value"; - }*/ - // POST api/ [HttpPost] public async Task Post(ChampionDTO champion) diff --git a/Sources/Api_UT/ChampionControllerTest.cs b/Sources/Api_UT/ChampionControllerTest.cs new file mode 100644 index 0000000..16fccaa --- /dev/null +++ b/Sources/Api_UT/ChampionControllerTest.cs @@ -0,0 +1,85 @@ +using API_LoL.Controllers; +using DTO; +using FluentAssertions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore.Query; +using Model; +using StubLib; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; + +namespace Api_UT +{ + [TestClass] + public class ChampionControllerTest + { + + ChampionsController api = new ChampionsController(new StubData()); + + [TestMethod] + public async Task Get_Default_OkList() + { + + List list = new List {new ChampionDTO("Akali","",""), new ChampionDTO("Aatrox", "", ""), new ChampionDTO("Ahri", "", ""), new ChampionDTO("Akshan", "", ""), new ChampionDTO("Bard", "", ""), new ChampionDTO("Alistar", "", "") }; + IActionResult a = await api.Get(); + a.Should().NotBeNull(); + var aObject = a as OkObjectResult; + aObject.Should().NotBeNull(); + var championresult = aObject.Value as IEnumerable; + list.Should().BeEquivalentTo(championresult); + } + + [TestMethod] + public async Task Get_MoreThanLimit_BadRequest() + { + IActionResult a = await api.Get(index :0,size :11); + + a.Should().NotBeNull(); + a.Should().BeOfType(); + } + + [TestMethod] + public async Task Get_2First_OkListOf2() + { + List list = new List { new ChampionDTO("Akali", "", ""), new ChampionDTO("Aatrox", "", "") }; + + IActionResult a = await api.Get(index: 0,size: 2); + + a.Should().NotBeNull(); + a.Should().BeOfType(); + var aObject = a as OkObjectResult; + aObject.Should().NotBeNull(); + var championresult = aObject.Value as IEnumerable; + list.Should().BeEquivalentTo(championresult); + } + + [TestMethod] + public async Task Get_FilterAName_OkListOf5() + { + List list = new List { new ChampionDTO("Akali", "", ""), new ChampionDTO("Akshan", "", "") }; + + IActionResult a = await api.Get(name: "Ak"); + + a.Should().NotBeNull(); + a.Should().BeOfType(); + var aObject = a as OkObjectResult; + aObject.Should().NotBeNull(); + var championresult = aObject.Value as IEnumerable; + list.Should().BeEquivalentTo(championresult); + } + + + + [TestMethod] + public async Task Post_ValidChampion_Created() + { + ChampionsController api = new ChampionsController(new StubData()); + IActionResult a = await api.Post(new ChampionDTO("nom","bio","icon")); + Assert.IsNotNull(a); + ChampionDTO champ = new ChampionDTO("nom", "bio", "icon"); + Assert.IsTrue(champ.equals((ChampionDTO)((CreatedAtActionResult)a).Value)); + } + + } +} \ No newline at end of file diff --git a/Sources/EF_UT/EntityTest.cs b/Sources/EF_UT/EntityTest.cs index 4d4ce34..d1f87b5 100644 --- a/Sources/EF_UT/EntityTest.cs +++ b/Sources/EF_UT/EntityTest.cs @@ -23,7 +23,7 @@ namespace EF_UT using (var context = new LoLDbContext(options)) { - ChampionEntity chewie = new ChampionEntity("Chewbacca","",""); + ChampionEntity chewie = new ChampionEntity("Chewbacca", "", ""); ChampionEntity yoda = new ChampionEntity("Yoda", "", ""); ChampionEntity ewok = new ChampionEntity("Ewok", "", ""); @@ -42,6 +42,8 @@ namespace EF_UT Assert.AreEqual("Chewbacca", context.Champions.First().Name); } } + + [TestMethod] public void TestUpdate() { @@ -52,8 +54,8 @@ namespace EF_UT //prepares the database with one instance of the context using (var context = new LoLDbContext(options)) { - ChampionEntity chewie = new ChampionEntity ("Chewbacca", "", ""); - ChampionEntity yoda = new ChampionEntity ("Yoda", "", ""); + ChampionEntity chewie = new ChampionEntity("Chewbacca", "", ""); + ChampionEntity yoda = new ChampionEntity("Yoda", "", ""); ChampionEntity ewok = new ChampionEntity("Ewok", "", ""); context.Add(chewie);