private void EditTest(ManageTestDto updatedTest, Test existingTest) { existingTest.Name = updatedTest.TestName; existingTest.Duration = updatedTest.RequestedTime; existingTest.IsPublished = updatedTest.IsPublished; var existingQuestionsIds = existingTest.Questions.Select(eq => eq.Id.ToString()).ToHashSet(); foreach (var updatedQuestion in updatedTest.Questions) { if (existingQuestionsIds.Contains(updatedQuestion.Id)) { //update var existingQuestion = existingTest.Questions.SingleOrDefault(q => q.Id.ToString() == updatedQuestion.Id); this.EditQuestion(existingQuestion, updatedQuestion); existingQuestionsIds.Remove(updatedQuestion.Id); } else { //add var questiontoAdd = this.mapper.MapTo <Question>(updatedQuestion); existingTest.Questions.Add(questiontoAdd); this.questionRepo.Add(questiontoAdd); } } foreach (var questionToDeleteId in existingQuestionsIds) { //delete var questionToDelete = existingTest.Questions.SingleOrDefault(q => q.Id.ToString() == questionToDeleteId); this.DeleteQuestion(questionToDelete); } this.testRepo.Update(existingTest); }
public void CallDataSaverAdd() { var testDtoArgument = new ManageTestDto() { CategoryName = "Java" }; var testToAdd = new Test(); this.mapperMock.Setup(x => x.MapTo <Test>(It.IsAny <ManageTestDto>())) .Returns(testToAdd); var categories = new List <Category>() { new Category() { Name = "Java" } }; this.categoryRepoMock.Setup(x => x.All) .Returns(categories.AsQueryable()); var sut = new TestService( testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object, mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object); sut.CreateTest(testDtoArgument); this.dataSaverMock.Verify(x => x.SaveChanges(), Times.Once); }
public void CreateTest(ManageTestDto testDto) { if (testDto == null) { throw new ArgumentNullException(nameof(testDto)); } var testToAdd = this.mapper.MapTo <Test>(testDto); var category = this.categoryRepo.All.SingleOrDefault(c => c.Name == testDto.CategoryName) ?? throw new ArgumentException($"Category {testDto.CategoryName} does not exists!"); testToAdd.Category = category; this.testRepo.Add(testToAdd); this.dataSaver.SaveChanges(); this.memoryCache.Remove("Dashboard-Tests"); }
public void EditTest(ManageTestDto updatedTest) { if (updatedTest == null) { throw new ArgumentNullException(nameof(updatedTest)); } var existingTest = this.testRepo.All .Where(t => t.Id.ToString() == updatedTest.Id) .Include(t => t.Questions) .ThenInclude(q => q.Answers) .SingleOrDefault(); this.EditTest(updatedTest, existingTest); var category = this.categoryRepo.All.SingleOrDefault(c => c.Name == updatedTest.CategoryName) ?? throw new ArgumentException($"Category {updatedTest.CategoryName} does not exists!"); existingTest.Category = category; this.dataSaver.SaveChanges(); this.memoryCache.Remove("Dashboard-Tests"); }
public void SucessfullyCallDataSaverSaveChanges_WhenInvokedWithValidParameters() { // Arrange // Domain var testId = new Guid(); var questionId = new Guid(); var answerId = new Guid(); var category = new Category() { Name = "JAVA" }; var questionAnswers = new List <Answer>() { new Answer() { Id = answerId, IsDeleted = false } }; var testQuestions = new List <Question>() { new Question() { Id = questionId, Answers = questionAnswers, IsDeleted = false } }; var testStub = new Test() { Id = testId, Questions = testQuestions, Category = category }; var testList = new List <Test>() { testStub }; this.testRepoMock.Setup(x => x.All) .Returns(testList.AsQueryable()); this.categoryRepoMock.Setup(x => x.All) .Returns(new List <Category>() { category }.AsQueryable()); // DTO var dtoQuestion = new ManageQuestionDto() { Id = questionId.ToString() }; var dtoAnswer = new ManageAnswerDto() { Id = answerId.ToString() }; var dtoAnswersList = new List <ManageAnswerDto>() { dtoAnswer }; dtoQuestion.Answers = dtoAnswersList; var dtoQuestionsList = new List <ManageQuestionDto>() { dtoQuestion }; var testDtoArgument = new ManageTestDto() { Id = testId.ToString(), CategoryName = category.Name, Questions = dtoQuestionsList }; var sut = new TestService( testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object, mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object); // Act sut.EditTest(testDtoArgument); // Assert this.dataSaverMock.Verify(x => x.SaveChanges(), Times.Once); }
public void SucessfullyCallQuestionRepoAdd_WhenInvokedWithValidParameters() { // Arrange // Domain var testId = new Guid(); var questionId = new Guid(); var answerId = new Guid(); var category = new Category() { Name = "JAVA" }; var questionAnswers = new List <Answer>() { new Answer() { Id = answerId, IsDeleted = false } }; var testQuestions = new List <Question>() { new Question() { Id = questionId, Answers = questionAnswers, IsDeleted = false } }; var testStub = new Test() { Id = testId, Questions = testQuestions, Category = category }; var testList = new List <Test>() { testStub }; this.testRepoMock.Setup(x => x.All) .Returns(testList.AsQueryable()); this.categoryRepoMock.Setup(x => x.All) .Returns(new List <Category>() { category }.AsQueryable()); // DTO //var questiontoAdd = this.mapper.MapTo<Question>(updatedQuestion); var guidString = "e376ce00-89b0-44f3-bd1c-a248535585b9"; var questionDomainToReturn = new Question() { Id = Guid.Parse(guidString) }; this.mapperMock.Setup(x => x.MapTo <Question>(It.IsAny <ManageQuestionDto>())) .Returns(questionDomainToReturn); var dtoQuestion = new ManageQuestionDto() { Id = guidString }; var dtoAnswer = new ManageAnswerDto() { Id = answerId.ToString() }; var dtoAnswersList = new List <ManageAnswerDto>() { dtoAnswer }; dtoQuestion.Answers = dtoAnswersList; var dtoQuestionsList = new List <ManageQuestionDto>() { dtoQuestion }; var testDtoArgument = new ManageTestDto() { Id = testId.ToString(), CategoryName = category.Name, Questions = dtoQuestionsList }; var sut = new TestService( testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object, mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object); // Act sut.EditTest(testDtoArgument); // Assert this.questionRepoMock.Verify(x => x.Add(questionDomainToReturn), Times.Once); }
public void ReturnCorrectData_WhenInvokedWithValidParameters() { // Arrange var testId = new Guid(); var testName = "Test"; var category = new Category() { Name = "JAVA" }; var questionAnswers = new List <Answer>() { new Answer() { IsDeleted = false } }; var testQuestions = new List <Question>() { new Question() { Answers = questionAnswers, IsDeleted = false } }; var testStub = new Test() { Name = testName, Questions = testQuestions, Category = category }; var testList = new List <Test>() { testStub }; this.testRepoMock.Setup(x => x.All) .Returns(testList.AsQueryable()); var testDtoToReturn = new ManageTestDto() { TestName = testName }; this.mapperMock.Setup(x => x.MapTo <ManageTestDto>(It.IsAny <Test>())) .Returns(testDtoToReturn); var sut = new TestService( testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object, mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object); // Act var result = sut.GetTestByNameAndCategory(testId.ToString()); // Assert Assert.AreEqual(result, testDtoToReturn); }