private void EditQuestion(Question existingQuestion, ManageQuestionDto updatedQuestion) { existingQuestion.Body = updatedQuestion.Body; var existingAnswersIds = existingQuestion.Answers.Select(ea => ea.Id.ToString()).ToHashSet(); foreach (var updatedAnswer in updatedQuestion.Answers) { if (existingAnswersIds.Contains(updatedAnswer.Id)) { //update var existingAnswer = existingQuestion.Answers.SingleOrDefault(q => q.Id.ToString() == updatedAnswer.Id); this.EditAnswer(existingAnswer, updatedAnswer); existingAnswersIds.Remove(updatedAnswer.Id); } else { //add var answerToAdd = this.mapper.MapTo <Answer>(updatedAnswer); existingQuestion.Answers.Add(answerToAdd); this.answerRepo.Add(answerToAdd); } } foreach (var answerToDeleteId in existingAnswersIds) { //delete var answerToDelete = existingQuestion.Answers.SingleOrDefault(q => q.Id.ToString() == answerToDeleteId); this.answerRepo.Delete(answerToDelete); } this.questionRepo.Update(existingQuestion); }
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); }