Fix persistance - working | database tests reworked

pull/15/head
Matheo THIERRY 2 years ago
parent 9bbd0f3e4f
commit 2071f8ba32

@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract(IsReference = true)]
[DataContract]
public class Database
{
[DataMember]
@ -169,7 +169,7 @@ namespace Biblioteque_de_Class
{
foreach(User existingUser in UserList)
{
if(existingUser.Username == user.Username)
if(existingUser.Username == newUsername)
{
throw new AlreadyUsedException("this username is already used.");
}
@ -177,6 +177,11 @@ namespace Biblioteque_de_Class
user.Username = newUsername;
}
/// <summary>
/// vérifier si le nom du theme n'est pas déjà pris
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool VerifThemeNameNotTaken(string name)
{
foreach (Theme theme in ThemeList)

@ -1,14 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract]
public class Logo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string LogoLink { get; set; }
public Logo(string name, string logoLink)

@ -1,15 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract]
public class NoteImage
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string ImageLink { get; set; }
[DataMember]
public List<int> Position { get; set; }
public NoteImage(string name, string imageLink, List<int> position)

@ -1,14 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract]
public class Tags
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Color { get; set; }
public Tags(string name, string color)

@ -1,14 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Biblioteque_de_Class
{
[DataContract]
public class Theme
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<string> ColorList { get; private set; }
public Theme(string name, List<string> colorList)

@ -5,7 +5,7 @@ using System.Runtime.Serialization;
namespace Biblioteque_de_Class
{
[DataContract(IsReference = true)]
[DataContract]
public class User
{
[DataMember]

@ -7,8 +7,12 @@ using System.Security.Cryptography;
using System.Text;
// load database
PersistenceManager manager = new(new Stub());
Database db = manager.LoadDatabaseData();
PersistenceManager managerLoad = new(new Stub());
Database db = managerLoad.LoadDatabaseData();
//save database
PersistenceManager managerSave = new(new ToXML());
managerSave.SaveDatabaseData(db);
// initialization zone==============================================================================
@ -152,6 +156,7 @@ while (arreter)
Console.WriteLine("| |");
Console.WriteLine("| 1 / - connection - |");
Console.WriteLine("| 2 / - inscription - |");
Console.WriteLine("| 3 / - arreter le program - |");
Console.WriteLine("| |");
Console.WriteLine("|-----------------------------------------------|\n");
Console.WriteLine("rentrez votre choix.");
@ -162,6 +167,10 @@ while (arreter)
case "2":///Creer un compte
inscription = true; break;
case "3":///Arreter le program
arreter = false;
menu = false;
break;
default:
Console.WriteLine("\nEntrez un choix valide.\n");
break;
@ -1129,4 +1138,5 @@ while (arreter)
}
}
}
//manager.SaveDatabaseData(db);
managerSave.SaveDatabaseData(db);

@ -1,106 +0,0 @@
using Biblioteque_de_Class;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Xml;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Notus_Persistance
{
public class ToJSON : IManager
{
private const string DatabaseDataFilePath = "data.json";
private const string DefaultThemePath = "";
private const string DefaultLogoPath = "";
private static readonly DataContractJsonSerializer DatabasejsonSerializer = new(typeof(Database));
public void SaveDatabaseData(List<User> UserList)
{
using (FileStream fileStream = File.Create(DatabaseDataFilePath))
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(
fileStream,
System.Text.Encoding.UTF8,
false,
true))//<- this boolean says that we sant indentation
{
DatabasejsonSerializer.WriteObject(writer, UserList);
}
}
}
public Database LoadDatabaseData()
{
if (File.Exists(DatabaseDataFilePath))
{
using (FileStream fileStream = File.OpenRead(DatabaseDataFilePath))
{
Database? database = (Database?)DatabasejsonSerializer.ReadObject(fileStream);
if (database == null)
{
throw new FileException("Failed to load database. The loaded object is null.");
}
else
{
return database;
}
}
}
else
{
throw new FileException("No data file found.");
}
}
public List<Theme> LoadDefaultTheme()
{
if (File.Exists(DefaultThemePath))
{
using (FileStream fileStream = File.OpenRead(DefaultThemePath))
{
List<Theme>? DefaultThemeList = (List<Theme>?)DatabasejsonSerializer.ReadObject(fileStream);
if (DefaultThemeList == null)
{
throw new FileException("Failed to Default Theme. The loaded object is null.");
}
else
{
return DefaultThemeList;
}
}
}
else
{
throw new FileException("No data file found.");
}
}
public List<Logo> LoadDefaultLogo()
{
if (File.Exists(DefaultLogoPath))
{
using (FileStream fileStream = File.OpenRead(DefaultLogoPath))
{
List<Logo>? DefaultLogoList = (List<Logo>?)DatabasejsonSerializer.ReadObject(fileStream);
if (DefaultLogoList == null)
{
throw new FileException("Failed to Default Logo. The loaded object is null.");
}
else
{
return DefaultLogoList;
}
}
}
else
{
throw new FileException("No data file found.");
}
}
}
}

@ -16,7 +16,7 @@ namespace Notus_Persistance
private const string DataFilePath = "data.xml";
private const string DefaultThemePath = "";
private const string DefaultLogoPath = "";
private static readonly DataContractSerializer DatabaseXmlSerializer = new(typeof(Database));
private static readonly DataContractSerializer DatabaseXmlSerializer = new(typeof(Database), GetKnownTypes());
public void SaveDatabaseData(List<User> UserList)
{
@ -26,6 +26,13 @@ namespace Notus_Persistance
DatabaseXmlSerializer.WriteObject(writer, UserList);
}
private static IEnumerable<Type> GetKnownTypes()
{
yield return typeof(User);
yield return typeof(List<User>);
// Add other known types if necessary
}
public Database LoadDatabaseData()
{
if (File.Exists(DataFilePath))

@ -1,16 +0,0 @@
namespace UnitTests_Model
{
public class Database
{
[SetUp]
public void Setup()
{
}
[Test]
public void Test1()
{
Assert.Pass();
}
}
}

@ -0,0 +1,181 @@
using Biblioteque_de_Class;
namespace UnitTests_Model
{
[TestFixture]
public class Database_Tests
{
private Database database;
[SetUp]
public void Setup()
{
database = new Database();
database.UserList.Add(new User("John", "john@example.com", "password123"));
database.UserList.Add(new User("Jane", "jane@example.com", "choco"));
database.UserList.Add(new User("Alice", "alice@example.com", "choco"));
database.DefaultLogoList.Add(new Logo("Logo1", "link1"));
database.DefaultLogoList.Add(new Logo("Logo2", "link2"));
database.DefaultLogoList.Add(new Logo("Logo3", "link3"));
}
// SearchUser tests
[Test]
public void SearchUser_UserDoesNotExist_ThrowsException()
{
string searchName = "Bob";
Assert.Throws<NotFoundException>(() => database.SearchUser(searchName));
}
[Test]
public void SearchUser_CaseInsensitiveSearch_ReturnsMatchingUsers()
{
string searchName = "Alice";
User searchedUser = database.SearchUser(searchName);
Assert.That(searchedUser.Username, Is.EqualTo("Alice"));
}
// GetLogoLink tests
[Test]
public void GetLogoLink_LogoExists_ReturnsLogoLink()
{
Assert.That(database.GetLogoLink("Logo2"), Is.EqualTo("link2"));
}
[Test]
public void GetLogoLink_LogoDoesNotExist_ThrowsException()
{
string logoName = "Logo4";
Assert.Throws<NotFoundException>(() => database.GetLogoLink(logoName));
}
// GetUser tests
[Test]
public void GetUser_UserExists_ReturnsUser()
{
string userName = "Alice";
User user = database.GetUser(userName);
Assert.IsNotNull(user);
Assert.That(user.Username, Is.EqualTo(userName));
}
[Test]
public void GetUser_UserDoesNotExist_ThrowsException()
{
string userName = "Eve";
Assert.Throws<AlreadyUsedException>(() => database.GetUser(userName));
}
// ComparePassword tests
[Test]
public void ComparePassword_CorrectPassword_ReturnsTrue()
{
User user = database.UserList[0];
string password = "password123";
bool result = Database.ComparePassword(user, password);
Assert.That(result, Is.True);
}
[Test]
public void ComparePassword_IncorrectPassword_ReturnsFalse()
{
User user = database.UserList[0];
string password = "incorrectPassword";
bool result = Database.ComparePassword(user, password);
Assert.That(result, Is.False);
}
// FindEmail tests
[Test]
public void FindEmail_ExistingEmail_ReturnsTrue()
{
string email = "john@example.com";
bool result = database.FindEmail(email);
Assert.IsTrue(result);
}
[Test]
public void FindEmail_NonExistingEmail_ReturnsFalse()
{
string email = "olivedecarglass@example.com";
bool result = database.FindEmail(email);
Assert.IsFalse(result);
}
// AddUser tests
[Test]
public void AddUser_ValidUser_AddsUserToList()
{
User user = new User("Bob", "bob@example.com", "password123");
database.AddUser(user);
Assert.That(database.UserList, Contains.Item(user));
}
[Test]
public void AddUser_DuplicateUser_ThrowsException()
{
User user = new User("John", "john@example.com", "password123");
Assert.Throws<AlreadyUsedException>(() => database.AddUser(user));
}
// GetTheme tests
[Test]
public void GetTheme_ExistingTheme_ReturnsTheme()
{
Theme expectedTheme = new Theme("Theme1", ",,,".Split().ToList());
database.ThemeList.Add(expectedTheme);
Theme theme = database.GetTheme("Theme1");
Assert.IsNotNull(theme);
Assert.That(theme, Is.EqualTo(expectedTheme));
}
[Test]
public void GetTheme_NonExistingTheme_ReturnsNull()
{
Assert.Throws<NotFoundException>(() => database.GetTheme("NonExistingTheme"));
}
// ChangeUsername tests
[Test]
public void ChangeUsername_CorrectReplaceName_ChangesUsername()
{
User userSelected = database.UserList[0];
string newUsername = "duberlute";
database.ChangeUsername(userSelected, newUsername);
User updatedUser = database.UserList.Where(u => u.Username == newUsername).First();
Assert.IsNotNull(updatedUser);
Assert.That(updatedUser.Username, Is.EqualTo(newUsername));
}
[Test]
public void ChangeUsername_UsernameAlreadyUsed_ThrowsException()
{
User userNotSelected = database.UserList[2];
string newUsername = "Jane";
Assert.Throws<AlreadyUsedException>(() => database.ChangeUsername(userNotSelected, newUsername));
}
// VerifThemeNameNotTaken tests
[Test]
public void VerifThemeNameNotTaken_NameNotTaken_ReturnsTrue()
{
string themeName = "NewTheme";
bool result = database.VerifThemeNameNotTaken(themeName);
Assert.IsTrue(result);
}
[Test]
public void VerifThemeNameNotTaken_NameAlreadyTaken_ReturnsFalse()
{
Theme expectedTheme = new Theme("Theme1", ",,,".Split().ToList());
database.ThemeList.Add(expectedTheme);
string themeName = "Theme1";
bool result = database.VerifThemeNameNotTaken(themeName);
Assert.IsFalse(result);
}
}
}

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace UnitTests_Model
{
public class Note
public class Note_Tests
{
[SetUp]
public void Setup()

@ -17,4 +17,8 @@
<PackageReference Include="coverlet.collector" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Biblioteque_de_Class\Biblioteque_de_Class.csproj" />
</ItemGroup>
</Project>

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace UnitTests_Model
{
public class User
public class User_Tests
{
[SetUp]
public void Setup()

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace UnitTests_Persistance
{
internal class ToXML
internal class Stub_Tests
{
}
}

@ -1,16 +0,0 @@
namespace UnitTests_Persistance
{
public class Tests
{
[SetUp]
public void Setup()
{
}
[Test]
public void Test1()
{
Assert.Pass();
}
}
}

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnitTests_Persistance
{
internal class ToXML_Tests
{
}
}
Loading…
Cancel
Save