From e08cc0df053dec43f979878ea6d5f157899ec99c Mon Sep 17 00:00:00 2001 From: PATRICK Date: Mon, 4 Mar 2024 12:25:44 +0100 Subject: [PATCH] avancer --- Project/EntityFramework/API/API.csproj | 3 +- .../API/Controllers/GroupController.cs | 7 +- .../API/Db.in_english_please.db | Bin 106496 -> 106496 bytes .../API/Db.in_english_please.db-shm | Bin 32768 -> 0 bytes .../API/Db.in_english_please.db-wal | Bin 8272 -> 0 bytes Project/EntityFramework/API/Program.cs | 4 +- .../ModeleToEntities/Extensions.cs | 164 +++++++++++++++++- .../GroupService.cs | 10 +- .../IService.cs | 6 +- .../ModeleToEntities/ModeleToEntities.csproj | 6 + .../StubbedContext/StubbedContext.cs | 6 +- Project/EntityFramework/TU/GroupTU.cs | 42 +++++ Project/EntityFramework/TU/LangueTU.cs | 140 +++++++++++++++ Project/EntityFramework/TU/RoleTU.cs | 124 +++++++++++++ 14 files changed, 494 insertions(+), 18 deletions(-) delete mode 100644 Project/EntityFramework/API/Db.in_english_please.db-shm delete mode 100644 Project/EntityFramework/API/Db.in_english_please.db-wal rename Project/EntityFramework/{StubbedContext => ModeleToEntities}/GroupService.cs (90%) rename Project/EntityFramework/{StubbedContext => ModeleToEntities}/IService.cs (73%) create mode 100644 Project/EntityFramework/TU/LangueTU.cs create mode 100644 Project/EntityFramework/TU/RoleTU.cs diff --git a/Project/EntityFramework/API/API.csproj b/Project/EntityFramework/API/API.csproj index f7a0290..5995455 100644 --- a/Project/EntityFramework/API/API.csproj +++ b/Project/EntityFramework/API/API.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -20,6 +20,7 @@ + diff --git a/Project/EntityFramework/API/Controllers/GroupController.cs b/Project/EntityFramework/API/Controllers/GroupController.cs index 6b132f9..77a3c6b 100644 --- a/Project/EntityFramework/API/Controllers/GroupController.cs +++ b/Project/EntityFramework/API/Controllers/GroupController.cs @@ -1,5 +1,6 @@ using Entities; using Microsoft.AspNetCore.Mvc; +using ModeleToEntities; using StubbedContextLib; namespace API.Controllers @@ -21,7 +22,7 @@ namespace API.Controllers public async Task>> GetGroups() { _logger.LogInformation("Getting groups "); - var groups = await _groupService.GetGroups(); + var groups = await _groupService.Gets(); return Ok(groups); } @@ -29,7 +30,7 @@ namespace API.Controllers public async Task> GetGroup(int id) { _logger.LogInformation("Getting a group with id {id}",id); - var group = await _groupService.GetGroup(id); + var group = await _groupService.GetById(id); return Ok(group); } @@ -45,7 +46,7 @@ namespace API.Controllers public async Task> AddGroup([FromQuery]GroupEntity group) { _logger.LogInformation("Adding a group with id : {id}",group.Id); - group.Id = _groupService.GetGroups().Result.Count() + 1; + group.Id = _groupService.Gets().Result.Count() + 1; var newGroup = await _groupService.AddGroup(group); return Ok(newGroup); } diff --git a/Project/EntityFramework/API/Db.in_english_please.db b/Project/EntityFramework/API/Db.in_english_please.db index df088c50e2f8696be55dfc532b81eeaef61d98e4..6bf1a062aa7dfb2e34c0a28f34b4c9bd9ee55da5 100644 GIT binary patch delta 108 zcmZoTz}9epZ3Bw|2NVB22L5;a_cjYET;ez2V`61sWRzxND#)lT&P*;AU}RyVBl{4 M>A(G_KO=hp0GQ_=j{pDw delta 77 zcmV-T0J8spzy^T82CxJ$1_2N501xi75rE_mAP@ls00{{rX>Mk3a&2LBX=8H@00003 j58nU}^$+R~-?I@Q(GQc~PZk6T0RtI>`A@g`PXPx|sJR$} diff --git a/Project/EntityFramework/API/Db.in_english_please.db-shm b/Project/EntityFramework/API/Db.in_english_please.db-shm deleted file mode 100644 index c88b2c536140137c72de24ac338a500b601c3a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)F$%&!5Cu>b?JR^eF}>-$faeMXat;aP7`B39V{2(+XJ_jL%&w7OYpK2u!^|$r z6z>3=UYCQIVOO(J=vk;~vtJjB%luI0oBV#<-OhD&O17)?!}np;GjZ?ZEwAgojl(qQ zPX+=62oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pkzaz^6%X)^MFDu$l}w^#0GFRi9F{83NrEE zW8i-WBu2q#2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQJUE0X`;H21Z6{ zCZ>Xn%HquAVgW{022M`p%)GSxqTIw1pa{@YtUxRU8!wo$ZzhlAZPgN9{;v$o{FfQ{ zFY~|Rzdr=MKI-Jr5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2cnIXW%$Sld| mUX)*2P|U>1%q-3rTAW%`%*@FIWCrEuq!u#+!-bm@q5=TpN;Q)J diff --git a/Project/EntityFramework/API/Program.cs b/Project/EntityFramework/API/Program.cs index 1fc734b..2e55b62 100644 --- a/Project/EntityFramework/API/Program.cs +++ b/Project/EntityFramework/API/Program.cs @@ -1,10 +1,12 @@ -using Entities; + using Microsoft.Extensions.Configuration; using StubbedContextLib; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.SqlServer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using ModeleToEntities; +using Entities; var builder = WebApplication.CreateBuilder(args); // Add services to the container. diff --git a/Project/EntityFramework/ModeleToEntities/Extensions.cs b/Project/EntityFramework/ModeleToEntities/Extensions.cs index e016a27..3b6d911 100644 --- a/Project/EntityFramework/ModeleToEntities/Extensions.cs +++ b/Project/EntityFramework/ModeleToEntities/Extensions.cs @@ -1,7 +1,167 @@ -namespace ModeleToEntities +using Entities; +using Modele; + +namespace ModeleToEntities { - public class Extensions + public static class Extensions { + public static GroupEntity ToEntity(this Group group) + { + return new GroupEntity + { + Id = group.Id, + Num = group.Num, + year = group.year, + sector = group.sector, + VocabularyList = group.VocabularyList.Select(v => v.ToEntity()).ToList() + }; + } + + public static Group ToModel(this GroupEntity group) + { + return new Group + { + Id = group.Id, + Num = group.Num, + year = group.year, + sector = group.sector, + VocabularyList = group.VocabularyList.Select(v => v.ToModel()).ToList() + }; + } + + public static VocabularyListEntity ToEntity(this VocabularyList vocabularyList) + { + return new VocabularyListEntity + { + Id = vocabularyList.Id, + Name = vocabularyList.Name, + Image = vocabularyList.Image, + UserId = vocabularyList.UserId, + translation = vocabularyList.translation.Select(t => t.ToEntity()).ToList(), + Groups = vocabularyList.Groups.Select(g => g.ToEntity()).ToList() + }; + } + + public static VocabularyList ToModel(this VocabularyListEntity vocabularyList) + { + return new VocabularyList + { + Id = vocabularyList.Id, + Name = vocabularyList.Name, + Image = vocabularyList.Image, + UserId = vocabularyList.UserId, + translation = vocabularyList.translation.Select(t => t.ToModel()).ToList(), + Groups = vocabularyList.Groups.Select(g => g.ToModel()).ToList() + }; + } + + public static TranslateEntity ToEntity(this Translate translate) + { + return new TranslateEntity + { + Id = translate.Id, + WordsId = translate.WordsId, + Words = translate.Words.Select(w => w.ToEntity()).ToList(), + VocabularyListVocId = translate.VocabularyListVocId, + VocabularyListVoc = translate.VocabularyListVoc.ToEntity() + }; + } + + public static Translate ToModel(this TranslateEntity translate) + { + return new Translate + { + Id = translate.Id, + WordsId = translate.WordsId, + Words = translate.Words.Select(w => w.ToModel()).ToList(), + VocabularyListVocId = translate.VocabularyListVocId, + VocabularyListVoc = translate.VocabularyListVoc.ToModel() + }; + } + + public static VocabularyEntity ToEntity(this Vocabulary vocabulary) + { + return new VocabularyEntity + { + word = vocabulary.word, + LangueName = vocabulary.LangueName + }; + } + + public static Vocabulary ToModel(this VocabularyEntity vocabulary) + { + return new Vocabulary + { + word = vocabulary.word, + LangueName = vocabulary.LangueName + }; + } + + public static UserEntity ToEntity(this User user) + { + return new UserEntity + { + Id = user.Id, + Name = user.Name, + UserName = user.UserName, + NickName = user.NickName, + ExtraTime = user.ExtraTime, + GroupId = user.GroupId, + Password = user.Password, + Email = user.Email + }; + } + + public static User ToModel(this UserEntity user) + { + return new User + { + Id = user.Id, + Name = user.Name, + UserName = user.UserName, + NickName = user.NickName, + ExtraTime = user.ExtraTime, + GroupId = user.GroupId, + Password = user.Password, + Email = user.Email + }; + } + + public static RoleEntity ToEntity(this Role role) + { + return new RoleEntity + { + Id = role.Id, + Name = role.Name + }; + } + + public static Role ToModel(this RoleEntity role) + { + return new Role + { + Id = role.Id, + Name = role.Name + }; + } + + public static LangueEntity ToEntity(this Langue langue) + { + return new LangueEntity + { + name = langue.name + }; + } + + public static Langue ToModel(this LangueEntity langue) + { + return new Langue + { + name = langue.name + }; + } + + } } diff --git a/Project/EntityFramework/StubbedContext/GroupService.cs b/Project/EntityFramework/ModeleToEntities/GroupService.cs similarity index 90% rename from Project/EntityFramework/StubbedContext/GroupService.cs rename to Project/EntityFramework/ModeleToEntities/GroupService.cs index 4d5bc62..bc55ac0 100644 --- a/Project/EntityFramework/StubbedContext/GroupService.cs +++ b/Project/EntityFramework/ModeleToEntities/GroupService.cs @@ -1,14 +1,14 @@ -using DbContextLib; -using Entities; +using Entities; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; +using StubbedContextLib; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace StubbedContextLib +namespace ModeleToEntities { public class GroupService : IService { @@ -37,7 +37,7 @@ namespace StubbedContextLib return group; } - public async Task GetGroup(int id) + public async Task GetById(int id) { var group = await _context.Groups.FindAsync(id); if (group == null) @@ -47,7 +47,7 @@ namespace StubbedContextLib return group; } - public async Task> GetGroups() + public async Task> Gets() { var groups = await _context.Groups.ToListAsync(); return groups; diff --git a/Project/EntityFramework/StubbedContext/IService.cs b/Project/EntityFramework/ModeleToEntities/IService.cs similarity index 73% rename from Project/EntityFramework/StubbedContext/IService.cs rename to Project/EntityFramework/ModeleToEntities/IService.cs index b9363d4..dc5fb00 100644 --- a/Project/EntityFramework/StubbedContext/IService.cs +++ b/Project/EntityFramework/ModeleToEntities/IService.cs @@ -5,12 +5,12 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace StubbedContextLib +namespace ModeleToEntities { public interface IService { - Task> GetGroups(); - Task GetGroup(int id); + Task> Gets(); + Task GetById(int id); Task AddGroup(T group); Task DeleteGroup(int id); Task UpdateGroup(T group); diff --git a/Project/EntityFramework/ModeleToEntities/ModeleToEntities.csproj b/Project/EntityFramework/ModeleToEntities/ModeleToEntities.csproj index fa71b7a..74fadbd 100644 --- a/Project/EntityFramework/ModeleToEntities/ModeleToEntities.csproj +++ b/Project/EntityFramework/ModeleToEntities/ModeleToEntities.csproj @@ -6,4 +6,10 @@ enable + + + + + + diff --git a/Project/EntityFramework/StubbedContext/StubbedContext.cs b/Project/EntityFramework/StubbedContext/StubbedContext.cs index b5405f8..36f3d23 100644 --- a/Project/EntityFramework/StubbedContext/StubbedContext.cs +++ b/Project/EntityFramework/StubbedContext/StubbedContext.cs @@ -90,16 +90,16 @@ namespace StubbedContextLib modelBuilder.Entity().HasData( new GroupEntity { - Id= 1, + Id = 1, Num = 1, sector = "informatics", year = 1, VocabularyList = null }); - } + } - public StubbedContext() { } + public StubbedContext() { } public StubbedContext(DbContextOptions options) : base(options) { diff --git a/Project/EntityFramework/TU/GroupTU.cs b/Project/EntityFramework/TU/GroupTU.cs index da73ffd..37d5935 100644 --- a/Project/EntityFramework/TU/GroupTU.cs +++ b/Project/EntityFramework/TU/GroupTU.cs @@ -9,6 +9,48 @@ namespace TU [TestClass] public class GroupTU { + [TestMethod] + public async Task TestGetGroups() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var groups = await context.Groups.ToListAsync(); + Assert.IsNotNull(groups); + Assert.AreEqual(1, groups.Count); + Assert.AreEqual("informatics", groups[0].sector); + } + } + + [TestMethod] + public async Task TestGetGroup() { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newBook = new GroupEntity { Id = 2, year = 2, sector = "medecin" }; + await context.Groups.AddAsync(newBook); + await context.SaveChangesAsync(); + + var group1 = await context.Groups.FirstOrDefaultAsync(b => b.sector == "medecin"); + Assert.IsNotNull(group1); + Assert.AreEqual("medecin", group1.sector); + Assert.AreEqual(2, group1.year); + Assert.AreEqual(2, group1.Id); + } + } + [TestMethod] public async Task TestAddGroup() { diff --git a/Project/EntityFramework/TU/LangueTU.cs b/Project/EntityFramework/TU/LangueTU.cs new file mode 100644 index 0000000..e478753 --- /dev/null +++ b/Project/EntityFramework/TU/LangueTU.cs @@ -0,0 +1,140 @@ +using DbContextLib; +using Entities; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using StubbedContextLib; + +namespace TU +{ + [TestClass] + public class LangueTU + { + [TestMethod] + public async Task TestAddLangue() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newLangue = new LangueEntity { name = "français" , vocabularys=null }; + await context.Langues.AddAsync(newLangue); + await context.SaveChangesAsync(); + + var langue = await context.Langues.FirstOrDefaultAsync(b => b.name == "français"); + Assert.IsNotNull(langue); + Assert.AreEqual("français", langue.name); + Assert.IsNull(langue.vocabularys); + + + } + } + [TestMethod] + public async Task TestDeleteLangue() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + var vocab = new VocabularyEntity { word = "test", Langue = null }; + var newLangue = new LangueEntity { name = "français", vocabularys=[vocab] }; + vocab.Langue = newLangue; + await context.Langues.AddAsync(newLangue); + await context.SaveChangesAsync(); + + var langue = await context.Langues.FirstOrDefaultAsync(b => b.name == "français"); + Assert.IsNotNull(langue); + Assert.AreEqual("français", langue.name); + Assert.AreEqual(vocab, langue.vocabularys.First()); + + context.Langues.Remove(newLangue); + await context.SaveChangesAsync(); + var langue2 = await context.Langues.FirstOrDefaultAsync(b => b.name == "français"); + Assert.IsNull(langue2); + } + } + [TestMethod] + public async Task TestUpdateLangue() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newBook = new GroupEntity { Id = 2, year = 2, sector = "medecin" }; + await context.Groups.AddAsync(newBook); + await context.SaveChangesAsync(); + + var group1 = await context.Groups.FirstOrDefaultAsync(b => b.sector == "medecin"); + Assert.IsNotNull(group1); + Assert.AreEqual("medecin", group1.sector); + Assert.AreEqual(2, group1.year); + Assert.AreEqual(2, group1.Id); + + group1.sector = "informatique"; + group1.year = 3; + context.Groups.Update(group1); + await context.SaveChangesAsync(); + var group2 = await context.Groups.FirstOrDefaultAsync(b => b.sector == "informatique"); + Assert.IsNotNull(group2); + Assert.AreEqual("informatique", group2.sector); + Assert.AreEqual(3, group2.year); + Assert.AreEqual(2, group2.Id); + } + } + + [TestMethod] + public async Task TestGetLangues() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var langues = await context.Langues.ToListAsync(); + Assert.IsNotNull(langues); + Assert.AreEqual(2, langues.Count); + Assert.AreEqual("English", langues[0].name); + Assert.AreEqual("French", langues[1].name); + } + } + + [TestMethod] + public async Task TestGetLangue() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newLangue = new LangueEntity { name = "francais" }; + await context.Langues.AddAsync(newLangue); + await context.SaveChangesAsync(); + + var langue = await context.Langues.FirstOrDefaultAsync(b => b.name == "francais"); + Assert.IsNotNull(langue); + Assert.AreEqual("francais", langue.name); + } + } + } +} \ No newline at end of file diff --git a/Project/EntityFramework/TU/RoleTU.cs b/Project/EntityFramework/TU/RoleTU.cs new file mode 100644 index 0000000..94ee826 --- /dev/null +++ b/Project/EntityFramework/TU/RoleTU.cs @@ -0,0 +1,124 @@ +using DbContextLib; +using Entities; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using StubbedContextLib; + +namespace TU +{ + [TestClass] + public class RoleTU + { + [TestMethod] + public async Task TestGetRoles() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var roles = await context.Roles.ToListAsync(); + Assert.IsNotNull(roles); + Assert.AreEqual(3, roles.Count); + Assert.AreEqual("Admin", roles[0].Name); + } + } + [TestMethod] + public async Task TestGetRole() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newRole = new RoleEntity { Id = 4, Name = "user" }; + await context.Roles.AddAsync(newRole); + await context.SaveChangesAsync(); + + var role1 = await context.Roles.FirstOrDefaultAsync(b => b.Name == "user"); + Assert.IsNotNull(role1); + Assert.AreEqual("user", role1.Name); + Assert.AreEqual(4, role1.Id); + } + } + [TestMethod] + public async Task TestAddRole() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newRole = new RoleEntity { Name = "user" }; + await context.Roles.AddAsync(newRole); + await context.SaveChangesAsync(); + + var role = await context.Roles.FirstOrDefaultAsync(b => b.Name == "user"); + Assert.IsNotNull(role); + Assert.AreEqual("user", role.Name); + } + } + [TestMethod] + public async Task TestUpdateRole() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newRole = new RoleEntity { Name = "user" }; + await context.Roles.AddAsync(newRole); + await context.SaveChangesAsync(); + + var role = await context.Roles.FirstOrDefaultAsync(b => b.Name == "user"); + role.Name = "admin"; + context.Roles.Update(role); + await context.SaveChangesAsync(); + var role1 = await context.Roles.FirstOrDefaultAsync(b => b. Name == "admin"); + Assert.IsNotNull(role1); + Assert.AreEqual("admin", role1.Name); + } + } + + [TestMethod] + public async Task TestDeleteRole() + { + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new StubbedContext(options)) + { + context.Database.EnsureCreated(); + + var newRole = new RoleEntity { Name = "user" }; + await context.Roles.AddAsync(newRole); + await context.SaveChangesAsync(); + + var role = await context.Roles.FirstOrDefaultAsync(b => b.Name == "user"); + context.Roles.Remove(role); + await context.SaveChangesAsync(); + var role1 = await context.Roles.FirstOrDefaultAsync(b => b.Name == "user"); + Assert.IsNull(role1); + } + } + } + +} \ No newline at end of file