using DbConnectionLibrairie; using Entities; using EntityManagers; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; 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(); /// /// test of the 'addAnswer' method of an AnswerManager /// void TestAddAnswer() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var opt = new DbContextOptionsBuilder() .UseSqlite(connection) .Options; using (var context = new MyDbContext(opt)) { context.Database.EnsureCreated(); var manager = new AnswerEntityManager(context); var answerToAdd = new AnswerEntity { Id = 1, Content = "chateîgne" }; var a = manager.addAnswer(answerToAdd).Result; // 1) normal insertion // WF : a is the same // as answerToAdd if (a.Content == answerToAdd.Content && a.Id == answerToAdd.Id) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("test 1 AnswerEntityManager.addAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("test 1 AnswerEntityManager.addAnswer KO"); Console.ResetColor(); } answerToAdd = new AnswerEntity { Id = 5, Content = "damien" }; a = manager.addAnswer(answerToAdd).Result; // 2) with a random id greater than 0 // WF : 'a' content is equal to the // content of 'answerToAdd' // and since it's the second answer // that we add, his id equal 2 if (a.Content == answerToAdd.Content && a.Id == 2) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("test 2 AnswerEntityManager.addAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("test 2 AnswerEntityManager.addAnswer KO"); Console.ResetColor(); } answerToAdd = new AnswerEntity { Id = 7, Content = "chateîgne" }; a = manager.addAnswer(answerToAdd).Result; // 3) with a content that we already have added // WF : the function return the answer which already // have the same content so the content of 'a' is "châteigne" // and his id is 1 if (a.Content == "chateîgne" && a.Id == 1) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("test 3 AnswerEntityManager.addAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("test 3 AnswerEntityManager.addAnswer KO"); Console.ResetColor(); } answerToAdd = new AnswerEntity { Id = 7, Content = "CHATEÎGNE" }; a = manager.addAnswer(answerToAdd).Result; // 3) with a content that we already have added // but in upperCase instead of lowerCase // WF : the function return the answer which // already have the same content so the content // of 'a' is "chateîgne" and his id is 1 if (a.Content == "chateîgne" && a.Id == 1) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("test 4 AnswerEntityManager.addAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("test 4 AnswerEntityManager.addAnswer KO"); Console.ResetColor(); } foreach (var item in context.Answers) context.Answers.Remove(item); // we remove all database answers context.SaveChanges(); } } /// /// test of the 'supprimerAnswer' method of an AnswerManager /// void TestRemoveAnswerById(MyDbContext context) { var mgr = new AnswerEntityManager(context); var a = mgr.removeAnswer(context.Answers.Select(a => a.Id).Max() + 1).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(); } a = mgr.removeAnswer(context.Answers.Select(a => a.Id).Min()).Result; // 1) with an id that is allowed 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 == context.Answers.Single(a => a.Id == context.Answers.Select(a => a.Id).Min()).Content && a.Id == context.Answers.Select(a => a.Id).Min()) { 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(); } } /// /// test of the 'getNbElement' method of an AnswerManager /// void TestGetNbAnswers(MyDbContext context) { var mgr = new AnswerEntityManager(context); int count = context.Answers.CountAsync().Result; int nb = 0; foreach (var answer in fakeAnswers.datas) { 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(); } } } /// /// member data for the 'TestGetAnswer' test method /// /// a set of all inline datas for the test method IEnumerable TestGetAnswer_Datas() { var datas = fakeAnswers.datas; int max = 0; List tmp = new List(); foreach (var item in datas) { tmp.Add(new Object[] { item.Id, item }); if (max < item.Id) max = item.Id; } tmp.Add(new Object[] { max + 1, null! }); return tmp; } /// /// test of the 'getAnswer' method of an AnswerManager /// /// identifiant of the answer to get /// answer expected /// nothing but a Task void TestGetAnswer(MyDbContext context, int numTest, int id, AnswerEntity? waiting) { context.Database.EnsureCreated(); var mgr = new AnswerEntityManager(context); var tmp = mgr.getAnswer(id + 2).Result; if (tmp?.Content == waiting?.Content) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"test {numTest} AnswerEntityManager.addAnswer OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"test {numTest} AnswerEntityManager.addAnswer KO"); Console.ResetColor(); } } /// /// member data for the 'TestGetAnswer' test method /// /// a set of all inline datas for the test method static IEnumerable 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 { // 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 }, // 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 }, // 3 : 10 answers from the page 1 // WF : the first 10 element of datas new object?[] { 1, 10, datas.Take(10) }, // 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 }, // 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 }, // 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 }, // 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) }, // 8 : count/4 elements from the page 5 // WF : null since num (4) >= count / (count/4) new object?[] { 5, count / 4, 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) } }; } /// /// test of the 'getAnswer' method of an AnswerManager /// /// the page number /// page elements number /// 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) { context.Database.EnsureCreated(); var mgr = new AnswerEntityManager(context); var nbPages = count == 0 ? -1 : mgr.getNbAnswers() / count; var tmp = mgr.getAnswers(num, count, orderCriteria).Result; if(tmp.nbPages == nbPages){ Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"test {numTest} AnswerEntityManager.getSomeAnswers OK"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"test {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.ResetColor(); } else if (waiting != null && tmp.answers != null) { if (waiting?.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(); } } else { 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++; } if (nbFautes == 0) { 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(); } } } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"test {numTest + 1} AnswerEntityManager.getSomeAnswers KO"); Console.ResetColor(); } } // Tests of an answer { TestAddAnswer(); TestRemoveAnswerById(context); TestGetNbAnswers(context); var tmp = TestGetAnswer_Datas(); for (int i = 0; i < tmp.Count(); i++) { TestGetAnswer(context, i, (int)tmp.ElementAt(i).ElementAt(0)!, (AnswerEntity)tmp.ElementAt(i).ElementAt(1)!); } tmp = TestGetSomeAnswers_Datas(); for (int i = 0; i < tmp.Count(); i++) { 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) ); } } // removeAnswer by element // updateAnswer