From 67905ddda685ffb346863968fcb4374f780d8905 Mon Sep 17 00:00:00 2001 From: "damien.nortier" Date: Sun, 24 Mar 2024 18:26:33 +0100 Subject: [PATCH] ajout des derniers test d'une answer --- .../StubbedDbContext.cs | 4 +- WebApi/TestEntityManagers/Program.cs | 425 +++++++++++++----- 2 files changed, 319 insertions(+), 110 deletions(-) diff --git a/WebApi/StubbedDbContextLibrary/StubbedDbContext.cs b/WebApi/StubbedDbContextLibrary/StubbedDbContext.cs index fffc5e1..5d7eb13 100644 --- a/WebApi/StubbedDbContextLibrary/StubbedDbContext.cs +++ b/WebApi/StubbedDbContextLibrary/StubbedDbContext.cs @@ -17,9 +17,9 @@ namespace StubbedDbContextLibrary base.OnModelCreating(modelBuilder); var fakeDatas = fakeAnswers.datas; - foreach (var datas in fakeDatas) + foreach (var data in fakeDatas) { - modelBuilder.Entity().HasData(datas); + modelBuilder.Entity().HasData(data); } } diff --git a/WebApi/TestEntityManagers/Program.cs b/WebApi/TestEntityManagers/Program.cs index 03dc094..5b31249 100644 --- a/WebApi/TestEntityManagers/Program.cs +++ b/WebApi/TestEntityManagers/Program.cs @@ -7,15 +7,7 @@ using Model; using OrderCriterias; using StubbedDbContextLibrary; -var connection = new SqliteConnection("DataSource=:memory:"); - -connection.Open(); - -var opt = new DbContextOptionsBuilder() - .UseSqlite(connection) - .Options; -using var context = new StubbedDbContext(); -context.Database.EnsureCreated(); +// for each test, 'WF' mean 'waiting for' /// /// test of the 'addAnswer' method of an AnswerManager @@ -135,13 +127,13 @@ void TestRemoveAnswerById(MyDbContext context) if(a == null) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("test 1 AnswerEntityManager.RemoveAnswer OK"); + Console.WriteLine("test 1 AnswerEntityManager.removeAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("test 1 AnswerEntityManager.RemoveAnswer KO"); + Console.WriteLine("test 1 AnswerEntityManager.removeAnswer KO"); Console.ResetColor(); Console.WriteLine("what we have : " + a == null ? "null" : $"{a.Id} : {a.Content}"); Console.WriteLine("WF : null"); @@ -157,15 +149,15 @@ void TestRemoveAnswerById(MyDbContext context) && a.Id == answer.Id && a.Id != context.Answers.Select(a => a.Id).Min() /* <=> he is removed */) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("test 2 AnswerEntityManager.RemoveAnswer OK"); + Console.WriteLine("test 2 AnswerEntityManager.removeAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("test 2 AnswerEntityManager.RemoveAnswer KO"); + Console.WriteLine("test 2 AnswerEntityManager.removeAnswer KO"); Console.ResetColor(); - Console.WriteLine("what we have : " + a == null ? "null" : $"{a.Id} : {a.Content}"); + Console.WriteLine("what we have : " + a == null ? "null" : $"{a!.Id} : {a!.Content}"); Console.WriteLine("WF : " + answer == null ? "null" : $"{answer.Id} : {answer.Content}"); } } @@ -173,42 +165,53 @@ void TestRemoveAnswerById(MyDbContext context) /// /// test of the 'getNbElement' method of an AnswerManager /// -void TestGetNbAnswers(MyDbContext context) +void TestGetNbAnswers() { - var mgr = new AnswerEntityManager(context); - int count = context.Answers.CountAsync().Result; - int nb = 0; - var list = new List() - { - new AnswerEntity { Content = "Ajout 1" }, - new AnswerEntity { Content = "Ajout 2" }, - new AnswerEntity { Content = "Ajout 3" }, - new AnswerEntity { Content = "Ajout 4" }, - new AnswerEntity { Content = "Ajout 5" }, - new AnswerEntity { Content = "Ajout 6" }, - new AnswerEntity { Content = "Ajout 7" }, - new AnswerEntity { Content = "Ajout 8" }, - new AnswerEntity { Content = "Ajout 9" }, - new AnswerEntity { Content = "Ajout 10" } - }; - foreach (var answer in list) + var connection = new SqliteConnection("DataSource=:memory:"); + + connection.Open(); + + var opt = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + using (var context = new MyDbContext(opt)) { - var tmp = mgr.addAnswer(answer).Result; - count++; - nb++; - if (mgr.getNbAnswers() == count) - { // ok, it's incremented - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {nb} AnswerEntityManager.getNbAnswers OK"); - Console.ResetColor(); - } - else + context.Database.EnsureCreated(); + var mgr = new AnswerEntityManager(context); + int count = context.Answers.CountAsync().Result; + int nb = 0; + var list = new List() { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {nb} AnswerEntityManager.getNbAnswers KO"); - Console.ResetColor(); - Console.WriteLine($"what we have : {mgr.getNbAnswers()}"); - Console.WriteLine($"WF : {count}"); + new AnswerEntity { Content = "Ajout 1" }, + new AnswerEntity { Content = "Ajout 2" }, + new AnswerEntity { Content = "Ajout 3" }, + new AnswerEntity { Content = "Ajout 4" }, + new AnswerEntity { Content = "Ajout 5" }, + new AnswerEntity { Content = "Ajout 6" }, + new AnswerEntity { Content = "Ajout 7" }, + new AnswerEntity { Content = "Ajout 8" }, + new AnswerEntity { Content = "Ajout 9" }, + new AnswerEntity { Content = "Ajout 10" } + }; + foreach (var answer in list) + { + var tmp = mgr.addAnswer(answer).Result; + count++; + nb++; + if (mgr.getNbAnswers() == count) + { // ok, it's incremented + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"test {nb} AnswerEntityManager.getNbAnswers OK"); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine($"test {nb} AnswerEntityManager.getNbAnswers KO"); + Console.ResetColor(); + Console.WriteLine($"what we have : {mgr.getNbAnswers()}"); + Console.WriteLine($"WF : {count}"); + } } } } @@ -217,17 +220,17 @@ void TestGetNbAnswers(MyDbContext context) /// member data for the 'TestGetAnswer' test method /// /// a set of all inline datas for the test method -IEnumerable TestGetAnswer_Datas() +(int id, AnswerEntity? waiting)[] TestGetAnswer_Datas(MyDbContext context) { - var datas = fakeAnswers.datas; + var datas = context.Answers; int max = 0; - List tmp = new List(); + (int id, AnswerEntity? waiting)[] tmp = new (int id, AnswerEntity? waiting)[] {}; foreach (var item in datas) { - tmp.Add(new Object[] { item.Id, item }); + tmp.Append((item.Id, item)); if (max < item.Id) max = item.Id; } - tmp.Add(new Object[] { max + 1, null! }); + tmp.Append((max + 1, null!)); return tmp; } @@ -242,17 +245,17 @@ void TestGetAnswer(MyDbContext context, int numTest, int id, AnswerEntity? waiti context.Database.EnsureCreated(); var mgr = new AnswerEntityManager(context); - var tmp = mgr.getAnswer(id + 2).Result; + var tmp = mgr.getAnswer(id).Result; if (tmp?.Content == waiting?.Content) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {numTest} AnswerEntityManager.addAnswer OK"); + Console.WriteLine($"test {numTest} AnswerEntityManager.getAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {numTest} AnswerEntityManager.addAnswer KO"); + Console.WriteLine($"test {numTest} AnswerEntityManager.getAnswer KO"); Console.ResetColor(); } } @@ -261,48 +264,47 @@ void TestGetAnswer(MyDbContext context, int numTest, int id, AnswerEntity? waiti /// member data for the 'TestGetAnswer' test method /// /// a set of all inline datas for the test method -static IEnumerable TestGetSomeAnswers_Datas() +(int numPage, int count, IEnumerable? waiting, AnswerOrderCriteria? orderCriteria)[] TestGetSomeAnswers_Datas() { var datas = fakeAnswers.datas; var count = datas.Count(); // remind that to add answers, we haven't ordered this collection // but we just have done a foreach - return new List - { + return [ // 1 : 0 answer from the page 1 then, -1 answer from this page // WF : count < 1 so we got null - new object?[] { 1, 0, null }, - new object?[] { 1, -1, null }, + (1, 0, null, null), + (1, -1, null, null), // 2 : 1 answers from the page 0 then, 1 answers from the page -1 // WF : page < 1 so we got null - new object?[] { 0, 1, null }, - new object?[] { -1, 1, null }, + (0, 1, null, null), + (-1, 1, null, null), // 3 : 10 answers from the page 1 // WF : the first 10 element of datas - new object?[] { 1, 10, datas.Take(10) }, + (1, 10, datas.Take(10), null), // 4 : 10 elements from the page 1 order by id // WF : the first 10 element of datas order by id - new object?[] { 1, 10, datas.OrderBy(e => e.Id).Take(10), AnswerOrderCriteria.ById }, + (1, 10, datas.OrderBy(e => e.Id).Take(10), AnswerOrderCriteria.ById), // 5 : 10 elements from the page 1 order by content // WF : the first 10 element of datas order by content - new object?[] { 1, 10, datas.OrderBy(e => e.Content).Take(10), AnswerOrderCriteria.ById }, + (1, 10, datas.OrderBy(e => e.Content).Take(10), AnswerOrderCriteria.ById), // 6 : repeat 3, 4 and 5 with the page 2 // WF : the 10 next answer from each case - new object?[] { 2, 10, datas.Skip(10).Take(10) }, - new object?[] { 1, 10, datas.OrderBy(e => e.Id).Skip(10).Take(10), AnswerOrderCriteria.ById }, - new object?[] { 1, 10, datas.OrderBy(e => e.Content).Skip(10).Take(10), AnswerOrderCriteria.ByContent }, + (2, 10, datas.Skip(10).Take(10), null), + (1, 10, datas.OrderBy(e => e.Id).Skip(10).Take(10), AnswerOrderCriteria.ById), + (1, 10, datas.OrderBy(e => e.Content).Skip(10).Take(10), AnswerOrderCriteria.ByContent), // 7 : count/4 elements from the page 4 // WF : the lasts count/4 elements of datas - new object?[] { 4, count / 4, datas.TakeLast(count / 4) }, + (4, count / 4, datas.TakeLast(count / 4), null), // 8 : count/4 elements from the page 5 // WF : null since num (4) >= count / (count/4) - new object?[] { 5, count / 4, null }, + (5, count / 4, null, null), // 9 : 10 elements from the page 4 // WF : since there's only 31 elements in fake datas, // we got the last element - new object?[] { 4, 10, datas.TakeLast(1) } - }; + (4, 10, datas.TakeLast(1), null) + ]; } /// @@ -313,101 +315,308 @@ static IEnumerable TestGetSomeAnswers_Datas() /// set of answers expected /// the order criteria /// nothing but a Task -void TestGetSomeAnswers(MyDbContext context, int numTest, int num, int count, IEnumerable? waiting, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById) +void TestGetSomeAnswers(MyDbContext context, int numTest, int num, int count, List? waiting, AnswerOrderCriteria? orderCriteria) { context.Database.EnsureCreated(); var mgr = new AnswerEntityManager(context); var nbPages = count == 0 ? -1 : mgr.getNbAnswers() / count; - var tmp = mgr.getAnswers(num, count, orderCriteria).Result; + (int nbPages, IEnumerable? answers) tmp = orderCriteria == null ? mgr.getAnswers(num, count).Result : mgr.getAnswers(num, count, orderCriteria.Value).Result; if(tmp.nbPages == nbPages){ Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {numTest} AnswerEntityManager.getSomeAnswers OK"); + Console.WriteLine($"test {2*numTest} AnswerEntityManager.getSomeAnswers OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {numTest} AnswerEntityManager.getSomeAnswers KO"); + Console.WriteLine($"test {2*numTest} AnswerEntityManager.getSomeAnswers KO"); Console.ResetColor(); } if (waiting == null && tmp.answers == null) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers OK"); + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers OK"); Console.ResetColor(); } else if (waiting != null && tmp.answers != null) { - if (waiting?.Count() == 0) + if (waiting.Count() == 0 && tmp.answers.Count() == 0) { - if(tmp.answers == null) - { - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers OK"); - Console.ResetColor(); - } - else - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers KO"); - Console.ResetColor(); - } + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers OK"); + Console.ResetColor(); } - else + else if(waiting.Count() != 0 && tmp.answers.Count() == 0) { var nbFautes = 0; for (var i = 0; i < count; i++) { var e1 = waiting!.ElementAt(i); - var e2 = tmp.answers.ElementAt(i); - if(e2.Content != e1.Content || e2.IdQuestion != e1.IdQuestion) nbFautes++; + var e2 = tmp.answers!.ElementAt(i); + if (e2.Content != e1.Content || e2.IdQuestion != e1.IdQuestion) nbFautes++; } if (nbFautes == 0) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers OK"); + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers KO"); + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers KO"); Console.ResetColor(); + Console.WriteLine($"numPage : {num}, count : {count}"); + Console.Write("what we have : "); + if (tmp.answers == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + tmp.answers.ToList().ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); + } + Console.Write("WF : "); + if (waiting == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + waiting.ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); + } + } + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers KO"); + Console.ResetColor(); + Console.WriteLine($"numPage : {num}, count : {count}, nbEl : {mgr.getNbAnswers()}"); + Console.Write("what we have : "); + if (tmp.answers == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + tmp.answers.ToList().ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); + } + Console.Write("WF : "); + if (waiting == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + waiting.ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); } } } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers KO"); + Console.WriteLine($"test {2*numTest + 1} AnswerEntityManager.getSomeAnswers KO"); Console.ResetColor(); + Console.WriteLine($"numPage : {num}, count : {count}"); + Console.Write("what we have : "); + if (tmp.answers == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + tmp.answers.ToList().ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); + } + Console.Write("WF : "); + if (waiting == null) Console.WriteLine("null"); + else + { + Console.Write("{ "); + waiting.ForEach(a => Console.Write("{" + $"id : {a.Id}, content : {a.Content}" + "}, ")); + Console.WriteLine("}"); + } + } +} + +/// +/// test of the 'supprimerAnswer' method of an AnswerManager +/// +void TestRemoveAnswer(MyDbContext context) +{ + var mgr = new AnswerEntityManager(context); + var a = mgr.removeAnswer(new AnswerEntity { Content = "test remove answer"}).Result; + // 1) with an id greater or equal + // to the number of element + // WF : it don't works so 'a' is null, + if (a == null) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("test 1 AnswerEntityManager.removeAnswer OK"); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("test 1 AnswerEntityManager.removeAnswer KO"); + Console.ResetColor(); + Console.WriteLine("what we have : " + a == null ? "null" : $"{a.Id} : {a.Content}"); + Console.WriteLine("WF : null"); + } + + var answer = context.Answers.Single(a => a.Id == context.Answers.Select(a => a.Id).Min()); + a = mgr.removeAnswer(answer).Result; + // 1) with a content that correspond to an answer + // WF : it works so 'a' is not null, + // and since we've delete the answer with + // the id 1, the content is "châteigne" + if (a != null && a.Content == answer.Content + && a.Id == answer.Id && a.Id != context.Answers.Select(a => a.Id).Min() /* <=> he is removed */) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("test 2 AnswerEntityManager.removeAnswer OK"); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("test 2 AnswerEntityManager.removeAnswer KO"); + Console.ResetColor(); + Console.WriteLine("what we have : " + a == null ? "null" : $"{a!.Id} : {a!.Content}"); + Console.WriteLine("WF : " + answer == null ? "null" : $"{answer.Id} : {answer.Content}"); + } +} + +(int id, AnswerEntity modified, AnswerEntity? waiting)[] TestUpdateAnswer_Datas(MyDbContext context) +{ + return new (int, AnswerEntity, AnswerEntity?)[] + { + // 1) with an id that is not allowed + // WF : since no answer match with this id, + // the function return null + ( + context.Answers.Select(a => a.Id).Max() + 1, + new AnswerEntity + { + Id = 3, + Content = "we don't care about" + }, + null + ), + // 2) with a content that correspond to the content of another answer + // WF : since some answers can each have same content, it work + // and the id of the answer we got is the one we give (content.Answers.Select.(a => a.id.Min()) + // and his content is the one we want + ( + context.Answers.Select(a => a.Id).Min(), + new AnswerEntity + { + Id = 5, + Content = context.Answers.Single(a => a.Id == context.Answers.Select(a => a.Id).Min()).Content, + }, + new AnswerEntity + { + Id = context.Answers.Select(a => a.Id).Min(), + Content = context.Answers.Single(a => a.Id == context.Answers.Select(a => a.Id).Min()).Content, + } + ), + // 3) normal insertion + // WF : the id of the answer we got is the one we + // give (content.Answers.Select.(a => a.id.Min()) + // and his content is the one we want + ( + context.Answers.Select(a => a.Id).Max(), + new AnswerEntity + { + Id = context.Answers.Select(a => a.Id).Min(), + Content = context.Answers.First().Content + }, + new AnswerEntity + { + Id = context.Answers.Select(a => a.Id).Max(), + Content = context.Answers.First().Content + } + ) + }; +} + +void TestUpdateAnswer(MyDbContext context, int numTest, int id, AnswerEntity modified, AnswerEntity? waiting) +{ + var mgr = new AnswerEntityManager(context); + var response = mgr.updateAnswer(id, modified).Result; + if((waiting == null && response == null) || (waiting != null && response != null && response.Id == id && response.Content == waiting.Content)) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"test {numTest} AnswerEntityManager.updateAnswer OK"); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("test 2 AnswerEntityManager.removeAnswer KO"); + Console.ResetColor(); + Console.WriteLine("what we have : " + response == null ? "null" : $"{id} : {response!.Content}"); + Console.WriteLine("WF : " + waiting == null ? "null" : $"{waiting!.Id} : {waiting.Content}"); } } // Tests of an answer +void TestAnswer(MyDbContext context) { TestAddAnswer(); TestRemoveAnswerById(context); - TestGetNbAnswers(context); - var tmp = TestGetAnswer_Datas(); - for (int i = 0; i < tmp.Count(); i++) + TestGetNbAnswers(); { - TestGetAnswer(context, i, (int)tmp.ElementAt(i).ElementAt(0)!, (AnswerEntity)tmp.ElementAt(i).ElementAt(1)!); + var tmp = TestGetAnswer_Datas(context); + for (int i = 0; i < tmp.Count(); i++) + { + TestGetAnswer( + context, + i+1, + tmp.ElementAt(i).id, + tmp.ElementAt(i).waiting + ); + } + } + { + var tmp = TestGetSomeAnswers_Datas(); + for (int i = 0; i < tmp.Count(); i++) + { + TestGetSomeAnswers( + context, + i+1, + tmp.ElementAt(i).numPage, + tmp.ElementAt(i).count, + tmp.ElementAt(i).waiting?.ToList(), + tmp.ElementAt(i).orderCriteria + ); + } } - tmp = TestGetSomeAnswers_Datas(); - for (int i = 0; i < tmp.Count(); i++) + TestRemoveAnswer(context); { - TestGetSomeAnswers(context, i, (int)tmp.ElementAt(i).ElementAt(0)!, (int)tmp.ElementAt(i).ElementAt(1)!, - (IEnumerable?)tmp.ElementAt(i).ElementAtOrDefault(2), - (AnswerOrderCriteria)(tmp.ElementAt(i).ElementAtOrDefault(i) ?? AnswerOrderCriteria.ById) - ); + var tmp = TestUpdateAnswer_Datas(context); + for (int i=0; i < tmp.Count(); i++) + { + TestUpdateAnswer( + context, + i+1, + tmp.ElementAt(i).id, + tmp.ElementAt(i).modified, + tmp.ElementAt(i).waiting + ); + } } } +void Test(MyDbContext context) +{ + TestAnswer(context); +} +var connection = new SqliteConnection("DataSource=:memory:"); -// removeAnswer by element +connection.Open(); -// updateAnswer \ No newline at end of file +var opt = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; +using var context = new StubbedDbContext(opt); +context.Database.EnsureCreated(); +Test(context); \ No newline at end of file