diff --git a/VeraxShield/.idea/.idea.VeraxShield/.idea/.gitignore b/VeraxShield/.idea/.idea.VeraxShield/.idea/.gitignore
new file mode 100644
index 0000000..10eddc8
--- /dev/null
+++ b/VeraxShield/.idea/.idea.VeraxShield/.idea/.gitignore
@@ -0,0 +1,15 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/.idea.VeraxShield.iml
+/contentModel.xml
+/modules.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# GitHub Copilot persisted chat sessions
+/copilot/chatSessions
diff --git a/VeraxShield/.idea/.idea.VeraxShield/.idea/indexLayout.xml b/VeraxShield/.idea/.idea.VeraxShield/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/VeraxShield/.idea/.idea.VeraxShield/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VeraxShield/.idea/.idea.VeraxShield/.idea/vcs.xml b/VeraxShield/.idea/.idea.VeraxShield/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/VeraxShield/.idea/.idea.VeraxShield/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VeraxShield/TestVeraxShield/GlobalUsings.cs b/VeraxShield/TestVeraxShield/GlobalUsings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/GlobalUsings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file
diff --git a/VeraxShield/TestVeraxShield/ModeleAppUtilisateurTests.cs b/VeraxShield/TestVeraxShield/ModeleAppUtilisateurTests.cs
new file mode 100644
index 0000000..23fc0a0
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/ModeleAppUtilisateurTests.cs
@@ -0,0 +1,47 @@
+namespace TestVeraxShield;
+
+public class ModeleAppUtilisateurTests
+{
+
+ [Fact]
+ public void Constructeur_DoitInitialiserProprietes()
+ {
+ // Arrange & Act
+ var utilisateur = new ModeleAppUtilisateur("pseudoTest", "NomTest", "PrenomTest", "email@test.com", "motdepasse", "RoleTest");
+
+ // Assert
+ Assert.Equal("pseudoTest", utilisateur.Pseudo);
+ Assert.Equal("NomTest", utilisateur.Nom);
+ Assert.Equal("PrenomTest", utilisateur.Prenom);
+ Assert.Equal("email@test.com", utilisateur.Mail);
+ Assert.Equal("motdepasse", utilisateur.MotDePasse);
+ Assert.Contains("RoleTest", utilisateur.Roles);
+ }
+
+ [Fact]
+ public void AjouterRole_DoItAjouterNouveauRole()
+ {
+ // Arrange
+ var utilisateur = new ModeleAppUtilisateur("pseudoTest", "NomTest", "PrenomTest", "email@test.com", "motdepasse", "RoleTest");
+
+ // Act
+ utilisateur.ajouterRole("NouveauRole");
+
+ // Assert
+ Assert.Contains("NouveauRole", utilisateur.Roles);
+ }
+
+ [Fact]
+ public void SupprimerRole_DoItSupprimerRoleExistant()
+ {
+ // Arrange
+ var utilisateur = new ModeleAppUtilisateur("pseudoTest", "NomTest", "PrenomTest", "email@test.com", "motdepasse", "RoleTest");
+ utilisateur.ajouterRole("NouveauRole");
+
+ // Act
+ utilisateur.supprimerRole("RoleTest");
+
+ // Assert
+ Assert.DoesNotContain("RoleTest", utilisateur.Roles);
+ }
+}
\ No newline at end of file
diff --git a/VeraxShield/TestVeraxShield/ModeleCurrentUserTests.cs b/VeraxShield/TestVeraxShield/ModeleCurrentUserTests.cs
new file mode 100644
index 0000000..e6d7975
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/ModeleCurrentUserTests.cs
@@ -0,0 +1,57 @@
+namespace TestVeraxShield;
+
+public class ModeleCurrentUserTests
+{
+ [Fact]
+ public void InitializesCorrectly()
+ {
+ var utilisateur = new UtilisateurCourant();
+
+ Assert.Null(utilisateur.Claims);
+ Assert.False(utilisateur.EstAuthentifie);
+ Assert.Null(utilisateur.Pseudo);
+ }
+
+ [Fact]
+ public void AddsAndUpdatesClaimsCorrectly()
+ {
+ var utilisateur = new UtilisateurCourant { Claims = new Dictionary() };
+ utilisateur.Claims.Add("role", "user");
+
+ Assert.Equal("user", utilisateur.Claims["role"]);
+
+ utilisateur.Claims["role"] = "admin";
+ Assert.Equal("admin", utilisateur.Claims["role"]);
+ }
+
+ [Fact]
+ public void RemovesClaimsCorrectly()
+ {
+ var utilisateur = new UtilisateurCourant { Claims = new Dictionary() };
+ utilisateur.Claims.Add("role", "user");
+ utilisateur.Claims.Remove("role");
+
+ Assert.False(utilisateur.Claims.ContainsKey("role"));
+ }
+
+ [Fact]
+ public void TogglesAuthenticationState()
+ {
+ var utilisateur = new UtilisateurCourant();
+ utilisateur.EstAuthentifie = true;
+
+ Assert.True(utilisateur.EstAuthentifie);
+
+ utilisateur.EstAuthentifie = false;
+ Assert.False(utilisateur.EstAuthentifie);
+ }
+
+ [Fact]
+ public void UpdatesPseudoCorrectly()
+ {
+ var utilisateur = new UtilisateurCourant();
+ utilisateur.Pseudo = "TestUser";
+
+ Assert.Equal("TestUser", utilisateur.Pseudo);
+ }
+}
\ No newline at end of file
diff --git a/VeraxShield/TestVeraxShield/ModeleUtilisateurTests.cs b/VeraxShield/TestVeraxShield/ModeleUtilisateurTests.cs
new file mode 100644
index 0000000..508190f
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/ModeleUtilisateurTests.cs
@@ -0,0 +1,66 @@
+using VeraxShield.modele.utilisateurs;
+
+namespace TestVeraxShield;
+
+public class ModeleUtilisateurTests
+{
+ [Fact]
+ public void ConstructorAssignsPropertiesCorrectly()
+ {
+ // Arrange
+ string expectedPseudo = "TestPseudo";
+ string expectedNom = "TestNom";
+ string expectedPrenom = "TestPrenom";
+ string expectedRole = "TestRole";
+ string expectedMdp = "TestMdp";
+ string expectedMail = "test@mail.com";
+ bool expectedIsBan = true;
+
+ // Act
+ Utilisateur utilisateur = new Utilisateur(expectedPseudo, expectedNom, expectedPrenom, expectedRole, expectedMdp, expectedMail, expectedIsBan);
+
+ // Assert
+ Assert.Equal(expectedPseudo, utilisateur.Pseudo);
+ Assert.Equal(expectedNom, utilisateur.Nom);
+ Assert.Equal(expectedPrenom, utilisateur.Prenom);
+ Assert.Equal(expectedRole, utilisateur.Role);
+ Assert.Equal(expectedMdp, utilisateur.Mdp);
+ Assert.Equal(expectedMail, utilisateur.Mail);
+ Assert.Equal(expectedIsBan, utilisateur.IsBan);
+ }
+
+ [Theory]
+ [InlineData("NewPseudo", "NewNom", "NewPrenom", "NewRole", "NewMdp", "new@mail.com", false)]
+ [InlineData("AnotherPseudo", "AnotherNom", "AnotherPrenom", "AnotherRole", "AnotherMdp", "another@mail.com", true)]
+ public void PropertiesUpdateCorrectly(string pseudo, string nom, string prenom, string role, string mdp, string mail, bool isBan)
+ {
+ // Arrange
+ Utilisateur utilisateur = new Utilisateur(pseudo, nom, prenom, role, mdp, mail, isBan);
+
+ // Act - changing values to test setter
+ string updatedPseudo = pseudo + "Update";
+ string updatedNom = nom + "Update";
+ string updatedPrenom = prenom + "Update";
+ string updatedRole = role + "Update";
+ string updatedMdp = mdp + "Update";
+ string updatedMail = "updated@" + mail;
+ bool updatedIsBan = !isBan;
+
+ utilisateur.Pseudo = updatedPseudo;
+ utilisateur.Nom = updatedNom;
+ utilisateur.Prenom = updatedPrenom;
+ utilisateur.Role = updatedRole;
+ utilisateur.Mdp = updatedMdp;
+ utilisateur.Mail = updatedMail;
+ utilisateur.IsBan = updatedIsBan;
+
+ // Assert
+ Assert.Equal(updatedPseudo, utilisateur.Pseudo);
+ Assert.Equal(updatedNom, utilisateur.Nom);
+ Assert.Equal(updatedPrenom, utilisateur.Prenom);
+ Assert.Equal(updatedRole, utilisateur.Role);
+ Assert.Equal(updatedMdp, utilisateur.Mdp);
+ Assert.Equal(updatedMail, utilisateur.Mail);
+ Assert.Equal(updatedIsBan, utilisateur.IsBan);
+ }
+}
diff --git a/VeraxShield/TestVeraxShield/TestVeraxShield.csproj b/VeraxShield/TestVeraxShield/TestVeraxShield.csproj
new file mode 100644
index 0000000..14bbc31
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/TestVeraxShield.csproj
@@ -0,0 +1,45 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/VeraxShield/TestVeraxShield/UtlisateurFactoryTests.cs b/VeraxShield/TestVeraxShield/UtlisateurFactoryTests.cs
new file mode 100644
index 0000000..c238ad8
--- /dev/null
+++ b/VeraxShield/TestVeraxShield/UtlisateurFactoryTests.cs
@@ -0,0 +1,35 @@
+namespace TestVeraxShield.factoriesTests;
+
+using Xunit;
+using VeraxShield.factories;
+using VeraxShield.composants.formulaires.modeles;
+using VeraxShield.modele.utilisateurs;
+
+public class UtilisateursFactoryTests
+{
+ [Fact]
+ public void ConvertsToUtilisateur_WithNewPasswordHashing()
+ {
+ // Arrange
+ var modele = new FormulaireAjoutModele { Mdp = "newPassword", /* other properties */ };
+
+ // Act
+ var utilisateur = UtilisateursFactory.toUtilisateur(modele);
+
+ // Assert
+ Assert.NotEqual("newPassword", utilisateur.Mdp);
+ }
+
+ [Fact]
+ public void ConvertsToModele_FromUtilisateur()
+ {
+ // Arrange
+ var utilisateur = new Utilisateur("pseudo", "nom", "prenom", "role", "mdp", "mail", false);
+
+ // Act
+ var modele = UtilisateursFactory.toModele(utilisateur);
+
+ // Assert
+ }
+
+}
diff --git a/VeraxShield/VeraxShield.sln b/VeraxShield/VeraxShield.sln
index a6e072d..53b1f56 100644
--- a/VeraxShield/VeraxShield.sln
+++ b/VeraxShield/VeraxShield.sln
@@ -5,6 +5,8 @@ VisualStudioVersion = 17.8.34322.80
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VeraxShield", "VeraxShield\VeraxShield.csproj", "{40D16910-ADA7-496E-BA48-AA9D6FF1E502}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestVeraxShield", "TestVeraxShield\TestVeraxShield.csproj", "{7924C3CD-C50B-41D1-8A93-C4E0AF0F1B3C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{40D16910-ADA7-496E-BA48-AA9D6FF1E502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40D16910-ADA7-496E-BA48-AA9D6FF1E502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40D16910-ADA7-496E-BA48-AA9D6FF1E502}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7924C3CD-C50B-41D1-8A93-C4E0AF0F1B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7924C3CD-C50B-41D1-8A93-C4E0AF0F1B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7924C3CD-C50B-41D1-8A93-C4E0AF0F1B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7924C3CD-C50B-41D1-8A93-C4E0AF0F1B3C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/VeraxShield/VeraxShield/modele/authentification/AppUtilisateur.cs b/VeraxShield/VeraxShield/modele/authentification/ModeleAppUtilisateur.cs
similarity index 79%
rename from VeraxShield/VeraxShield/modele/authentification/AppUtilisateur.cs
rename to VeraxShield/VeraxShield/modele/authentification/ModeleAppUtilisateur.cs
index 662f348..742bc82 100644
--- a/VeraxShield/VeraxShield/modele/authentification/AppUtilisateur.cs
+++ b/VeraxShield/VeraxShield/modele/authentification/ModeleAppUtilisateur.cs
@@ -1,32 +1,32 @@
-public class AppUtilisateur
-{
- public string MotDePasse { get; set; }
- public List Roles { get; set; }
- public string Pseudo { get; set; }
- public string Prenom { get; set; }
- public string Nom { get; set; }
- public string Mail { get; set; }
-
-
- public AppUtilisateur(string pseudo,string nom, string prenom, string mail, string mdp, String premierRole)
- {
- this.MotDePasse = mdp;
- this.Pseudo = pseudo;
- this.Mail = mail;
- this.Prenom = prenom;
- this.Nom = nom;
-
- this.Roles = new List();
- this.Roles.Add(premierRole);
- }
-
- public void ajouterRole(string nouveauRole)
- {
- this.Roles.Add(nouveauRole);
- }
-
- public void supprimerRole(string ancienRole)
- {
- this.Roles.Remove(ancienRole);
- }
+public class ModeleAppUtilisateur
+{
+ public string MotDePasse { get; set; }
+ public List Roles { get; set; }
+ public string Pseudo { get; set; }
+ public string Prenom { get; set; }
+ public string Nom { get; set; }
+ public string Mail { get; set; }
+
+
+ public ModeleAppUtilisateur(string pseudo,string nom, string prenom, string mail, string mdp, String premierRole)
+ {
+ this.MotDePasse = mdp;
+ this.Pseudo = pseudo;
+ this.Mail = mail;
+ this.Prenom = prenom;
+ this.Nom = nom;
+
+ this.Roles = new List();
+ this.Roles.Add(premierRole);
+ }
+
+ public void ajouterRole(string nouveauRole)
+ {
+ this.Roles.Add(nouveauRole);
+ }
+
+ public void supprimerRole(string ancienRole)
+ {
+ this.Roles.Remove(ancienRole);
+ }
}
\ No newline at end of file