diff --git a/src/GameIdeas/GameIdeas.sln b/src/GameIdeas/GameIdeas.sln index 2166a5d..a4319a2 100644 --- a/src/GameIdeas/GameIdeas.sln +++ b/src/GameIdeas/GameIdeas.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameIdeas.Shared", "GameIde EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{9598BBAF-CC9F-4F43-82B2-40F57296C9F0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameIdeas.WebAPI.Tests", "Server\GameIdeas.WebAPI.Tests\GameIdeas.WebAPI.Tests.csproj", "{D7B46EB2-590D-4A39-90C6-4D553FC4309A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -37,6 +39,10 @@ Global {9D6D5C6D-AD66-4353-88CC-638887C42477}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D6D5C6D-AD66-4353-88CC-638887C42477}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D6D5C6D-AD66-4353-88CC-638887C42477}.Release|Any CPU.Build.0 = Release|Any CPU + {D7B46EB2-590D-4A39-90C6-4D553FC4309A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7B46EB2-590D-4A39-90C6-4D553FC4309A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7B46EB2-590D-4A39-90C6-4D553FC4309A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7B46EB2-590D-4A39-90C6-4D553FC4309A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -44,6 +50,7 @@ Global GlobalSection(NestedProjects) = preSolution {ABBADA2F-9017-49A2-AEB9-AC2DB7D70831} = {9598BBAF-CC9F-4F43-82B2-40F57296C9F0} {61C3985E-15DF-4127-9D1F-CAE39F0ADD17} = {F59BED34-9473-436A-A91A-23510A4E0E87} + {D7B46EB2-590D-4A39-90C6-4D553FC4309A} = {F59BED34-9473-436A-A91A-23510A4E0E87} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6380DD77-53E4-4F3B-BB45-FAD2263D1511} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/GameIdeas.WebAPI.Tests.csproj b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/GameIdeas.WebAPI.Tests.csproj new file mode 100644 index 0000000..2be1ae1 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/GameIdeas.WebAPI.Tests.csproj @@ -0,0 +1,24 @@ + + + + net9.0 + latest + enable + enable + + + + + + + + + + + + + + + + + diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/IdentityTest.cs b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/IdentityTest.cs new file mode 100644 index 0000000..80cbee0 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/IdentityTest.cs @@ -0,0 +1,17 @@ +using GameIdeas.Shared.Model; +using Microsoft.AspNetCore.Identity; + +namespace GameIdeas.WebAPI.Tests +{ + [TestClass] + public sealed class IdentityTest + { + [TestMethod] + public void GetPasswordHash() + { + var hasher = new PasswordHasher(); + var hash = hasher.HashPassword(null!, "GameIdeas"); + Console.WriteLine(hash); + } + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/MSTestSettings.cs b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/MSTestSettings.cs new file mode 100644 index 0000000..aaf278c --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI.Tests/MSTestSettings.cs @@ -0,0 +1 @@ +[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.cs deleted file mode 100644 index e445fb8..0000000 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace GameIdeas.WebAPI.Migrations -{ - /// - public partial class SeedRoles : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "AspNetRoles", - columns: ["Id", "Name", "NormalizedName", "ConcurrencyStamp"], - values: new object[,] - { - { - Guid.NewGuid().ToString(), - "Administrateur", - "ADMINISTRATEUR", - Guid.NewGuid().ToString() - }, - { - Guid.NewGuid().ToString(), - "Membre", - "MEMBRE", - Guid.NewGuid().ToString() - } - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql("DELETE FROM [AspNetRoles] WHERE [Name] IN ('Administrateur', 'Membre')"); - } - } -} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.Designer.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.Designer.cs similarity index 99% rename from src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.Designer.cs rename to src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.Designer.cs index 1f9f88e..26d7f05 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420153439_SeedRoles.Designer.cs +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.Designer.cs @@ -12,8 +12,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace GameIdeas.WebAPI.Migrations { [DbContext(typeof(GameIdeasContext))] - [Migration("20250420153439_SeedRoles")] - partial class SeedRoles + [Migration("20250420160158_SeedDefaultUser")] + partial class SeedDefaultUser { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.cs new file mode 100644 index 0000000..cb8c9e1 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace GameIdeas.WebAPI.Migrations +{ + /// + public partial class SeedDefaultUser : Migration + { + private readonly Guid AdminId = Guid.Parse("{06CA5CB7-6DE5-4A73-9DDD-8E2D5CCDF104}"); + private readonly Guid AdminUserId = Guid.Parse("{2AB56FCB-0CDE-4DAE-AC9C-FC7635B0D18A}"); + private readonly Guid MemberId = Guid.Parse("{BCE14DEA-1748-4A76-8485-ADEE83DF5EFD}"); + + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: ["Id", "Name", "NormalizedName", "ConcurrencyStamp"], + values: new object[,] + { + { + AdminId.ToString(), + "Administrateur", + "ADMINISTRATEUR", + Guid.NewGuid().ToString() + }, + { + MemberId.ToString(), + "Membre", + "MEMBRE", + Guid.NewGuid().ToString() + } + }); + + migrationBuilder.InsertData( + table: "AspNetUsers", + columns: + [ + "Id", "UserName", "NormalizedUserName", "EmailConfirmed", "PhoneNumberConfirmed", "TwoFactorEnabled" + , "PasswordHash", "SecurityStamp", "ConcurrencyStamp", "AccessFailedCount", "LockoutEnabled" + ], + values: + [ + AdminUserId.ToString(), "admin", "ADMIN", + false, false, false, + "AQAAAAIAAYagAAAAEOGx7MFBLpS7awda0ww6jsfXsnhsUjYd4gDK9DaGvQv0X9UZTuHStr5v5+t4Y1S+xg==", + Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0, false + ]); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: ["UserId", "RoleId"], + values: [AdminUserId.ToString(), AdminId.ToString()]); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql(@$"DELETE FROM ""AspNetUserRoles"" WHERE ""UserId"" = '{AdminUserId.ToString()}' AND ""RoleId"" = '{AdminId.ToString()}'"); + migrationBuilder.DeleteData("AspNetUsers", "Id", AdminUserId.ToString()); + migrationBuilder.DeleteData("AspNetRoles", "Id", AdminId.ToString()); + migrationBuilder.DeleteData("AspNetRoles", "Id", MemberId.ToString()); + } + } +}