Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }