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());
+ }
+ }
+}