From bdc1e01aa4bd9dc184186fe8a6db6e0e7d0388b3 Mon Sep 17 00:00:00 2001 From: masapountz Date: Wed, 27 Mar 2024 20:04:15 +0100 Subject: [PATCH 01/11] Ajout de l'autorisation au Blazor de se connecter --- API_SQLuedo/API/Program.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs index 529a451..eab3624 100644 --- a/API_SQLuedo/API/Program.cs +++ b/API_SQLuedo/API/Program.cs @@ -79,9 +79,22 @@ builder.Services.AddSwaggerGen(option => } }); }); +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowSpecificOrigin", + builder => + { + builder.WithOrigins("https://localhost:7171") + .AllowAnyMethod() + .AllowAnyHeader(); + }); +}); + var app = builder.Build(); +app.UseCors("AllowSpecificOrigin"); + // Création de l'utilisateur admin pour la base de données Identity using (var scope = app.Services.CreateScope()) From 92a1b9e8b3cbff42e832f3454931b140e8ff122a Mon Sep 17 00:00:00 2001 From: masapountz Date: Thu, 28 Mar 2024 15:26:30 +0100 Subject: [PATCH 02/11] Ajout de la route pour promouvoir un user --- API_SQLuedo/.dockerignore | 30 +++++++++++++++++ API_SQLuedo/API/Controllers/UserController.cs | 20 ++++++++++++ API_SQLuedo/API/Dockerfile | 32 +++++++++++++++++++ API_SQLuedo/API/Service/UserDataServiceAPI.cs | 3 ++ .../DbDataManager/Service/UserDataService.cs | 9 ++++++ API_SQLuedo/Shared/IUserService.cs | 1 + 6 files changed, 95 insertions(+) create mode 100644 API_SQLuedo/.dockerignore create mode 100644 API_SQLuedo/API/Dockerfile diff --git a/API_SQLuedo/.dockerignore b/API_SQLuedo/.dockerignore new file mode 100644 index 0000000..fe1152b --- /dev/null +++ b/API_SQLuedo/.dockerignore @@ -0,0 +1,30 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md +!**/.gitignore +!.git/HEAD +!.git/config +!.git/packed-refs +!.git/refs/heads/** \ No newline at end of file diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index fb57815..8c0b394 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -128,5 +128,25 @@ namespace API.Controllers logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); return NotFound(); } + + [HttpPut("user/promote/{id:int}")] + [ProducesResponseType(typeof(UserDto), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult PromoteUser(int id) + { + var userPromoted = userService.GetUserById(id); + if (userPromoted != null) + { + userPromoted = userService.PromoteUser(id); + logger.LogInformation("[INFORMATION] La promotion de l'utilisateur avec l'id {id} a été effectuée"); + return Ok(userPromoted); + } + else + { + logger.LogInformation("[INFORMATION] La promotion de l'utilisateur avec l'id {id} à échouée", + id); + return NotFound(); + } + } } } \ No newline at end of file diff --git a/API_SQLuedo/API/Dockerfile b/API_SQLuedo/API/Dockerfile new file mode 100644 index 0000000..2ea3b4c --- /dev/null +++ b/API_SQLuedo/API/Dockerfile @@ -0,0 +1,32 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER app +WORKDIR /app +EXPOSE 8080 +EXPOSE 8081 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["API/API.csproj", "API/"] +COPY ["DbContextLib/DbContextLib.csproj", "DbContextLib/"] +COPY ["EntityFramework/Entities.csproj", "EntityFramework/"] +COPY ["Dto/Dto.csproj", "Dto/"] +COPY ["DbDataManager/DbDataManager.csproj", "DbDataManager/"] +COPY ["Model/Model.csproj", "Model/"] +COPY ["Shared/Shared.csproj", "Shared/"] +COPY ["StubbedContextLib/StubbedContextLib.csproj", "StubbedContextLib/"] +RUN dotnet restore "./API/./API.csproj" +COPY . . +WORKDIR "/src/API" +RUN dotnet build "./API.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "API.dll"] \ No newline at end of file diff --git a/API_SQLuedo/API/Service/UserDataServiceAPI.cs b/API_SQLuedo/API/Service/UserDataServiceAPI.cs index 72bca16..621ee65 100644 --- a/API_SQLuedo/API/Service/UserDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/UserDataServiceAPI.cs @@ -25,4 +25,7 @@ public class UserDataServiceApi(IUserService userService) : IUserSer public UserDto CreateUser(string username, string password, string email, bool isAdmin) => userService.CreateUser(username, password, email, isAdmin).FromEntityToDto(); + + public UserDto PromoteUser(int id) => + userService.PromoteUser(id).FromEntityToDto(); } \ No newline at end of file diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs index ebb3ba5..4158622 100644 --- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs @@ -116,4 +116,13 @@ public class UserDataService : IUserService DbContext.SaveChangesAsync(); return newUserEntity; } + + public UserEntity PromoteUser(int id) + { + var userEdit = GetUserById(id); + var newUserEntity = UpdateUser(id,new UserEntity{Id = id,Username = userEdit.Username,Password = userEdit.Password,Email = userEdit.Email,IsAdmin = true}); + DbContext.Users.Add(newUserEntity); + DbContext.SaveChangesAsync(); + return newUserEntity; + } } \ No newline at end of file diff --git a/API_SQLuedo/Shared/IUserService.cs b/API_SQLuedo/Shared/IUserService.cs index d1d458a..d723558 100644 --- a/API_SQLuedo/Shared/IUserService.cs +++ b/API_SQLuedo/Shared/IUserService.cs @@ -10,5 +10,6 @@ namespace Shared public bool DeleteUser(int id); public TUser UpdateUser(int id, TUser user); public TUser CreateUser(string username, string password, string email, bool isAdmin); + public TUser PromoteUser(int id); } } \ No newline at end of file From 50b356c98a799af34ae9ac7e8b81ad821cd0dab6 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 13:44:09 +0100 Subject: [PATCH 03/11] Modification Criteria pour les lessons et Users dans l'ordre --- API_SQLuedo/DbDataManager/Service/LessonDataService.cs | 8 +++++++- API_SQLuedo/DbDataManager/Service/UserDataService.cs | 5 +++-- API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs index aa67a64..051ef4c 100644 --- a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs @@ -29,7 +29,7 @@ public class LessonDataService : ILessonService number = 10; } - IQueryable query = DbContext.Lessons.Skip((page - 1) * number).Take(number); + IQueryable query = DbContext.Lessons; switch (orderCriteria) { case LessonOrderCriteria.None: @@ -43,10 +43,16 @@ public class LessonDataService : ILessonService case LessonOrderCriteria.ByLastEdit: query = query.OrderBy(s => s.LastEdit); break; + case LessonOrderCriteria.ById: + query = query.OrderBy(s => (int) s.Id); + break; default: break; } + query = query.Skip((page - 1) * number).Take(number); + + var lessons = query.ToList(); return lessons; } diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs index 16a0edc..5211aa2 100644 --- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs @@ -58,7 +58,8 @@ public class UserDataService : IUserService { number = 10; } - IQueryable query = DbContext.Users.Skip((page - 1) * number).Take(number); + + IQueryable query = DbContext.Users; switch (orderCriteria) { case UserOrderCriteria.None: @@ -78,6 +79,7 @@ public class UserDataService : IUserService default: break; } + query = query.Skip((page - 1) * number).Take(number); var users = query.ToList(); return users; @@ -195,7 +197,6 @@ public class UserDataService : IUserService { var userEdit = GetUserById(id); var newUserEntity = UpdateUser(id,new UserEntity{Id = id,Username = userEdit.Username,Password = userEdit.Password,Email = userEdit.Email,IsAdmin = true}); - DbContext.Users.Add(newUserEntity); DbContext.SaveChangesAsync(); return newUserEntity; } diff --git a/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs index db06097..0fdb058 100644 --- a/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs +++ b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs @@ -5,5 +5,6 @@ public enum LessonOrderCriteria None, ByTitle, ByLastPublisher, - ByLastEdit + ByLastEdit, + ById } \ No newline at end of file From 05aa8d953350497f117145b0218a44acdf61be78 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 15:09:04 +0100 Subject: [PATCH 04/11] =?UTF-8?q?Modification=20des=20cit=C3=A8res=20pour?= =?UTF-8?q?=20les=20enqu=C3=AAtes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/DbDataManager/Service/InquiryDataService.cs | 8 ++++++-- API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs index ef92e20..255bf45 100644 --- a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs @@ -26,7 +26,7 @@ public class InquiryDataService : IInquiryService { number = 10; } - IQueryable query = DbContext.Inquiries.Skip((page - 1) * number).Take(number); + IQueryable query = DbContext.Inquiries; switch (orderCriteria) { case InquiryOrderCriteria.None: @@ -40,10 +40,14 @@ public class InquiryDataService : IInquiryService case InquiryOrderCriteria.ByIsUser: query = query.OrderBy(s => s.IsUser); break; + case InquiryOrderCriteria.ById: + query = query.OrderBy(s => s.Id); + break; default: break; } + query = query.Skip((page - 1) * number).Take(number); var inquiries = query.ToList(); return inquiries; } @@ -97,7 +101,7 @@ public class InquiryDataService : IInquiryService } DbContext.Inquiries.Remove(inquiryEntity); - DbContext.SaveChangesAsync(); + DbContext.SaveChanges(); return true; } diff --git a/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs index f800b0e..def4550 100644 --- a/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs +++ b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs @@ -5,5 +5,6 @@ public enum InquiryOrderCriteria None, ByTitle, ByDescription, - ByIsUser + ByIsUser, + ById } \ No newline at end of file From 3efa6816fe841c0ab87182b7f3dfd23fd9877d31 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 15:26:42 +0100 Subject: [PATCH 05/11] TU PromoteUser --- API_SQLuedo/TestAPI/UserUnitTest.cs | 61 +++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs index abdfbfb..ba8758b 100644 --- a/API_SQLuedo/TestAPI/UserUnitTest.cs +++ b/API_SQLuedo/TestAPI/UserUnitTest.cs @@ -29,12 +29,12 @@ public class UserUnitTest if (userResult is OkObjectResult okObjectResult) { - var valeur = (okObjectResult.Value as KeyValuePair?); + var valeur = (okObjectResult.Value as KeyValuePair?); Assert.NotNull(valeur); Assert.Equal(userList.Count, valeur.Value.Value); } } - + [Fact] public void GetUsersListSuccess() { @@ -54,7 +54,7 @@ public class UserUnitTest Assert.True(userList.SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer())); } } - + [Fact] public void GetNotAdminUsersListSuccess() { @@ -71,7 +71,8 @@ public class UserUnitTest Assert.NotNull(valeur); Assert.Equal(GetUsersData().ToString(), valeur.ToString()); - Assert.True(userList.Where(u => u.IsAdmin == false).SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer())); + Assert.True(userList.Where(u => u.IsAdmin == false) + .SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer())); } } @@ -155,6 +156,7 @@ public class UserUnitTest Assert.True(valeur.IsAdmin); } } + [Fact] public void GetUserEmailSuccess() { @@ -198,6 +200,7 @@ public class UserUnitTest Assert.False(userList == valeur); } } + [Fact] public void GetUserEmailFail() { @@ -285,6 +288,7 @@ public class UserUnitTest Assert.Equal(400, bdObjectResult.StatusCode); } } + [Fact] public void CreateUserWithExistingEmail() { @@ -300,6 +304,7 @@ public class UserUnitTest Assert.Equal(400, bdObjectResult.StatusCode); } } + [Fact] public void CreateUserWithExistingUsername() { @@ -351,6 +356,54 @@ public class UserUnitTest } } + + [Fact] + public void PromoteUserSuccess() + { + _userService.Setup(x => x.PromoteUser(1)) + .Returns(new UserDto( + 1, + "Leuser", + "motdepasse", + "deuxadresse@gmail.com", + true + )); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.PromoteUser(1); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.Equal("Leuser", valeur.Username); + Assert.Equal("motdepasse", valeur.Password); + Assert.Equal("deuxadresse@gmail.com", valeur.Email); + Assert.True(valeur.IsAdmin); + } + } + + [Fact] + public void PromoteUserFail() + { + _userService.Setup(x => x.PromoteUser(1)) + .Returns(new UserDto( + 1, + "Leuser", + "motdepasse", + "deuxadresse@gmail.com", + true + )); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.PromoteUser(356262); + + if (userResult is BadRequestResult bdObjectResult) + { + Assert.Equal(404, bdObjectResult.StatusCode); + } + } + private List GetUsersData() { List usersData = new List(4) From 493719d1db2f8356986358c29f7c25c898620638 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 15:55:59 +0100 Subject: [PATCH 06/11] =?UTF-8?q?Ajout=20de=20test=20suppl=C3=A9mentaires?= =?UTF-8?q?=20pour=20SuccessController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/TestAPI/SuccessesUnitTest.cs | 138 +++++++++++++++++++++-- 1 file changed, 131 insertions(+), 7 deletions(-) diff --git a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs index 8ad235a..f8dc28c 100644 --- a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs +++ b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs @@ -1,6 +1,7 @@ using API.Controllers; using Dto; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Logging.Abstractions; using Moq; using Shared; @@ -40,14 +41,30 @@ public class SuccessesUnitTest } [Fact] - public void GetSuccessesListFail() + public void GetSuccessesListFail_When_Result_Equal_0() { _successService.Setup(x => x.GetSuccesses(1, 4, 0)) .Returns(new List()); var successesController = new SuccessesController(_successService.Object, new NullLogger()); - var successesResult = successesController.GetSuccesses(2, 3, 0); + var successesResult = successesController.GetSuccesses(26373, 31771, 0); + + if (successesResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) + { + Assert.IsNotType(successesResult); + } + } + + [Fact] + public void GetSuccessesListFail_When_Page_Is_A_Negative() + { + _successService.Setup(x => x.GetSuccesses(1, 4, 0)) + .Returns(new List()); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var successesResult = successesController.GetSuccesses(-1, 3, 0); if (successesResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) { @@ -89,7 +106,7 @@ public class SuccessesUnitTest } [Fact] - public void GetSuccessInquiryIdFail() + public void GetSuccessInquiryIdFail_When_Id_Not_Exist() { var successesList = GetSuccessesData(); _successService.Setup(x => x.GetSuccessesByInquiryId(1)) @@ -108,6 +125,26 @@ public class SuccessesUnitTest } } + [Fact] + public void GetSuccessInquiryIdFail_When_Id_Negative() + { + var successesList = GetSuccessesData(); + _successService.Setup(x => x.GetSuccessesByInquiryId(1)) + .Returns(new List { successesList[0], successesList[1] }); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var sucessesResult = successesController.GetSuccessByInquiryId(-1); + if (sucessesResult is NotFoundObjectResult nfObjectResult) + { + var valeur = nfObjectResult.Value; + + Assert.NotNull(valeur); + Assert.IsNotType(valeur); + Assert.DoesNotContain(valeur, successesList); + } + } + [Fact] public void GetSuccessUserIdSuccess() { @@ -140,7 +177,7 @@ public class SuccessesUnitTest } [Fact] - public void GetSuccessUserIdFail() + public void GetSuccessUserIdFail_When_Id_Not_Found() { var successesList = GetSuccessesData(); _successService.Setup(x => x.GetSuccessesByUserId(2)) @@ -159,6 +196,27 @@ public class SuccessesUnitTest } } + + [Fact] + public void GetSuccessUserIdFail_When_Id_Negative() + { + var successesList = GetSuccessesData(); + _successService.Setup(x => x.GetSuccessesByUserId(2)) + .Returns(new List { successesList[2], successesList[3] }); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var sucessesResult = successesController.GetSuccessByUserId(-1); + if (sucessesResult is NotFoundObjectResult nfObjectResult) + { + var valeur = nfObjectResult.Value; + + Assert.NotNull(valeur); + Assert.IsNotType(valeur); + Assert.DoesNotContain(valeur, successesList); + } + } + [Fact] public void DeleteSuccessSuccess() { @@ -177,7 +235,7 @@ public class SuccessesUnitTest } [Fact] - public void DeleteSuccessFail() + public void DeleteSuccessFail_When_Not_Found() { _successService.Setup(x => x.DeleteSuccess(1, 1)) .Returns(true); @@ -192,6 +250,22 @@ public class SuccessesUnitTest } } + [Fact] + public void DeleteSuccessFail_When_Negative() + { + _successService.Setup(x => x.DeleteSuccess(1, 1)) + .Returns(true); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var sucessesResult = successesController.DeleteSuccess(-1, 278); + if (sucessesResult is NotFoundObjectResult nfObjectResult) + { + Assert.Null(nfObjectResult.Value); + Assert.IsNotType(nfObjectResult.Value); + } + } + [Fact] public void CreateSuccessSuccess() { @@ -213,7 +287,7 @@ public class SuccessesUnitTest } [Fact] - public void CreateSuccessFail() + public void CreateSuccessFail_When_Id_Not_Found() { _successService.Setup(x => x.CreateSuccess(8, 8, true)) .Returns(new SuccessDto(8, 8, true)); @@ -228,6 +302,22 @@ public class SuccessesUnitTest } } + [Fact] + public void CreateSuccessFail_When_Id_Negative() + { + _successService.Setup(x => x.CreateSuccess(8, 8, true)) + .Returns(new SuccessDto(8, 8, true)); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var successesResult = successesController.CreateSuccess(new SuccessDto(-1, 818, true)); + + if (successesResult is BadRequestResult bdObjectResult) + { + Assert.Equal(400, bdObjectResult.StatusCode); + } + } + [Fact] public void UpdateSuccessSuccess() { @@ -249,7 +339,7 @@ public class SuccessesUnitTest } [Fact] - public void UpdateSuccessFail() + public void UpdateSuccessFail_When_Ids_Are_Differents() { _successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true))) .Returns(new SuccessDto(1, 2, true)); @@ -264,6 +354,40 @@ public class SuccessesUnitTest } } + [Fact] + public void UpdateSuccessFail_When_Id_Negative() + { + _successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true))) + .Returns(new SuccessDto(1, 2, true)); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var successesResult = successesController.UpdateSuccess(-2, 1, new SuccessDto(1, 2, true)); + + if (successesResult is BadRequestResult bdObjectResult) + { + Assert.Equal(400, bdObjectResult.StatusCode); + } + } + + [Fact] + public void UpdateSuccessFail_When_Id_Not_Found() + { + _successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true))) + .Returns(new SuccessDto(1, 2, true)); + var successesController = + new SuccessesController(_successService.Object, new NullLogger()); + + var successesResult = successesController.UpdateSuccess(1000, 1000, new SuccessDto(1000, 1000, true)); + + if (successesResult is BadRequestResult bdObjectResult) + { + Assert.Equal(400, bdObjectResult.StatusCode); + } + } + + + private List GetSuccessesData() { List successesData = new List(4) From b474a171e6985e8cb934e07979164356ff3c5775 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 16:50:08 +0100 Subject: [PATCH 07/11] Ajout de test UserController --- API_SQLuedo/TestAPI/UserUnitTest.cs | 100 ++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs index ba8758b..6109618 100644 --- a/API_SQLuedo/TestAPI/UserUnitTest.cs +++ b/API_SQLuedo/TestAPI/UserUnitTest.cs @@ -18,7 +18,7 @@ public class UserUnitTest } [Fact] - public void GetNumberOfUsers() + public void GetNumberOfUsersSuccess() { var userList = GetUsersData(); _userService.Setup(x => x.GetNumberOfUsers()) @@ -35,6 +35,24 @@ public class UserUnitTest } } + + [Fact] + public void GetNumberOfUsers_Fail_Cause_Not_Found() + { + var userList = GetUsersData(); + _userService.Setup(x => x.GetNumberOfUsers()) + .Returns(0); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.GetNumberOfUsers(); + + if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) + + { + Assert.IsNotType(userResult); + } + } + [Fact] public void GetUsersListSuccess() { @@ -55,6 +73,22 @@ public class UserUnitTest } } + [Fact] + public void GetUserListFail() + { + _userService.Setup(x => x.GetUsers(1, 4, 0)) + .Returns(new List()); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.GetUsers(2, 3, 0); + + if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) + + { + Assert.IsNotType(userResult); + } + } + [Fact] public void GetNotAdminUsersListSuccess() { @@ -65,30 +99,31 @@ public class UserUnitTest var userResult = usersController.GetNotAdminUsers(1, 4, 0); - if (userResult is OkObjectResult okObjectResult) - { - var valeur = okObjectResult.Value; + if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) - Assert.NotNull(valeur); - Assert.Equal(GetUsersData().ToString(), valeur.ToString()); - Assert.True(userList.Where(u => u.IsAdmin == false) - .SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer())); + { + Assert.IsNotType(userResult); } } [Fact] - public void GetUserListFail() + public void GetNotAdminUsersListFail_Cause_Not_Found() { - _userService.Setup(x => x.GetUsers(1, 4, 0)) - .Returns(new List()); + var userList = GetUsersData(); + _userService.Setup(x => x.GetNotAdminUsers(1, 4, 0)) + .Returns(userList.Where(u => u.IsAdmin == false)); var usersController = new UsersController(new NullLogger(), _userService.Object); - var userResult = usersController.GetUsers(2, 3, 0); - - if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204) + var userResult = usersController.GetNotAdminUsers(100, 4, 0); + if (userResult is OkObjectResult okObjectResult) { - Assert.IsNotType(userResult); + var valeur = okObjectResult.Value; + + Assert.NotNull(valeur); + Assert.Equal(GetUsersData().ToString(), valeur.ToString()); + Assert.True(userList.Where(u => u.IsAdmin == false) + .SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer())); } } @@ -116,7 +151,7 @@ public class UserUnitTest } [Fact] - public void GetUserIdFail() + public void GetUserIdFail_Id_Doesnt_Exist() { var userList = GetUsersData(); _userService.Setup(x => x.GetUserById(1)) @@ -134,6 +169,26 @@ public class UserUnitTest } } + + [Fact] + public void GetUserIdFail__Argument_Exception_Negative_Id() + { + var userList = GetUsersData(); + _userService.Setup(x => x.GetUserById(1)) + .Returns(userList[1]); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.GetUserById(-1); + if (userResult is NotFoundObjectResult nfObjectResult) + { + var valeur = nfObjectResult.Value; + + Assert.NotNull(valeur); + Assert.IsNotType(valeur); + Assert.DoesNotContain(valeur, userList); + } + } + [Fact] public void GetUserUsernameSuccess() { @@ -274,7 +329,7 @@ public class UserUnitTest } [Fact] - public void CreateUserFail() + public void CreateUserFail_When_Field_Null() { GetUsersData(); _userService.Setup(x => x.CreateUser("Nom", "Passssss", "heudfk@hdye.com", true)) @@ -289,6 +344,7 @@ public class UserUnitTest } } + [Fact] public void CreateUserWithExistingEmail() { @@ -297,11 +353,11 @@ public class UserUnitTest .Returns(new UserDto("Nom", "Passssss", "adressemail@gmail.com", true)); var usersController = new UsersController(new NullLogger(), _userService.Object); - var userResult = usersController.CreateUser(new UserDto(null, "Passssss", "adressemail@gmail.com", true)); + var userResult = usersController.CreateUser(new UserDto("user", "Passssss", "adressemail@gmail.com", true)); if (userResult is BadRequestResult bdObjectResult) { - Assert.Equal(400, bdObjectResult.StatusCode); + Assert.Equal(409, bdObjectResult.StatusCode); } } @@ -309,11 +365,11 @@ public class UserUnitTest public void CreateUserWithExistingUsername() { GetUsersData(); - _userService.Setup(x => x.CreateUser("Useruser", "Passssss", "heudfk@hdye.com", true)) - .Returns(new UserDto("Useruser", "Passssss", "heudfk@hdye.com", true)); + _userService.Setup(x => x.CreateUser("Nom", "Passssss", "adressemail@gmail.com", true)) + .Returns(new UserDto("Nom", "Passssss", "adressemail@gmail.com", true)); var usersController = new UsersController(new NullLogger(), _userService.Object); - var userResult = usersController.CreateUser(new UserDto("Useruser", "Passssss", "heudfk@hdye.com", true)); + var userResult = usersController.CreateUser(new UserDto("Useruser", "Passssss", "adressemail@gmail.com", true)); if (userResult is BadRequestResult bdObjectResult) { From 22150135542b36702f20c5066238dc7df2168493 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 17:53:38 +0100 Subject: [PATCH 08/11] =?UTF-8?q?Cover=20de=20quelques=20m=C3=A9thodes=20d?= =?UTF-8?q?ans=20BlacklistService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TestBlackListDataService.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs b/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs index 91b4114..b1a7f0c 100644 --- a/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs +++ b/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs @@ -84,4 +84,49 @@ public class TestBlackListDataService Assert.True(banResult); Assert.True(_blackListDataService.UnbanUser("example91@email.com")); } + + [Fact] + public void UnbanUser_Fail_Cause_Email_Null() + { + _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test91", Email = "example91@email.com", Password = "password", IsAdmin = true }); + _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test92", Email = "example92@email.com", Password = "password", IsAdmin = false }); + _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test93", Email = "example93@email.com", Password = "password", IsAdmin = true }); + _dbContext.SaveChanges(); + var banResult = _blackListDataService.BanUser("Test91"); + Assert.True(banResult); + Assert.False(_blackListDataService.UnbanUser(null)); + } + + [Fact] + public void GetNumberOfBanned_Success() + { + _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024,03,30)}); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.SaveChanges(); + var banResult = _blackListDataService.GetNumberOfBannedUsers(); + Assert.Equal(3,banResult); + } + + [Fact] + public void GetBannedUser_Success_Positive_Value() + { + _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.SaveChanges(); + var banResult = _blackListDataService.GetBannedUsers(1,3,0); + Assert.Equal(3, banResult.Count()); + } + + [Fact] + public void GetBannedUser_Success_Negative_Value() + { + _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) }); + _dbContext.SaveChanges(); + var banResult = _blackListDataService.GetBannedUsers(-1, -3, 0); + Assert.Equal(3, banResult.Count()); + } } \ No newline at end of file From 7bda8c5181835076b9c7fa08f8976858f9874e75 Mon Sep 17 00:00:00 2001 From: masapountz Date: Fri, 29 Mar 2024 22:07:40 +0100 Subject: [PATCH 09/11] Fusion de LinkBlazor dans Master --- API_SQLuedo/API/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs index 75376fa..0b0944b 100644 --- a/API_SQLuedo/API/Program.cs +++ b/API_SQLuedo/API/Program.cs @@ -89,7 +89,7 @@ builder.Services.AddCors(options => { builder.WithOrigins("https://localhost:7171") .AllowAnyMethod() - .AllowAnyHeader(); + .AllowAnyHeader(); }); }); From fd42cbf10410184f17afafd9c59f805747a48548 Mon Sep 17 00:00:00 2001 From: Victor GABORIT Date: Sat, 30 Mar 2024 07:29:49 +0100 Subject: [PATCH 10/11] =?UTF-8?q?=20modification=20pour=20le=20verbe=20PUT?= =?UTF-8?q?=20du=20UserController=20afin=20qu'il=20retour=20une=20erreur?= =?UTF-8?q?=20409=20conflit=20si=20le=20username=20ou=20l'email=20est=20d?= =?UTF-8?q?=C3=A9j=C3=A0=20utilis=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/API/Controllers/UserController.cs | 16 +-- API_SQLuedo/TestAPI/UserUnitTest.cs | 100 ++++++++++++++++++ 2 files changed, 109 insertions(+), 7 deletions(-) diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 1c1a6d4..5096353 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -179,9 +179,9 @@ namespace API.Controllers [ProducesResponseType(typeof(UserDto), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] - public IActionResult UpdateUser(int id, [FromBody] UserDto UserDto) + public IActionResult UpdateUser(int id, [FromBody] UserDto userDto) { - if (id != UserDto.Id) + if (id != userDto.Id) { logger.LogError("[ERREUR] Problème ID - La mise à jour de l'utilisateur avec l'id {id} a échouée.", id); return BadRequest(); @@ -194,15 +194,17 @@ namespace API.Controllers return BadRequest(); } - if (UserDto != null) + if (userDto.Username == userService.GetUserById(id).Username && !userService.IsEmailTaken(userDto.Email) + || (userDto.Email == userService.GetUserById(id).Email && + !userService.IsUsernameTaken(userDto.Username)) + || (!userService.IsEmailTaken(userDto.Email) && !userService.IsUsernameTaken(userDto.Username))) { logger.LogInformation("[INFORMATION] La mise à jour de l'utilisateur avec l'id {id} a été effectuée", id); - return Ok(userService.UpdateUser(id, UserDto)); + return Ok(userService.UpdateUser(id, userDto)); } - - logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); - return NotFound(); + logger.LogError("[ERREUR] Email ou nom d'utilisateur déjà utilisé"); + return StatusCode(409,"Email ou nom d'utilisateur déjà utilisé"); } } } \ No newline at end of file diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs index abdfbfb..599b33f 100644 --- a/API_SQLuedo/TestAPI/UserUnitTest.cs +++ b/API_SQLuedo/TestAPI/UserUnitTest.cs @@ -350,6 +350,106 @@ public class UserUnitTest Assert.Equal(400, bdObjectResult.StatusCode); } } + [Fact] + public void UpdateUserFailWithExistingUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "heudfk@hdye.com", true))) + .Returns(new UserDto("Useruser", "Passssss", "heudfk@hdye.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "heudfk@hdye.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserFailWithExistingEmail() + { + _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false); + _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "adressemail@gmail.com", true))) + .Returns(new UserDto("Test1234", "Passssss", "adressemail@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "adressemail@gmail.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserFailWithExistingEmailAndExistingUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "adressemail@gmail.com", true))) + .Returns(new UserDto("Useruser", "Passssss", "adressemail@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "adressemail@gmail.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserSucessWithSameEmail() + { + _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false); + _userService.Setup(x => x.IsEmailTaken("deuxadresse@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "deuxadresse@gmail.com", true))) + .Returns(new UserDto("Test1234", "Passssss", "deuxadresse@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "deuxadresse@gmail.com", true)); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.Equal("Test1234", valeur.Username); + Assert.Equal("Passssss", valeur.Password); + Assert.Equal("deuxadresse@gmail.com", valeur.Email); + Assert.True(valeur.IsAdmin); + } + } + [Fact] + public void UpdateUserSucessWithSameUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Leuser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "heudfk@hdye.com", true))) + .Returns(new UserDto("Leuser", "Passssss", "heudfk@hdye.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Leuser", "Passssss", "heudfk@hdye.com", true)); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.Equal("Leuser", valeur.Username); + Assert.Equal("Passssss", valeur.Password); + Assert.Equal("heudfk@hdye.com", valeur.Email); + Assert.True(valeur.IsAdmin); + } + } private List GetUsersData() { From d112da2e9be099090456be3c2634c1cd4168e8e5 Mon Sep 17 00:00:00 2001 From: Victor GABORIT Date: Sat, 30 Mar 2024 08:31:03 +0100 Subject: [PATCH 11/11] =?UTF-8?q?=20oublie=20:=20ajout=20des=20annotations?= =?UTF-8?q?=20sur=20les=20verbes=20POST=20et=20PUT=20du=20UserController?= =?UTF-8?q?=20pour=20indiquer=20quel=20code=20de=20retour=20puevent=20?= =?UTF-8?q?=C3=AAtre=20renvoy=C3=A9s=20par=20les=20methodes=20concern?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/API/Controllers/UserController.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 5096353..6c07a54 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -150,6 +150,8 @@ namespace API.Controllers [HttpPost] [ProducesResponseType(typeof(UserDto), 201)] [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 409)] + [ProducesResponseType(typeof(string), 410)] public IActionResult CreateUser([FromBody] UserDto dto) { if (dto.Username == null || dto.Password == null || dto.Email == null) @@ -179,6 +181,7 @@ namespace API.Controllers [ProducesResponseType(typeof(UserDto), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] + [ProducesResponseType(typeof(string), 409)] public IActionResult UpdateUser(int id, [FromBody] UserDto userDto) { if (id != userDto.Id)