merge of comment and user ok - JSONserializer not working
continuous-integration/drone/push Build is passing Details

pull/44/head
Alexandre AGOSTINHO 2 years ago
commit 9ce02d1592

@ -11,26 +11,30 @@ Console.WriteLine("Hello, World!\n\n");
// TESTS:
DataManager dataMgr = new DataManager(new Stubs());
//DataManager dataMgr = new DataManager(new DataContractXML(xmlFolderPath: "../../../../DataPersistence/data"));
//DataManager dataMgr = new DataManager(new Stubs());
DataManager dataMgr = new DataManager(new DataContractXML());
//DataManager dataMgr = new DataManager(new DataContractJSON());
//dataMgr.Serializer = new DataContractXML(xmlFolderPath: "../../../../DataPersistence/data");
dataMgr.Serializer = new DataContractJSON();
//dataMgr.Serializer = new DataContractXML();
//dataMgr.Serializer = new DataContractJSON();
// /!\ here is an absolute path I put for testing purpose. It will only work on my computer so don't forget to change it whene you test.
//dataMgr.Export(rc[2], "C:\\Users\\alex6\\Downloads\\recipe2.json");
//dataMgr.Import<Recipe>("C:\\Users\\alex6\\Downloads\\recipe2.json");
PasswordManager passwordManager = new PasswordManager();
RecipeCollection rc = new RecipeCollection("All recipes", dataMgr.Data[nameof(Recipe)].Cast<Recipe>().ToArray());
User user = new User("Pedros", "Amigos", "pedrosamigos@hotmail.com");
rc[0].AddReview(new Review(user, 1, "bonne recette !1"));
rc[0].AddReview(new Review(user, 1, "bonne recette !2"));
rc[0].AddReview(new Review(user, 4, "bonne recette !3"));
rc[0].AddReview(new Review(user, 5, "bonne recette !4"));
rc[0].AddReview(new Review(user, 3, "bonne recette !5"));
rc[0].AddReview(new Review(user, 2, "bonne recette !6"));
User user = dataMgr.Data[nameof(User)].Cast<User>().Last();
//rc[0].AddReview(new Review(user, 1, "bonne recette !1"));
//rc[0].AddReview(new Review(user, 1, "bonne recette !2"));
//rc[0].AddReview(new Review(user, 4, "bonne recette !3"));
//rc[0].AddReview(new Review(user, 5, "bonne recette !4"));
//rc[0].AddReview(new Review(user, 3, "bonne recette !5"));
//rc[0].AddReview(new Review(user, 2, "bonne recette !6"));
//rc[0].AddReview(new Review(user, 2, "peut etre pas ducoup !"));
//rc[1].AddReview(new Review(user, 2, "Mais celle-ci oui !"));
dataMgr.Save();
@ -38,5 +42,5 @@ MenuManager menuMgr = new MenuManager(dataMgr);
menuMgr.Loop();
// press any key to quit
//Console.ReadKey();
Console.WriteLine(passwordManager.VerifyPassword(user.Password, "pamigos"));
Console.ReadKey();

@ -10,8 +10,4 @@
<ProjectReference Include="..\Model\Model.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="data\" />
</ItemGroup>
</Project>

@ -14,6 +14,8 @@ namespace DataPersistence
{
public Dictionary<string, List<object>> Load()
{
PasswordManager passwordManager = new PasswordManager();
Dictionary<string, List<object>> data = new Dictionary<string, List<object>>
{
{
@ -86,6 +88,24 @@ namespace DataPersistence
})
})
#endregion
},
{
#region Data: User
nameof(User),
new List<object>(new[]
{
new User(
name: "Admin",
surname: "Admin",
mail: "admin@mctg.fr",
password: passwordManager.HashPassword("admin")),
new User(
name: "Pedros",
surname: "Amigos",
mail: "pedrosamigos@hotmail.com",
password: passwordManager.HashPassword("pamigos"))
})
#endregion
}
};

@ -1,168 +0,0 @@
[
{
"Key": "Recipe",
"Value": [
{
"__type": "recipe:#Model",
"id": 26700,
"preparation-steps": [
{
"description": "Faire cuire.",
"order": 1
},
{
"description": "Manger.",
"order": 2
}
],
"title": "Cookies classiques"
},
{
"__type": "recipe:#Model",
"id": 16433,
"preparation-steps": [
{
"description": "Moulinez la pâte.",
"order": 1
},
{
"description": "Faire cuire pendant une bonne heure.",
"order": 2
},
{
"description": "Sortir du four et mettre dans un plat.",
"order": 3
}
],
"title": "Cookies au chocolat"
},
{
"__type": "recipe:#Model",
"id": 26093,
"preparation-steps": [
{
"description": "Achetez les ingrédients.",
"order": 1
},
{
"description": "Préparez le matériel. Ustensiles et tout.",
"order": 2
},
{
"description": "Pleurez.",
"order": 3
}
],
"title": "Gateau nature"
},
{
"__type": "recipe:#Model",
"id": 21481,
"preparation-steps": [
{
"description": "Achetez les légumes.",
"order": 1
},
{
"description": "Préparez le plat. Ustensiles et préchauffez le four.",
"order": 2
},
{
"description": "Coupez les pommes en morceaux et disposez-les sur le plat.",
"order": 3
},
{
"description": "Mettez enfin le plat au four, puis une fois cuit, dégustez !",
"order": 4
}
],
"title": "Gateau au pommes"
},
{
"__type": "recipe:#Model",
"id": 15049,
"preparation-steps": [
{
"description": "Ajouter les oeufs.",
"order": 1
},
{
"description": "Ajouter la farine.",
"order": 2
},
{
"description": "Ajouter 100g de chocolat fondu.",
"order": 3
},
{
"description": "Mélanger le tout.",
"order": 4
},
{
"description": "Faire cuire 45h au four traditionnel.",
"order": 5
}
],
"title": "Gateau au chocolat"
},
{
"__type": "recipe:#Model",
"id": 28153,
"preparation-steps": [
{
"description": "Faire une cuisson bien sec de la dinde à la poêle",
"order": 1
},
{
"description": "Mettre la dinde au frigo.",
"order": 2
},
{
"description": "Mettre le jambon dans le micro-onde.",
"order": 3
},
{
"description": "Faire chauffer 3min.",
"order": 4
},
{
"description": "Présentez sur un plat la dinde et le jambon : Miam !",
"order": 5
}
],
"title": "Dinde au jambon"
},
{
"__type": "recipe:#Model",
"id": 8053,
"preparation-steps": [
{
"description": "Trouvez des épices de curry.",
"order": 1
},
{
"description": "Trouvez maintenant du poulet.",
"order": 2
},
{
"description": "Coupez la tête du poulet et posez-la dans un plat.",
"order": 3
},
{
"description": "Parsemez d'épices curry la tête de la poule.",
"order": 4
},
{
"description": "Mettre le tout au four traditionnel 30min.",
"order": 5
},
{
"description": "Dégustez en famille !",
"order": 6
}
],
"title": "Poulet au curry"
}
]
}
]

@ -1,184 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfKeyValueOfstringArrayOfanyTypety7Ep6D1 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="1" z:Size="1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfstringArrayOfanyTypety7Ep6D1>
<Key z:Id="2">Recipe</Key>
<Value z:Id="3" z:Size="8">
<anyType z:Id="4" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>9062</d4p1:id>
<d4p1:preparation-steps z:Id="5" z:Size="2">
<d4p1:preparation-step z:Id="6">
<d4p1:description z:Id="7">Faire cuire.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="8">
<d4p1:description z:Id="9">Manger.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="10">Cookies classiques</d4p1:title>
</anyType>
<anyType z:Id="11" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>27627</d4p1:id>
<d4p1:preparation-steps z:Id="12" z:Size="3">
<d4p1:preparation-step z:Id="13">
<d4p1:description z:Id="14">Moulinez la pâte.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="15">
<d4p1:description z:Id="16">Faire cuire pendant une bonne heure.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="17">
<d4p1:description z:Id="18">Sortir du four et mettre dans un plat.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="19">Cookies au chocolat</d4p1:title>
</anyType>
<anyType z:Id="20" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>8517</d4p1:id>
<d4p1:preparation-steps z:Id="21" z:Size="3">
<d4p1:preparation-step z:Id="22">
<d4p1:description z:Id="23">Achetez les ingrédients.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="24">
<d4p1:description z:Id="25">Préparez le matériel. Ustensiles et tout.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="26">
<d4p1:description z:Id="27">Pleurez.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="28">Gateau nature</d4p1:title>
</anyType>
<anyType z:Id="29" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>6161</d4p1:id>
<d4p1:preparation-steps z:Id="30" z:Size="4">
<d4p1:preparation-step z:Id="31">
<d4p1:description z:Id="32">Achetez les légumes.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="33">
<d4p1:description z:Id="34">Préparez le plat. Ustensiles et préchauffez le four.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="35">
<d4p1:description z:Id="36">Coupez les pommes en morceaux et disposez-les sur le plat.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="37">
<d4p1:description z:Id="38">Mettez enfin le plat au four, puis une fois cuit, dégustez !</d4p1:description>
<d4p1:order>4</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="39">Gateau au pommes</d4p1:title>
</anyType>
<anyType z:Id="40" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>17869</d4p1:id>
<d4p1:preparation-steps z:Id="41" z:Size="5">
<d4p1:preparation-step z:Id="42">
<d4p1:description z:Id="43">Ajouter les oeufs.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="44">
<d4p1:description z:Id="45">Ajouter la farine.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="46">
<d4p1:description z:Id="47">Ajouter 100g de chocolat fondu.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="48">
<d4p1:description z:Id="49">Mélanger le tout.</d4p1:description>
<d4p1:order>4</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="50">
<d4p1:description z:Id="51">Faire cuire 45h au four traditionnel.</d4p1:description>
<d4p1:order>5</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="52">Gateau au chocolat</d4p1:title>
</anyType>
<anyType z:Id="53" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>4810</d4p1:id>
<d4p1:preparation-steps z:Id="54" z:Size="5">
<d4p1:preparation-step z:Id="55">
<d4p1:description z:Id="56">Faire une cuisson bien sec de la dinde à la poêle</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="57">
<d4p1:description z:Id="58">Mettre la dinde au frigo.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="59">
<d4p1:description z:Id="60">Mettre le jambon dans le micro-onde.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="61">
<d4p1:description z:Id="62">Faire chauffer 3min.</d4p1:description>
<d4p1:order>4</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="63">
<d4p1:description z:Id="64">Présentez sur un plat la dinde et le jambon : Miam !</d4p1:description>
<d4p1:order>5</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="65">Dinde au jambon</d4p1:title>
</anyType>
<anyType z:Id="66" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>13570</d4p1:id>
<d4p1:preparation-steps z:Id="67" z:Size="6">
<d4p1:preparation-step z:Id="68">
<d4p1:description z:Id="69">Trouvez des épices de curry.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="70">
<d4p1:description z:Id="71">Trouvez maintenant du poulet.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="72">
<d4p1:description z:Id="73">Coupez la tête du poulet et posez-la dans un plat.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="74">
<d4p1:description z:Id="75">Parsemez d'épices curry la tête de la poule.</d4p1:description>
<d4p1:order>4</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="76">
<d4p1:description z:Id="77">Mettre le tout au four traditionnel 30min.</d4p1:description>
<d4p1:order>5</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="78">
<d4p1:description z:Id="79">Dégustez en famille !</d4p1:description>
<d4p1:order>6</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="80">Poulet au curry</d4p1:title>
</anyType>
<anyType z:Id="81" xmlns:d4p1="http://schemas.datacontract.org/2004/07/Model" i:type="d4p1:recipe">
<d4p1:id>26918</d4p1:id>
<d4p1:preparation-steps z:Id="82" z:Size="4">
<d4p1:preparation-step z:Id="83">
<d4p1:description z:Id="84">Achetez les ingrédients.</d4p1:description>
<d4p1:order>1</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="85">
<d4p1:description z:Id="86">Préparez le matériel. Ustensiles et tout.</d4p1:description>
<d4p1:order>2</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="87">
<d4p1:description z:Id="88">Pleurez.</d4p1:description>
<d4p1:order>3</d4p1:order>
</d4p1:preparation-step>
<d4p1:preparation-step z:Id="89">
<d4p1:description z:Id="90">Aprenez de vos echecs.</d4p1:description>
<d4p1:order>4</d4p1:order>
</d4p1:preparation-step>
</d4p1:preparation-steps>
<d4p1:title z:Id="91">Gateau nature v2</d4p1:title>
</anyType>
</Value>
</KeyValueOfstringArrayOfanyTypety7Ep6D1>
</ArrayOfKeyValueOfstringArrayOfanyTypety7Ep6D1>

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model.Ingredient
{
internal class Ingredient
{
}
}

@ -158,6 +158,11 @@ namespace Model
{
sb.AppendFormat("\t* {0}\n", ps.ToString());
}
sb.AppendLine();
foreach (Review review in Reviews)
{
sb.AppendLine(review.ToString());
}
return sb.ToString();
}
#endregion

@ -66,7 +66,8 @@ namespace Model
}
public Review(int stars, string content)
: this(new User("...", "...", "...@..."), null, stars, content)
: this(new User("admin", "admin", "admin@mctg.fr", new PasswordManager().HashPassword("admin")),
null, stars, content)
{
}

@ -8,9 +8,8 @@ namespace Model
{
public interface IPasswordManager
{
public void changePassword(User user, string newPassword);
public string HashPassword(User user);
public bool VerifyPassword(string hashedPassword);
public int HashPassword(string password);
public bool VerifyPassword(int hashedPassword,string password);
}
}

@ -8,19 +8,20 @@ namespace Model
{
public class PasswordManager : IPasswordManager
{
public void changePassword(User user, string newPassword)
{
throw new NotImplementedException();
}
public string HashPassword(User user)
public int HashPassword(string password)
{
throw new NotImplementedException();
int hashedPassword = password.GetHashCode();
return hashedPassword;
}
public bool VerifyPassword(string hashedPassword)
public bool VerifyPassword(int hashedPassword, string passwordEntered )
{
throw new NotImplementedException();
int passwordEnteredHashed = passwordEntered.GetHashCode();
if ( passwordEnteredHashed == hashedPassword)
return true;
else return false;
}
}
}

@ -5,24 +5,26 @@ using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
using System.Text;
using System.Runtime.Serialization;
namespace Model
{
/// <summary>
/// A user is an entity with a name, a surname, mail, profilePict and a list of priority.
/// This user can login with a Id and password
/// This user can login with an Id and a password
/// </summary>
[DataContract(Name = "user")]
public class User : IEquatable<User>
{
#region Private Attributes
private string name="";
private string surname="";
private string mail = "";
private string picture = "";
private string password = "";
//private string defaultUserSavePath = "";
private List<Priority> priorities;
[DataMember] private string name="";
[DataMember] private string surname="";
[DataMember] private string mail = "";
[DataMember] private string picture = "";
[DataMember] private int password ;
[DataMember] private List<Priority> priorities;
#endregion
#region Properties
@ -79,16 +81,14 @@ namespace Model
}
}
///<summary>
/// Property to initiate password, change it, and
/// </summary>
public string Password
public int Password
{
get { return password; }
get => password;
set => password = value;
set { password = value; }
}
/// <summary>
/// For now, we define the ProfilPict as a string which is "PhotoParDefaut"
/// when the value is null.
@ -111,18 +111,23 @@ namespace Model
set=> priorities = value;
}
public override bool Equals(object? obj)
public override bool Equals(object? other)
{
if (obj == null) return false;
if (obj == this) return true;
return Equals(obj);
if (other == null) return false;
if (other == this) return true;
return Equals(other);
}
public bool Equals(User? other)
{
if (other == null ) return false;
if (other == null) return false;
return Name.Equals(other.Name) && Surname.Equals(other.Surname) && Mail.Equals(other.Mail);
}
public override int GetHashCode()
{
throw new NotImplementedException();
}
#endregion
@ -135,11 +140,12 @@ namespace Model
/// <param name="name">The name of the user</param>
/// <param name="surname">The surname of the user</param>
/// <param name="mail">The user needs an email to login. </param>
public User(string name, string surname, string mail)
public User(string name, string surname, string mail, int password)
{
Name = name;
Surname = surname;
Mail = mail;
Password = password;
priorities = new List<Priority> {
Priority.Gourmet,
Priority.Economic,
@ -150,6 +156,8 @@ namespace Model
}
#endregion

@ -0,0 +1,31 @@
<<<<<<< HEAD
<Project Sdk="Microsoft.NET.Sdk">
=======
<Project Sdk="Microsoft.NET.Sdk">
>>>>>>> feature/18-model-user
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<Configurations>Debug;Release;CI</Configurations>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Model\Model.csproj" />
<ProjectReference Include="..\..\DataPersistence\DataPersistence.csproj" />
</ItemGroup>
</Project>

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>

@ -12,8 +12,13 @@ namespace Model_UnitTests
[Fact]
public void TestConstructUser()
{
User? user = new User("Bob","Dylan", "bd@gmail.com");
Assert.NotNull(user);
PasswordManager passwordManager = new PasswordManager();
User user = new User("Bob", "Dylan", "bd@gmail.com", passwordManager.HashPassword("bobby"));
Assert.Equal("Bob", user.Name);
Assert.Equal("Dylan", user.Surname);
Assert.Equal("bd@gmail.com", user.Mail);
Assert.Equal(passwordManager.HashPassword("bobby"), user.Password);
Assert.NotNull(user.Priorities);
}
}
}

Loading…
Cancel
Save